OOFEM 3.0
Loading...
Searching...
No Matches
quasicontinuum.h
Go to the documentation of this file.
1/*
2 *
3 * ##### ##### ###### ###### ### ###
4 * ## ## ## ## ## ## ## ### ##
5 * ## ## ## ## #### #### ## # ##
6 * ## ## ## ## ## ## ## ##
7 * ## ## ## ## ## ## ## ##
8 * ##### ##### ## ###### ## ##
9 *
10 *
11 * OOFEM : Object Oriented Finite Element Code
12 *
13 * Copyright (C) 1993 - 2025 Borek Patzak
14 *
15 *
16 *
17 * Czech Technical University, Faculty of Civil Engineering,
18 * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19 *
20 * This library is free software; you can redistribute it and/or
21 * modify it under the terms of the GNU Lesser General Public
22 * License as published by the Free Software Foundation; either
23 * version 2.1 of the License, or (at your option) any later version.
24 *
25 * This program is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28 * Lesser General Public License for more details.
29 *
30 * You should have received a copy of the GNU Lesser General Public
31 * License along with this library; if not, write to the Free Software
32 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33 */
34
35#ifndef quasicontinuum_h
36#define quasicontinuum_h
37
38#include "floatarray.h"
39#include "element.h"
40#include "node.h"
41#include "qcnode.h"
42
43namespace oofem {
48{
49protected:
50 std::vector<IntArray> interpolationMeshNodes;
53 std::vector<IntArray> connectivityTable;
57
58public:
60 virtual ~Quasicontinuum();
61
62 void setNoDimensions(Domain *d);
63 void setupInterpolationMesh(Domain *d, int generateInterpolationElements, int interpolationElementsMaterialNumber, std::vector<IntArray> &newMeshNodes);
66
67 void applyApproach1(Domain *d);
68 void applyApproach2(Domain *d, int homMtrxType, double volumeOfInterpolationMesh);
69 void applyApproach3(Domain *d, int homMtrxType);
70
71 void homogenizationOfStiffMatrix(double &homogenizedE, double &homogenizedNu, const FloatMatrix &Diso );
72 void createGlobalStiffnesMatrix(FloatMatrix &Diso, double &S0, Domain *d, int homMtrxType, double volumeOfInterpolationMesh);
73
74 void computeStiffnessTensorOf1Link(FloatMatrix &D1, double &S0, Element *e, Domain *d);
75 bool stiffnessAssignment( std::vector<FloatMatrix> &individualStiffnessTensors, FloatArray &individialS0, Domain *d, Element *e, qcNode *qn1, qcNode *qn2 );
76
77 void computeIntersectionsOfLinkWithInterpElements( IntArray &intersected, std::vector<double> & lengths, Domain *d, Element *e, qcNode *qn1, qcNode *qn2);
78 bool computeIntersectionsOfLinkWith2DTringleElements( IntArray &intersected, std::vector<double> &lengths, Domain *d, Element *e, qcNode *qn1, qcNode *qn2);
79 bool computeIntersectionsOfLinkWith3DTetrahedraElements( IntArray &intersected, std::vector<double> &lengths, Domain *d, Element *e, qcNode *qn1, qcNode *qn2);
80
82
83 bool intersectionTestSegmentTrianglePlucker3D(FloatArray &intersectCoords, const FloatArray &A, const FloatArray &B, const FloatArray &C, const FloatArray &X1, const FloatArray &X2 );
84
85 int intersectionTestSegmentTetrahedra3D(std::vector<FloatArray> &intersectCoords, const FloatArray &A, const FloatArray &B, const FloatArray &C, const FloatArray &D, const FloatArray &X1, const FloatArray &X2 );
86
87 bool intersectionTestSegmentSegment2D(FloatArray &intersectCoords, const FloatArray &A1, const FloatArray &A2, const FloatArray &B1, const FloatArray &B2 );
88
89 int intersectionTestSegmentTriangle2D(std::vector<FloatArray> &intersectCoords, const FloatArray &A, const FloatArray &B, const FloatArray &C, const FloatArray &U1, const FloatArray &U2 );
90
91 void transformStiffnessTensorToMatrix(FloatMatrix &matrix, const FloatMatrix &tensor );
92};
93} // end namespace oofem
94#endif // quasicontinuum_h
void createInterpolationElements(Domain *d)
void applyApproach1(Domain *d)
void createGlobalStiffnesMatrix(FloatMatrix &Diso, double &S0, Domain *d, int homMtrxType, double volumeOfInterpolationMesh)
void applyApproach3(Domain *d, int homMtrxType)
IntArray interpolationElementNumbers
bool intersectionTestSegmentTrianglePlucker3D(FloatArray &intersectCoords, const FloatArray &A, const FloatArray &B, const FloatArray &C, const FloatArray &X1, const FloatArray &X2)
bool stiffnessAssignment(std::vector< FloatMatrix > &individualStiffnessTensors, FloatArray &individialS0, Domain *d, Element *e, qcNode *qn1, qcNode *qn2)
bool intersectionTestSegmentSegment2D(FloatArray &intersectCoords, const FloatArray &A1, const FloatArray &A2, const FloatArray &B1, const FloatArray &B2)
bool computeIntersectionsOfLinkWith3DTetrahedraElements(IntArray &intersected, std::vector< double > &lengths, Domain *d, Element *e, qcNode *qn1, qcNode *qn2)
bool computeIntersectionsOfLinkWith2DTringleElements(IntArray &intersected, std::vector< double > &lengths, Domain *d, Element *e, qcNode *qn1, qcNode *qn2)
void setNoDimensions(Domain *d)
std::vector< IntArray > connectivityTable
void homogenizationOfStiffMatrix(double &homogenizedE, double &homogenizedNu, const FloatMatrix &Diso)
void setupInterpolationMesh(Domain *d, int generateInterpolationElements, int interpolationElementsMaterialNumber, std::vector< IntArray > &newMeshNodes)
void computeStiffnessTensorOf1Link(FloatMatrix &D1, double &S0, Element *e, Domain *d)
IntArray interpolationElementIndices
void transformStiffnessTensorToMatrix(FloatMatrix &matrix, const FloatMatrix &tensor)
int intersectionTestSegmentTetrahedra3D(std::vector< FloatArray > &intersectCoords, const FloatArray &A, const FloatArray &B, const FloatArray &C, const FloatArray &D, const FloatArray &X1, const FloatArray &X2)
void initializeConnectivityTableForInterpolationElements(Domain *d)
void computeIntersectionsOfLinkWithInterpElements(IntArray &intersected, std::vector< double > &lengths, Domain *d, Element *e, qcNode *qn1, qcNode *qn2)
std::vector< IntArray > interpolationMeshNodes
void applyApproach2(Domain *d, int homMtrxType, double volumeOfInterpolationMesh)
void addCrosssectionToInterpolationElements(Domain *d)
int intersectionTestSegmentTriangle2D(std::vector< FloatArray > &intersectCoords, const FloatArray &A, const FloatArray &B, const FloatArray &C, const FloatArray &U1, const FloatArray &U2)

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