MCPcopy Create free account
hub / github.com/OpenSees/OpenSees / OrthotropicMaterial

Method OrthotropicMaterial

SRC/material/nD/OrthotropicMaterial.cpp:91–156  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

89}
90
91OrthotropicMaterial::OrthotropicMaterial(
92 int tag,
93 NDMaterial &theIsoMat,
94 double Ex, double Ey, double Ez, double Gxy, double Gyz, double Gzx,
95 double vxy, double vyz, double vzx,
96 double Asigmaxx, double Asigmayy, double Asigmazz, double Asigmaxyxy, double Asigmayzyz, double Asigmaxzxz)
97 : NDMaterial(tag, ND_TAG_OrthotropicMaterial)
98{
99 // copy the isotropic material
100 theIsotropicMaterial = theIsoMat.getCopy("ThreeDimensional");
101 if (theIsotropicMaterial == 0) {
102 opserr << "nDMaterial Orthotropic Error: failed to get a (3D) copy of the isotropic material\n";
103 exit(-1);
104 }
105
106 // compute the initial orthotropic constitutive tensor
107 static Matrix C0(6, 6);
108 C0.Zero();
109 double vyx = vxy * Ey / Ex;
110 double vzy = vyz * Ez / Ey;
111 double vxz = vzx * Ex / Ez;
112 double d = (1.0 - vxy * vyx - vyz * vzy - vzx * vxz - 2.0*vxy*vyz*vzx) / (Ex*Ey*Ez);
113 C0(0, 0) = (1.0 - vyz * vzy) / (Ey*Ez*d);
114 C0(1, 1) = (1.0 - vzx * vxz) / (Ez*Ex*d);
115 C0(2, 2) = (1.0 - vxy * vyx) / (Ex*Ey*d);
116 C0(1, 0) = (vxy + vxz * vzy) / (Ez*Ex*d);
117 C0(0, 1) = C0(1, 0);
118 C0(2, 0) = (vxz + vxy * vyz) / (Ex*Ey*d);
119 C0(0, 2) = C0(2, 0);
120 C0(2, 1) = (vyz + vxz * vyx) / (Ex*Ey*d);
121 C0(1, 2) = C0(2, 1);
122 C0(3, 3) = Gxy;
123 C0(4, 4) = Gyz;
124 C0(5, 5) = Gzx;
125
126 // compute the Asigma and its inverse
127 if (Asigmaxx <= 0 || Asigmayy <= 0 || Asigmazz <= 0 || Asigmaxyxy <= 0 || Asigmayzyz <= 0 || Asigmaxzxz <= 0) {
128 opserr << "nDMaterial Orthotropic Error: Asigma11, Asigma22, Asigma33, Asigma12, Asigma23, Asigma13 must be greater than 0.\n";
129 exit(-1);
130 }
131 static Matrix Asigma(6, 6);
132 Asigma.Zero();
133 Asigma(0, 0) = Asigmaxx;
134 Asigma(1, 1) = Asigmayy;
135 Asigma(2, 2) = Asigmazz;
136 Asigma(3, 3) = Asigmaxyxy;
137 Asigma(4, 4) = Asigmayzyz;
138 Asigma(5, 5) = Asigmaxzxz;
139 for (int i = 0; i < 6; ++i)
140 Asigma_inv(i) = 1.0 / Asigma(i, i);
141
142 // coompute the initial isotropic constitutive tensor and its inverse
143 static Matrix C0iso(6, 6);
144 static Matrix C0iso_inv(6, 6);
145 C0iso = theIsotropicMaterial->getInitialTangent();
146 int res = C0iso.Invert(C0iso_inv);
147 if (res < 0) {
148 opserr << "nDMaterial Orthotropic Error: the isotropic material gave a singular initial tangent.\n";

Callers

nothing calls this directly

Calls 6

exitFunction · 0.85
getCopyMethod · 0.45
ZeroMethod · 0.45
getInitialTangentMethod · 0.45
InvertMethod · 0.45
addMatrixProductMethod · 0.45

Tested by

no test coverage detected