60IntArray Tr2Shell7XFEM :: orderingDofTypes = {1, 2, 3, 8, 9, 10, 15, 16, 17, 22, 23, 24, 29, 30, 31, 36, 37, 38,
61 4, 5, 6, 11, 12, 13, 18, 19, 20, 25, 26, 27, 32, 33, 34, 39, 40, 41,
62 7, 14, 21, 28, 35, 42};
63IntArray Tr2Shell7XFEM :: orderingNodes = {1, 2, 3, 19, 20, 21, 37, 4, 5, 6, 22, 23, 24, 38, 7, 8, 9, 25, 26, 27, 39,
64 10, 11, 12, 28, 29, 30, 40, 13, 14, 15, 31, 32, 33, 41, 16, 17, 18,
66IntArray Tr2Shell7XFEM :: orderingEdgeNodes = {1, 2, 3, 10, 11, 12, 19, 4, 5, 6, 13, 14, 15, 20, 7, 8, 9, 16, 17, 18, 21};
75Tr2Shell7XFEM :: giveOrderingDofTypes()
const
81Tr2Shell7XFEM :: giveOrderingNodes()
const
86Tr2Shell7XFEM :: giveOrderingEdgeNodes()
const
95 nodeLocalXiCoords =
Vec6(1., 0., 0., .5, 0., .5);
96 nodeLocalEtaCoords =
Vec6(0., 1., 0., .5, .5, 0.);
104Tr2Shell7XFEM :: computeGaussPoints()
118 for (
int i = 1; i <= this->
xMan->giveNumberOfEnrichmentItems(); i++ ) {
119 int numberOfInterfaces = this->
layeredCS->giveNumberOfLayers()-1;
121 for (
int j = 0; j < numberOfInterfaces; j++ ) {
135bool Tr2Shell7XFEM :: updateIntegrationRuleMultiCrack()
140 int numberOfLayers = this->
layeredCS->giveNumberOfLayers();
141 int numPointsThickness = this->
layeredCS->giveNumIntegrationPointsInLayer();
142 double totalThickness = this->
layeredCS->computeIntegralThick();
143 int numEI = this->
xMan->giveNumberOfEnrichmentItems();
144 std :: vector< std :: vector< FloatArray > >pointPartitions;
151 for (
int i = 0; i < numberOfLayers; i++ ) {
154 double zMid_i = this->
layeredCS->giveLayerMidZ(i+1);
155 double xiMid_i = 1.0 - 2.0 * ( totalThickness - this->
layeredCS->giveMidSurfaceZcoordFromBottom() - zMid_i ) / totalThickness;
157 if ( this->
xMan->isElementEnriched(
this) ) {
159 for (
int eiIndex = 1; eiIndex <= numEI; eiIndex++ ) {
167 double startXi, endXi;
168 bool intersection =
false;
169 pointPartitions.resize(0);
172 if ( intersection ) {
173 for (
int j = 0; j < int( pointPartitions.size() ); j++ ) {
200 for (
int i = 1; i <= this->
xMan->giveNumberOfEnrichmentItems(); i++ ) {
202 int numberOfInterfaces = this->
layeredCS->giveNumberOfLayers()-1;
204 for (
int j = 0; j < numberOfInterfaces; j++ ) {
216Tr2Shell7XFEM :: computeArea()
224Tr2Shell7XFEM :: giveEdgeDofMapping(
IntArray &answer,
int iEdge)
const
232 answer = {1, 2, 3, 8, 9, 10, 22, 23, 24, 4, 5, 6, 11, 12, 13, 25, 26, 27, 7, 14, 28};
234 }
else if ( iEdge == 2 ) {
235 answer = { 8, 9, 10, 15, 16, 17, 29, 30, 31, 11, 12, 13, 18, 19, 20, 32, 33, 34, 14, 21, 35};
237 }
else if ( iEdge == 3 ) {
238 answer = { 15, 16, 17, 1, 2, 3, 36, 37, 38, 18, 19, 20, 4, 5, 6, 39, 40, 41, 21, 7, 42};
246Tr2Shell7XFEM :: giveSurfaceDofMapping(
IntArray &answer,
int iSurf)
const
249 for(
int i = 1; i <= 42; i++){
265 auto G1 = Gcov.column(0);
266 auto G2 = Gcov.column(1);
267 auto temp =
cross(G1, G2);
268 double detJ =
norm(temp);
274Tr2Shell7XFEM :: computeVolumeAroundLayer(
GaussPoint *gp,
int layer)
278 double detJ =
det(Gcov) * 0.5 * this->
layeredCS->giveLayerThickness(layer);
#define REGISTER_Element(class)
int numberOfDofMans
Number of dofmanagers.
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
Domain * giveDomain() const
double & at(std::size_t i)
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.
IntArray numSubDivisionsArray
std ::vector< std ::unique_ptr< IntegrationRule > > czIntegrationRulesArray
Shell7BaseXFEM(int n, Domain *d)
std ::vector< std ::vector< Triangle > > crackSubdivisions
double evaluateHeavisideXi(double xi, ShellCrack *ei)
FloatMatrixF< 3, 3 > evalInitialCovarBaseVectorsAt(const FloatArrayF< 3 > &lCoords)
LayeredCrossSection * layeredCS
bool updateIntegrationRuleMultiCrack()
static IntArray orderingEdgeNodes
static FEI3dTrQuad interpolation
static IntArray orderingNodes
static IntArray orderingDofTypes
virtual void XfemElementInterface_partitionElement(std ::vector< Triangle > &oTriangles, const std ::vector< FloatArray > &iPoints)
Partitions the element into patches by a triangulation.
virtual void XfemElementInterface_prepareNodesForDelaunay(std ::vector< std ::vector< FloatArray > > &oPointPartitions, double &oCrackStartXi, double &oCrackEndXi, int iEnrItemIndex, bool &oIntersection)
Returns an array of array of points. Each array of points defines the points of a subregion of the el...
double norm(const FloatArray &x)
static FloatArray Vec6(const double &a, const double &b, const double &c, const double &d, const double &e, const double &f)
double det(const FloatMatrixF< 2, 2 > &mat)
Computes the determinant.
FloatArrayF< 3 > cross(const FloatArrayF< 3 > &x, const FloatArrayF< 3 > &y)
Computes $ x \cross y $.