99 double x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4;
100 this->
giveNodeCoordinates(x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4);
107 double dx4 = x2 - x1;
108 double dy4 = y2 - y1;
109 double l4 = sqrt(dx4 * dx4 + dy4 * dy4);
111 double dx5 = x3 - x2;
112 double dy5 = y3 - y2;
113 double l5 = sqrt(dx5 * dx5 + dy5 * dy5);
115 double dx6 = x4 - x3;
116 double dy6 = y4 - y3;
117 double l6 = sqrt(dx6 * dx6 + dy6 * dy6);
119 double dx7 = x1 - x4;
120 double dy7 = y1 - y4;
121 double l7 = sqrt(dx7 * dx7 + dy7 * dy7);
123 double c4 = dy4 / l4;
124 double s4 = -dx4 / l4;
126 double c5 = dy5 / l5;
127 double s5 = -dx5 / l5;
129 double c6 = dy6 / l6;
130 double s6 = -dx6 / l6;
132 double c7 = dy7 / l7;
133 double s7 = -dx7 / l7;
136 double T101 = -3. / 2. / l4 * c4;
137 double T102 = -1. / 4. * c4 * c4 + 1. / 2. * s4 * s4;
138 double T103 = -1. / 4. * c4 * s4 - 1. / 2. * c4 * s4;
139 double T104 = 3. / 2. / l4 * c4;
140 double T105 = -1. / 4. * c4 * c4 + 1. / 2. * s4 * s4;
141 double T106 = -1. / 4. * c4 * s4 - 1. / 2. * c4 * s4;
143 double T201 = -3. / 2. / l4 * s4;
144 double T202 = -1. / 4. * c4 * s4 - 1. / 2. * c4 * s4;
145 double T203 = -1. / 4. * s4 * s4 + 1. / 2. * c4 * c4;
146 double T204 = 3. / 2. / l4 * s4;
147 double T205 = -1. / 4. * c4 * s4 - 1. / 2. * c4 * s4;
148 double T206 = -1. / 4. * s4 * s4 + 1. / 2. * c4 * c4;
150 double T304 = -3. / 2. / l5 * c5;
151 double T305 = -1. / 4. * c5 * c5 + 1. / 2. * s5 * s5;
152 double T306 = -1. / 4. * c5 * s5 - 1. / 2. * c5 * s5;
153 double T307 = 3. / 2. / l5 * c5;
154 double T308 = -1. / 4. * c5 * c5 + 1. / 2. * s5 * s5;
155 double T309 = -1. / 4. * c5 * s5 - 1. / 2. * c5 * s5;
157 double T404 = -3. / 2. / l5 * s5;
158 double T405 = -1. / 4. * c5 * s5 - 1. / 2. * c5 * s5;
159 double T406 = -1. / 4. * s5 * s5 + 1. / 2. * c5 * c5;
160 double T407 = 3. / 2. / l5 * s5;
161 double T408 = -1. / 4. * c5 * s5 - 1. / 2. * c5 * s5;
162 double T409 = -1. / 4. * s5 * s5 + 1. / 2. * c5 * c5;
164 double T507 = -3. / 2. / l6 * c6;
165 double T508 = -1. / 4. * c6 * c6 + 1. / 2. * s6 * s6;
166 double T509 = -1. / 4. * c6 * s6 - 1. / 2. * c6 * s6;
167 double T510 = 3. / 2. / l6 * c6;
168 double T511 = -1. / 4. * c6 * c6 + 1. / 2. * s6 * s6;
169 double T512 = -1. / 4. * c6 * s6 - 1. / 2. * c6 * s6;
171 double T607 = -3. / 2. / l6 * s6;
172 double T608 = -1. / 4. * c6 * s6 - 1. / 2. * c6 * s6;
173 double T609 = -1. / 4. * s6 * s6 + 1. / 2. * c6 * c6;
174 double T610 = 3. / 2. / l6 * s6;
175 double T611 = -1. / 4. * c6 * s6 - 1. / 2. * c6 * s6;
176 double T612 = -1. / 4. * s6 * s6 + 1. / 2. * c6 * c6;
178 double T701 = 3. / 2. / l7 * c7;
179 double T702 = -1. / 4. * c7 * c7 + 1. / 2. * s7 * s7;
180 double T703 = -1. / 4. * c7 * s7 - 1. / 2. * c7 * s7;
181 double T710 = -3. / 2. / l7 * c7;
182 double T711 = -1. / 4. * c7 * c7 + 1. / 2. * s7 * s7;
183 double T712 = -1. / 4. * c7 * s7 - 1. / 2. * c7 * s7;
185 double T801 = 3. / 2. / l7 * s7;
186 double T802 = -1. / 4. * c7 * s7 - 1. / 2. * c7 * s7;
187 double T803 = -1. / 4. * s7 * s7 + 1. / 2. * c7 * c7;
188 double T810 = -3. / 2. / l7 * s7;
189 double T811 = -1. / 4. * c7 * s7 - 1. / 2. * c7 * s7;
190 double T812 = -1. / 4. * s7 * s7 + 1. / 2. * c7 * c7;
194 double N1dk = 0.25 * ( 2.0 * ksi + eta ) * ( 1.0 + eta );
195 double N2dk = 0.25 * ( 2.0 * ksi - eta ) * ( 1.0 + eta );
196 double N3dk = 0.25 * ( 2.0 * ksi + eta ) * ( 1.0 - eta );
197 double N4dk = 0.25 * ( 2.0 * ksi - eta ) * ( 1.0 - eta );
198 double N7dk = -ksi * ( 1.0 - eta );
199 double N8dk = 0.5 * ( 1.0 - eta * eta );
200 double N5dk = -ksi * ( 1.0 + eta );
201 double N6dk = -0.5 * ( 1.0 - eta * eta );
203 double N3de = 0.25 * ( 2.0 * eta + ksi ) * ( 1.0 - ksi );
204 double N4de = 0.25 * ( 2.0 * eta - ksi ) * ( 1.0 + ksi );
205 double N1de = 0.25 * ( 2.0 * eta + ksi ) * ( 1.0 + ksi );
206 double N2de = 0.25 * ( 2.0 * eta - ksi ) * ( 1.0 - ksi );
207 double N7de = -0.5 * ( 1.0 - ksi * ksi );
208 double N8de = -eta * ( 1.0 + ksi );
209 double N5de = 0.5 * ( 1.0 - ksi * ksi );
210 double N6de = -eta * ( 1.0 - ksi );
212 double detJ = 1. / 8. * ( ( y4 - y2 ) * ( x3 - x1 ) - ( y3 - y1 ) * ( x4 - x2 ) ) +
213 ksi / 8 * ( ( y3 - y4 ) * ( x2 - x1 ) - ( y2 - y1 ) * ( x3 - x4 ) ) +
214 eta / 8 * ( ( y4 - y1 ) * ( x3 - x2 ) - ( y3 - y2 ) * ( x4 - x1 ) );
216 double dxdk = -1.0 / detJ * ( ( y3 - y2 ) + ( y4 - y1 + ksi * ( y1 - y2 + y3 - y4 ) ) ) / 4.0;
217 double dxde = 1.0 / detJ * ( ( y2 - y1 ) + ( y3 - y4 + eta * ( y1 - y2 + y3 - y4 ) ) ) / 4.0;
218 double dydk = 1.0 / detJ * ( ( x3 - x2 ) + ( x4 - x1 + ksi * ( x1 - x2 + x3 - x4 ) ) ) / 4.0;
219 double dyde = -1.0 / detJ * ( ( x2 - x1 ) + ( x3 - x4 + eta * ( x1 - x2 + x3 - x4 ) ) ) / 4.0;
221 double dN102 = N1dk * dxdk + N1de * dxde;
222 double dN104 = N2dk * dxdk + N2de * dxde;
223 double dN106 = N3dk * dxdk + N3de * dxde;
224 double dN108 = N4dk * dxdk + N4de * dxde;
225 double dN110 = N5dk * dxdk + N5de * dxde;
226 double dN112 = N6dk * dxdk + N6de * dxde;
227 double dN114 = N7dk * dxdk + N7de * dxde;
228 double dN116 = N8dk * dxdk + N8de * dxde;
230 double dN201 = -N1dk * dydk - N1de * dyde;
231 double dN203 = -N2dk * dydk - N2de * dyde;
232 double dN205 = -N3dk * dydk - N3de * dyde;
233 double dN207 = -N4dk * dydk - N4de * dyde;
234 double dN209 = -N5dk * dydk - N5de * dyde;
235 double dN211 = -N6dk * dydk - N6de * dyde;
236 double dN213 = -N7dk * dydk - N7de * dyde;
237 double dN215 = -N8dk * dydk - N8de * dyde;
242 answer.
at(1, 1) = T201 * dN110 + T801 * dN116;
243 answer.
at(1, 2) = T202 * dN110 + T802 * dN116;
244 answer.
at(1, 3) = dN102 + T203 * dN110 + T803 * dN116;
245 answer.
at(1, 4) = T204 * dN110 + T404 * dN112;
246 answer.
at(1, 5) = T205 * dN110 + T405 * dN112;
247 answer.
at(1, 6) = dN104 + T206 * dN110 + T406 * dN112;
248 answer.
at(1, 7) = T407 * dN112 + T607 * dN114;
249 answer.
at(1, 8) = T408 * dN112 + T608 * dN114;
250 answer.
at(1, 9) = dN106 + T409 * dN112 + T609 * dN114;
251 answer.
at(1, 10) = T610 * dN114 + T810 * dN116;
252 answer.
at(1, 11) = T611 * dN114 + T811 * dN116;
253 answer.
at(1, 12) = dN108 + T612 * dN114 + T812 * dN116;
255 answer.
at(2, 1) = T101 * dN209 + T701 * dN215;
256 answer.
at(2, 2) = dN201 + T102 * dN209 + T702 * dN215;
257 answer.
at(2, 3) = T103 * dN209 + T703 * dN215;
258 answer.
at(2, 4) = T104 * dN209 + T304 * dN211;
259 answer.
at(2, 5) = dN203 + T105 * dN209 + T305 * dN211;
260 answer.
at(2, 6) = T106 * dN209 + T306 * dN211;
261 answer.
at(2, 7) = T307 * dN211 + T507 * dN213;
262 answer.
at(2, 8) = dN205 + T308 * dN211 + T508 * dN213;
263 answer.
at(2, 9) = T309 * dN211 + T509 * dN213;
264 answer.
at(2, 10) = T510 * dN213 + T710 * dN215;
265 answer.
at(2, 11) = dN207 + T511 * dN213 + T711 * dN215;
266 answer.
at(2, 12) = T512 * dN213 + T712 * dN215;
268 answer.
at(3, 1) = -T101 * dN110 - T201 * dN209 - T701 * dN116 - T801 * dN215;
269 answer.
at(3, 2) = -dN102 - T102 * dN110 - T202 * dN209 - T702 * dN116 - T802 * dN215;
270 answer.
at(3, 3) = -dN201 - T103 * dN110 - T203 * dN209 - T703 * dN116 - T803 * dN215;
271 answer.
at(3, 4) = -T104 * dN110 - T204 * dN209 - T304 * dN112 - T404 * dN211;
272 answer.
at(3, 5) = -dN104 - T105 * dN110 - T205 * dN209 - T305 * dN112 - T405 * dN211;
273 answer.
at(3, 6) = -dN203 - T106 * dN110 - T206 * dN209 - T306 * dN112 - T406 * dN211;
274 answer.
at(3, 7) = -T307 * dN112 - T407 * dN211 - T507 * dN114 - T607 * dN213;
275 answer.
at(3, 8) = -dN106 - T308 * dN112 - T408 * dN211 - T508 * dN114 - T608 * dN213;
276 answer.
at(3, 9) = -dN205 - T309 * dN112 - T409 * dN211 - T509 * dN114 - T609 * dN213;
277 answer.
at(3, 10) = -T510 * dN114 - T610 * dN213 - T710 * dN116 - T810 * dN215;
278 answer.
at(3, 11) = -dN108 - T511 * dN114 - T611 * dN213 - T711 * dN116 - T811 * dN215;
279 answer.
at(3, 12) = -dN207 - T512 * dN114 - T612 * dN213 - T712 * dN116 - T812 * dN215;
771 int i, indx, result = 0;
775 double s[ 4 ], defScale;
777 if ( !
gc.testElementGraphicActivity(
this) ) {
783 for ( i = 1; i <= 4; i++ ) {
791 indx =
gc.giveIntVarIndx();
793 for ( i = 1; i <= 4; i++ ) {
794 s [ i - 1 ] = v [ i - 1 ].
at(indx);
798 for ( i = 0; i < 4; i++ ) {
799 if (
gc.getInternalVarsDefGeoFlag() ) {
801 defScale =
gc.getDefScale();
813 gc.updateFringeTableMinMax(s, 4);
814 tr = CreateQuadWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ], s [ 3 ]);
815 EGWithMaskChangeAttributes(LAYER_MASK, tr);
816 EMAddGraphicsToModel(ESIModel(), tr);
818 double landScale =
gc.getLandScale();
820 for ( i = 0; i < 4; i++ ) {
821 if (
gc.getInternalVarsDefGeoFlag() ) {
823 defScale =
gc.getDefScale();
826 p [ i ].z = s [ i ] * landScale;
830 p [ i ].z = s [ i ] * landScale;
834 if ( fabs(s [ i ]) < 1.0e-6 ) {
840 EASValsSetColor(
gc.getDeformedElementColor() );
842 tr = CreateQuad3D(p);
843 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, tr);
845 gc.updateFringeTableMinMax(s, 4);
846 tr = CreateQuadWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ], s [ 3 ]);
847 EGWithMaskChangeAttributes(LAYER_MASK, tr);
850 EMAddGraphicsToModel(ESIModel(), tr);
860 for ( i = 0; i < 4; i++ ) {
861 if (
gc.getInternalVarsDefGeoFlag() ) {
863 defScale =
gc.getDefScale();
874 for ( i = 0; i < 3; i++ ) {
875 pp [ i + 4 ].x = 0.5 * ( pp [ i ].x + pp [ i + 1 ].x );
876 pp [ i + 4 ].y = 0.5 * ( pp [ i ].y + pp [ i + 1 ].y );
877 pp [ i + 4 ].z = 0.5 * ( pp [ i ].z + pp [ i + 1 ].z );
880 pp [ 7 ].x = 0.5 * ( pp [ 3 ].x + pp [ 0 ].x );
881 pp [ 7 ].y = 0.5 * ( pp [ 3 ].y + pp [ 0 ].y );
882 pp [ 7 ].z = 0.5 * ( pp [ 3 ].z + pp [ 0 ].z );
884 pp [ 8 ].x = 0.25 * ( pp [ 0 ].x + pp [ 1 ].x + pp [ 2 ].x + pp [ 3 ].x );
885 pp [ 8 ].y = 0.25 * ( pp [ 0 ].y + pp [ 1 ].y + pp [ 2 ].y + pp [ 3 ].y );
886 pp [ 8 ].z = 0.25 * ( pp [ 0 ].z + pp [ 1 ].z + pp [ 2 ].z + pp [ 3 ].z );
889 const FloatArray &gpCoords = gp->giveNaturalCoordinates();
890 if ( ( gpCoords.
at(1) > 0. ) && ( gpCoords.
at(2) > 0. ) ) {
895 }
else if ( ( gpCoords.
at(1) < 0. ) && ( gpCoords.
at(2) > 0. ) ) {
900 }
else if ( ( gpCoords.
at(1) < 0. ) && ( gpCoords.
at(2) < 0. ) ) {
912 if (
giveIPValue(v [ 0 ], gp,
gc.giveIntVarType(), tStep) == 0 ) {
916 indx =
gc.giveIntVarIndx();
918 for ( i = 1; i <= 4; i++ ) {
919 s [ i - 1 ] = v [ 0 ].
at(indx);
922 for ( i = 0; i < 4; i++ ) {
923 p [ i ].x = pp [ ind.
at(i + 1) ].x;
924 p [ i ].y = pp [ ind.
at(i + 1) ].y;
925 p [ i ].z = pp [ ind.
at(i + 1) ].z;
928 gc.updateFringeTableMinMax(s, 4);
929 tr = CreateQuadWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ], s [ 3 ]);
930 EGWithMaskChangeAttributes(LAYER_MASK, tr);
931 EMAddGraphicsToModel(ESIModel(), tr);