42
43
44
45 USE elbufdef_mod
46 use element_mod , only : nixtg
47
48
49
50#include "implicit_f.inc"
51
52
53
54#include "mvsiz_p.inc"
55
56
57
58#include "com08_c.inc"
59#include "scr17_c.inc"
60
61
62
63 INTEGER , JLT,ISMSTR,IREP,NLAY,NEL
64 INTEGER IXTG(NIXTG,*),MAT(*),PID(*),NGL(*)
66 . x(3,*),v(3,*),r(3,*), offg(*), off(*),
67 . r11(*),r12(*),r13(*),r21(*),r22(*),r23(*),
68 . r31(*),r32(*),r33(*),
area(*),area2(*),cdet(*),
69 . vlx(mvsiz,2),vly(mvsiz,2),vlz(mvsiz,2),rlx(mvsiz,3),rly(mvsiz,3),
70 . xl2(*),xl3(*),yl2(*),yl3(*),
71 . f11(*), f12(*), f13(*),
72 . f21(*), f22(*), f23(*), f32(*), f33(*),
73 . m11(*), m12(*), m13(*),
74 . m21(*), m22(*), m23(*),
75 . dir_a(nel,*),dir_b(nel,*)
76 double precision
77 . smstr(*)
78 TYPE(ELBUF_STRUCT_) :: ELBUF_STR
79
80
81
82 INTEGER NC1, NC2, NC3,I,I1,II(4),IBID,MAT_1
84 . vx2(mvsiz), vx3(mvsiz),vy2(mvsiz), vy3(mvsiz),
85 . vz2(mvsiz), vz3(mvsiz),
86 . rx1(mvsiz), rx2(mvsiz), rx3(mvsiz), ry1(mvsiz),
87 . ry2(mvsiz), ry3(mvsiz), rz1(mvsiz), rz2(mvsiz),rz3(mvsiz),
88 . x1(mvsiz), x2(mvsiz), x3(mvsiz), y1(mvsiz),
89 . y2(mvsiz), y3(mvsiz), z1(mvsiz), z2(mvsiz),
90 . z3(mvsiz), rx(mvsiz), ry(mvsiz), rz(mvsiz),
91 . sx(mvsiz), sy(mvsiz), sz(mvsiz),
92 . vx1, vy1,vz1,off_l,dt05,exz,eyz,ddrx,ddry,v21x,v31x,
93 . ddrz1,ddrz2
94
95 DO i=1,4
96 ii(i) = nel*(i-1)
97 ENDDO
98
99 ibid = 0
100
101 mat_1 = ixtg(1,jft)
102 DO i=jft,jlt
103 mat(i) = mat_1
104 nc1 = ixtg(2,i)
105 nc2 = ixtg(3,i)
106 nc3 = ixtg(4,i)
107 pid(i) = ixtg(5,i)
108 ngl(i) = ixtg(6,i)
109
110
111
112 x1(i)=x(1,nc1)
113 y1(i)=x(2,nc1)
114 z1(i)=x(3,nc1)
115 x2(i)=x(1,nc2)
116 y2(i)=x(2,nc2)
117 z2(i)=x(3,nc2)
118 x3(i)=x(1,nc3)
119 y3(i)=x(2,nc3)
120 z3(i)=x(3,nc3)
121
122
123
124 vx1=v(1,nc1)
125 vy1=v(2,nc1)
126 vz1=v(3,nc1)
127 vx2(i)=v(1,nc2)-vx1
128 vy2(i)=v(2,nc2)-vy1
129 vz2(i)=v(3,nc2)-vz1
130 vx3(i)=v(1,nc3)-vx1
131 vy3(i)=v(2,nc3)-vy1
132 vz3(i)=v(3,nc3)-vz1
133 rx1(i)=r(1,nc1)
134 ry1(i)=r(2,nc1)
135 rz1(i)=r(3,nc1)
136 rx2(i)=r(1,nc2)
137 ry2(i)=r(2,nc2)
138 rz2(i)=r(3,nc2)
139 rx3(i)=r(1,nc3)
140 ry3(i)=r(2,nc3)
141 rz3(i)=r(3,nc3)
142 ENDDO
143
144 DO i=jft,jlt
145 f12(i) =zero
146 f13(i) =zero
147 f22(i) =zero
148 f23(i) =zero
149 f32(i) =zero
150 f33(i) =zero
151 m11(i) =zero
152 m12(i) =zero
153 m13(i) =zero
154 m21(i) =zero
155 m22(i) =zero
156 m23(i) =zero
157 ENDDO
158 DO i=jft,jlt
159 rx(i)=x2(i)-x1(i)
160 ry(i)=y2(i)-y1(i)
161 rz(i)=z2(i)-z1(i)
162 sx(i)=x3(i)-x1(i)
163 sy(i)=y3(i)-y1(i)
164 sz(i)=z3(i)-z1(i)
165 ENDDO
166
167
168
169 i1 = 0
171 . rx, ry, rz,
172 . sx, sy, sz,
173 . r11,r12,r13,r21,r22,r23,r31,r32,r33,area2,offg)
174
175 DO i=jft,jlt
176 xl2(i)=r11(i)*rx(i)+r21(i)*ry(i)+r31(i)*rz(i)
177 yl2(i)=r12(i)*rx(i)+r22(i)*ry(i)+r32(i)*rz(i)
178 xl3(i)=r11(i)*sx(i)+r21(i)*sy(i)+r31(i)*sz(i)
179 yl3(i)=r12(i)*sx(i)+r22(i)*sy(i)+r32(i)*sz(i)
180 area(i)=half*area2(i)
181 cdet(i)=third*
area(i)
182 ENDDO
183 DO i=jft,jlt
184 vlx(i,1)=r11(i)*vx2(i)+r21(i)*vy2(i)+r31(i)*vz2(i)
185 vlx(i,2)=r11(i)*vx3(i)+r21(i)*vy3(i)+r31(i)*vz3(i)
186 vly(i,1)=r12(i)*vx2(i)+r22(i)*vy2(i)+r32(i)*vz2(i)
187 vly(i,2)=r12(i)*vx3(i)+r22(i)*vy3(i)+r32(i)*vz3(i)
188 vlz(i,1)=r13(i)*vx2(i)+r23(i)*vy2(i)+r33(i)*vz2(i)
189 vlz(i,2)=r13(i)*vx3(i)+r23(i)*vy3(i)+r33(i)*vz3(i)
190 rlx(i,1)=r11(i)*rx1(i)+r21(i)*ry1(i)+r31(i)*rz1(i)
191 rlx(i,2)=r11(i)*rx2(i)+r21(i)*ry2(i)+r31(i)*rz2(i)
192 rlx(i,3)=r11(i)*rx3(i)+r21(i)*ry3(i)+r31(i)*rz3(i)
193 rly(i,1)=r12(i)*rx1(i)+r22(i)*ry1(i)+r32(i)*rz1(i)
194 rly(i,2)=r12(i)*rx2(i)+r22(i)*ry2(i)+r32(i)*rz2(i)
195 rly(i,3)=r12(i)*rx3(i)+r22(i)*ry3(i)+r32(i)*rz3(i)
196 ENDDO
197
198
199
200 IF (ismstr == 1 .OR. ismstr == 2) THEN
201 DO i=jft,jlt
202 IF (abs(offg(i)) == two) THEN
203 xl2(i)=smstr(ii(1)+i)
204 yl2(i)=smstr(ii(2)+i)
205 xl3(i)=smstr(ii(3)+i)
206 yl3(i)=smstr(ii(4)+i)
207 area2(i)=xl2(i)*yl3(i)-xl3(i)*yl2(i)
208 area(i)=half*area2(i)
209 ELSE
210 smstr(ii(1)+i)=xl2(i)
211 smstr(ii(2)+i)=yl2(i)
212 smstr(ii(3)+i)=xl3(i)
213 smstr(ii(4)+i)=yl3(i)
214 ENDIF
215 ENDDO
216 ENDIF
217 IF (ismstr ==1) THEN
218 DO i=jft,jlt
219 IF (offg(i) == one) offg(i)=two
220 ENDDO
221 ENDIF
222
223
224
225 CALL cortdir3(elbuf_str,dir_a ,dir_b ,jft ,jlt ,
226 . nlay ,irep ,rx ,ry ,rz ,
227 . sx ,sy ,sz ,r11 ,r21 ,
228 . r31 ,r12 ,r22 ,r32 ,nel )
229
230
231
232 dt05 = half*dt1
233 DO i=jft,jlt
234 exz = yl3(i)*vlz(i,1)-yl2(i)*vlz(i,2)
235 eyz = -xl3(i)*vlz(i,1)+xl2(i)*vlz(i,2)
236 ddry=dt05*exz/area2(i)
237 ddrx=dt05*eyz/area2(i)
238 v21x = vlx(i,1)
239 v31x = vlx(i,2)
240 ddrz1=dt05*vly(i,1)/xl2(i)
241 ddrz2=dt05*v31x/yl3(i)
242 vlx(i,1) = vlx(i,1)-ddry*vlz(i,1)-ddrz1*vly(i,1)
243 vlx(i,2) = vlx(i,2)-ddry*vlz(i,2)-ddrz1*vly(i,2)
244 vly(i,1) = vly(i,1)-ddrx*vlz(i,1)-ddrz2*v21x
245 vly(i,2) = vly(i,2)-ddrx*vlz(i,2)-ddrz2*v31x
246 ENDDO
247
248
249
250 off_l = zero
251 DO i=jft,jlt
252 off(i) =
min(one,abs(offg(i)))
253 off_l =
min(off_l,offg(i))
254 ENDDO
255 IF(off_l < zero)THEN
256 DO i=jft,jlt
257 IF(offg(i) < zero)THEN
258 vlx(i,1)=zero
259 vlx(i,2)=zero
260 vly(i,1)=zero
261 vly(i,2)=zero
262 vlz(i,1)=zero
263 vlz(i,2)=zero
264 rlx(i,1)=zero
265 rlx(i,2)=zero
266 rlx(i,3)=zero
267 rly(i,1)=zero
268 rly(i,2)=zero
269 rly(i,3)=zero
270 ENDIF
271 ENDDO
272 ENDIF
273
274 RETURN
subroutine clskew3(jft, jlt, irep, rx, ry, rz, sx, sy, sz, e1x, e2x, e3x, e1y, e2y, e3y, e1z, e2z, e3z, det, off)
subroutine cortdir3(elbuf_str, dir_a, dir_b, jft, jlt, nlay, irep, rx, ry, rz, sx, sy, sz, e1x, e1y, e1z, e2x, e2y, e2z, nel)
subroutine area(d1, x, x2, y, y2, eint, stif0)