57TrPlanestressRotAllman3d :: computeLocalNodalCoordinates(std :: vector< FloatArray > &lxy)
69 for (
int i = 0; i < 3; i++ ) {
70 const auto &nc = this->
giveNode(i + 1)->giveCoordinates();
76 for (
int i = 1; i <= 3; i++ ) {
77 lxy [ 3 ].at(i) = 0.5 * ( lxy [ 0 ].at(i) + lxy [ 1 ].at(i) );
78 lxy [ 4 ].at(i) = 0.5 * ( lxy [ 1 ].at(i) + lxy [ 2 ].at(i) );
79 lxy [ 5 ].at(i) = 0.5 * ( lxy [ 2 ].at(i) + lxy [ 0 ].at(i) );
85TrPlanestressRotAllman3d :: computeVolumeAround(
GaussPoint *gp)
89 std :: vector< FloatArray >lc;
99TrPlanestressRotAllman3d :: giveDofManDofIDMask(
int inode,
IntArray &answer)
const
102 D_u, D_v, D_w, R_u, R_v, R_w
108TrPlanestressRotAllman3d :: computeGtoLRotationMatrix()
123 e1.beDifferenceOf(this->
giveNode(2)->giveCoordinates(), this->
giveNode(1)->giveCoordinates());
130 e3.beVectorProductOf(e1, help);
135 e2.beVectorProductOf(e3, e1);
140 for (
int i = 1; i <= 3; i++ ) {
152TrPlanestressRotAllman3d :: computeGtoLRotationMatrix(
FloatMatrix &answer)
165 for (
int i = 1; i <= 3; i++ ) {
190 answer.
at(1, 1) = charVect.
at(1);
191 answer.
at(2, 2) = charVect.
at(2);
192 answer.
at(1, 2) = charVect.
at(3);
193 answer.
at(2, 1) = charVect.
at(3);
198 answer.
at(1, 1) = charVect.
at(1);
199 answer.
at(2, 2) = charVect.
at(2);
200 answer.
at(1, 2) = charVect.
at(3) / 2.;
201 answer.
at(2, 1) = charVect.
at(3) / 2.;
220 if ( type == IST_ShellForceTensor || type == IST_ShellStrainTensor ) {
222 if ( type == IST_ShellForceTensor ) {
232 answer.
at(1) = globTensor.
at(1, 1);
233 answer.
at(2) = globTensor.
at(2, 2);
234 answer.
at(3) = globTensor.
at(3, 3);
235 answer.
at(4) = c * globTensor.
at(2, 3);
236 answer.
at(5) = c * globTensor.
at(1, 3);
237 answer.
at(6) = c * globTensor.
at(1, 2);
241 }
else if ( type == IST_ShellMomentTensor || type == IST_CurvatureTensor ) {
245 return TrPlanestressRotAllman :: giveIPValue(answer, gp, type, tStep);
250TrPlanestressRotAllman3d :: computeLoadGToLRotationMtrx(
FloatMatrix &answer)
262 for (
int i = 1; i <= 3; i++ ) {
273TrPlanestressRotAllman3d :: computeBodyLoadVectorAt(
FloatArray &answer,
Load *forLoad,
TimeStep *tStep, ValueModeType mode)
280 double dens, dV, load;
304 load = force.
at(1) * dens * dV / 3.0;
307 answer.
at(13) = load;
309 load = force.
at(2) * dens * dV / 3.0;
312 answer.
at(14) = load;
314 load = force.
at(3) * dens * dV / 3.0;
317 answer.
at(15) = load;
329TrPlanestressRotAllman3d :: printOutputAt(FILE *file,
TimeStep *tStep)
338 fprintf( file,
" GP %2d.%-2d :", i + 1, gp->giveNumber() );
340 this->
giveIPValue(v, gp, IST_ShellStrainTensor, tStep);
341 fprintf(file,
" strains ");
342 for (
auto &val : v ) {
343 fprintf(file,
" %.4e", val);
346 this->
giveIPValue(v, gp, IST_CurvatureTensor, tStep);
347 fprintf(file,
"\n curvatures ");
348 for (
auto &val : v ) {
349 fprintf(file,
" %.4e", val);
353 this->
giveIPValue(v, gp, IST_ShellForceTensor, tStep);
354 fprintf(file,
"\n stresses ");
355 for (
auto &val : v ) {
356 fprintf(file,
" %.4e", val);
359 this->
giveIPValue(v, gp, IST_ShellMomentTensor, tStep);
360 fprintf(file,
"\n moments ");
361 for (
auto &val : v ) {
362 fprintf(file,
" %.4e", val);
#define REGISTER_Element(class)
Node * giveNode(int i) const
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
Index giveSize() const
Returns the size of receiver.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
void zero()
Zeroes all coefficients of receiver.
void rotatedWith(FloatMatrix &r, char mode)
void rotatedWith(const FloatMatrix &r, char mode='n')
void resize(Index rows, Index cols)
void zero()
Zeroes all coefficient of receiver.
double at(std::size_t i, std::size_t j) const
int SetUpPointsOnTriangle(int nPoints, MaterialMode mode) override
const FloatArray & giveNaturalCoordinates() const
Returns coordinate array of receiver.
IntegrationPointStatus * giveMaterialStatus(IntegrationPointStatusIDType key=IPSID_Default)
double giveWeight()
Returns integration weight of receiver.
virtual bcGeomType giveBCGeoType() const
virtual bcValType giveBCValType() const
GaussPoint * getIntegrationPoint(int n)
virtual void computeComponentArrayAt(FloatArray &answer, TimeStep *tStep, ValueModeType mode)
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
const FloatArray & giveStressVector() const
Returns the const pointer to receiver's stress vector.
void computeLocalNodalCoordinates(std::vector< FloatArray > &lxy) override
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
void giveCharacteristicTensor(FloatMatrix &answer, CharTensor type, GaussPoint *gp, TimeStep *tStep)
FloatMatrix * GtoLRotationMatrix
const FloatMatrix * computeGtoLRotationMatrix()
double computeVolumeAround(GaussPoint *gp) override
TrPlanestressRotAllman(int, Domain *)
MaterialMode giveMaterialMode() override
@ BodyLoadBGT
Distributed body load.