42
43
44
45 USE sensor_mod
46 use element_mod , only : nixr
47
48
49
50
51
52
53
54
55
56
57
58#include "implicit_f.inc"
59
60
61
62#include "mvsiz_p.inc"
63#include "param_c.inc"
64#include "com08_c.inc"
65#include "com04_c.inc"
66#include "com01_c.inc"
67#include "scr05_c.inc"
68
69
70
71 INTEGER ,INTENT(IN) :: NSENSOR
72 INTEGER JFT, JLT, IOUT, NUVAR, IPROP, IXR(NIXR,*),IGTYP,
73 . ISENS,NC1(*),NC2(*)
74
76 . rot1(3,mvsiz),rot2(3,mvsiz),rby(*),
77 . dx(*), dy(*), dz(*), rx(*), ry(*), rz(*),vr(3,*)
78 DOUBLE PRECISION XDP(3,*),XL(MVSIZ,3)
79 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) :: SENSOR_TAB
80
81
82
83 INTEGER I, J, K, JTYP, IERR, SKFLG,
84 . IDSK1,IDSK2,ISK1,ISK2,
85 . N1,N2,N3,USENS,INSENS,
86 . ISENS_OLD,ISENS_ACT
88 . u(lskew),v(lskew),ex(lskew),
89 . r1(3),r2(3),rm(3),
90 . a0(lskew),
91 . a(lskew),exi(lskew),
92 . get_u_geo,nr,dt(3),dex(lskew),exprec(lskew)
93 DOUBLE PRECISION X21(MVSIZ),Y21(MVSIZ),Z21(MVSIZ)
94
95
96
97 INTEGER GET_U_SKEW
99
100 DO i=jft,jlt
101 nc1(i)= ixr(2,i)
102 nc2(i)= ixr(3,i)
103 ENDDO
104
105 ierr = 0
106 isens = 0
107 isens_act = 0
108 jtyp = nint(get_u_geo(1,iprop))
109 IF (igtyp==33) THEN
110
111 idsk1 = nint(get_u_geo(2,iprop))
112 idsk2 = nint(get_u_geo(3,iprop))
113 skflg = nint(get_u_geo(14,iprop))
116 ELSE
117 skflg = 0
118
119 usens = nint(get_u_geo(2,iprop))
120 isens_act = 0
121 IF (usens>0) THEN
122 isens_old = nint(uvar(16,jft))
123 DO k=1,nsensor
124 IF(usens==sensor_tab(k)%SENS_ID) insens=k
125 ENDDO
126
127 IF (tt>sensor_tab(insens)%TSTART) THEN
128 isens = 1
129 uvar(16,jft) = isens
130 ENDIF
131 IF (isens/=isens_old) isens_act = 1
132 ENDIF
133 ENDIF
134
135
136
137 DO i=jft,jlt
138
139
140
141 IF ((ncycle==0).AND.(tt==0)) THEN
142 IF (igtyp==33) THEN
143 DO j=1,9
144 a0(j)= uvar(3+j,i)
145 END DO
146 ELSE
147 rx(i)= uvar(7,i)
148 ry(i)= uvar(8,i)
149 rz(i)= uvar(9,i)
150 ENDIF
151 ENDIF
152
153
154
155 IF ((igtyp==45).AND.(isens_act==1)) THEN
156 uvar(4,i) = dx(i)
157 uvar(5,i) = dy(i)
158 uvar(6,i) = dz(i)
159 uvar(7,i) = rx(i)
160 uvar(8,i) = ry(i)
161 uvar(9,i) = rz(i)
162 ENDIF
163
164
165
166 IF (jtyp==5) THEN
167
168
169
170 IF (igtyp==45) THEN
171
172 dt(1)= vr(1,nc1(i))*dt1
173 dt(2)= vr(2,nc1(i))*dt1
174 dt(3)= vr(3,nc1(i))*dt1
175 u(1)=uvar(10,i) - uvar(11,i)*dt(3)+uvar(12,i)*dt(2)
176 u(2)=uvar(11,i) - uvar(12,i)*dt(1)+uvar(10,i)*dt(3)
177 u(3)=uvar(12,i) - uvar(10,i)*dt(2)+uvar(11,i)*dt(1)
178 nr =sqrt(u(1)*u(1)+u(2)*u(2)+u(3)*u(3))
179 IF (nr>0) THEN
180 u(1)=u(1)/nr
181 u(2)=u(2)/nr
182 u(3)=u(3)/nr
183 ENDIF
184
185 uvar(10,i) = u(1)
186 uvar(11,i) = u(2)
187 uvar(12,i) = u(3)
188
189
190 dt(1)= vr(1,nc2(i))*dt1
191 dt(2)= vr(2,nc2(i))*dt1
192 dt(3)= vr(3,nc2(i))*dt1
193 v(1)=uvar(13,i) - uvar(14,i)*dt(3)+uvar(15,i)*dt(2)
194 v(2)=uvar(14,i) - uvar(15,i)*dt(1)+uvar(13,i)*dt(3)
195 v(3)=uvar(15,i) - uvar(13,i)*dt(2)+uvar(14,i)*dt(1)
196 nr =sqrt(v(1)*v(1)+v(2)*v(2)+v(3)*v(3))
197 IF (nr>0) THEN
198 v(1)=v(1)/nr
199 v(2)=v(2)/nr
200 v(3)=v(3)/nr
201 ENDIF
202
203 uvar(13,i) = v(1)
204 uvar(14,i) = v(2)
205 uvar(15,i) = v(3)
206 ENDIF
207
208 ex(1) = u(2)*v(3) - u(3)*v(2)
209 ex(2) = u(3)*v(1) - u(1)*v(3)
210 ex(3) = u(1)*v(2) - u(2)*v(1)
211 nx = sqrt(ex(1)*ex(1)+ex(2)*ex(2)+ex(3)*ex(3))
212 ex(1) = ex(1) / nx
213 ex(2) = ex(2) / nx
214 ex(3) = ex(3) / nx
215 ex(4) = u(1)
216 ex(5) = u(2)
217 ex(6) = u(3)
218 ex(7) = v(1)
219 ex(8) = v(2)
220 ex(9) = v(3)
221
223
224
225 x21(i) = (vr(1,nc2(i))-vr(1,nc1(i)))*dt1
226 y21(i) = (vr(2,nc2(i))-vr(2,nc1(i)))*dt1
227 z21(i) = (vr(3,nc2(i))-vr(3,nc1(i)))*dt1
228
229 rm(1) = rx(i)+exi(1)*x21(i)+exi(4)*y21(i)+exi(7)*z21
230 rm(2) = ry(i)+exi(2)*x21(i)+exi(5)*y21(i)+exi(8)*z21(i)
231 rm(3) = rz(i)+exi(3)*x21(i)+exi(6)*y21(i)+exi(9)*z21(i)
232
233 r2(1) = 0.5*rm(1)
234 r2(2) = 0.5*rm(2)
235 r2(3) = 0.5*rm(3)
236 r1(1) = -0.5*rm(1)
237 r1(2) = -0.5*rm(2)
238 r1(3) = -0.5*rm(3)
239
240 x21(i) = x(1,nc2(i))-x(1,nc1(i))
241 y21(i) = x(2,nc2(i))-x(2,nc1(i))
242 z21(i) = x(3,nc2(i))-x(3,nc1(i))
243 xl(i,1)=exi(1)*x21(i)+exi(4)*y21(i)+exi(7)*z21(i)
244 xl(i,2)=exi(2)*x21(i)+exi(5)*y21(i)+exi(8)*z21(i)
245 xl(i,3)=exi(3)*x21(i)+exi(6)*y21(i)+exi(9)*z21(i)
246
247
248 ELSE
249
250 IF (skflg==1) THEN
251
252
253
254
255 DO j=1,9
256 ex(j) = u(j)
257 ENDDO
258
259 ELSE
260
261
262
263
264
265 IF ((ncycle==0).AND.(tt==0).AND.(igtyp==33)) THEN
267 DO j=1,9
268 exprec(j) = a(j)
269 END DO
270 ELSE
271 DO j=1,9
272 exprec(j) = uvar(21+j,i)
273 END DO
274 ENDIF
275
276
277 x21(i) = half*(vr(1,nc2(i))+vr(1,nc1(i)))*dt1
278 y21(i) = half*(vr(2,nc2(i))+vr(2,nc1(i)))*dt1
279 z21(i) = half*(vr(3,nc2(i))+vr(3,nc1(i)))*dt1
280 dt(1)=exprec(1)*x21(i)+exprec(2)*y21(i)+exprec(3)*z21(i)
281 dt(2)=exprec(4)*x21(i)+exprec(5)*y21(i)+exprec(6)*z21(i)
282 dt(3)=exprec(7)*x21(i)+exprec(8)*y21(i)+exprec(9)*z21(i)
283
284 nr =sqrt(dt(1)*dt(1)+dt(2)*dt(2)+dt(3)*dt(3))
285 IF (nr>0) THEN
286 dt(1)=dt(1)/nr
287 dt(2)=dt(2)/nr
288 dt(3)=dt(3)/nr
289 ENDIF
290 co = cos(nr)
291 si = sin(nr)
292 CALL qrot33(dex, dt, co, si)
293
294
296
297
298 ENDIF
299
300
301 x21(i) = (vr(1,nc2(i))-vr(1,nc1(i)))*dt1
302 y21(i) = (vr(2,nc2(i))-vr(2,nc1(i)))*dt1
303 z21(i) = (vr(3,nc2(i))-vr(3,nc1(i)))*dt1
304
305 rm(1) = rx(i)+ex(1)*x21(i)+ex(2)*y21(i)+ex(3)*z21(i)
306 rm(2) = ry(i)+ex(4)*x21(i)+ex(5)*y21(i)+ex(6)*z21(i)
307 rm(3) = rz(i)+ex(7)*x21(i)+ex(8)*y21(i)+ex(9)*z21(i)
308
309 r2(1) = 0.5*rm(1)
310 r2(2) = 0.5*rm(2)
311 r2(3) = 0.5*rm(3)
312 r1(1) = -0.5*rm(1)
313 r1(2) = -0.5*rm(2)
314 r1(3) = -0.5*rm(3)
315
316 IF (iresp == 1) THEN
317
318 x21(i) = xdp(1,nc2(i))-xdp(1,nc1(i))
319 y21(i) = xdp(2,nc2(i))-xdp(2,nc1(i))
320 z21(i) = xdp(3,nc2(i))-xdp(3,nc1(i))
321 ELSE
322
323 x21(i) = x(1,nc2(i))-x(1,nc1(i))
324 y21(i) = x(2,nc2(i))-x(2,nc1(i))
325 z21(i) = x(3,nc2(i))-x(3,nc1(i))
326 ENDIF
327
328 xl(i,1)=ex(1)*x21(i)+ex(2)*y21(i)+ex(3)*z21(i)
329 xl(i,2)=ex(4)*x21(i)+ex(5)*y21(i)+ex(6)*z21(i)
330 xl(i,3)=ex(7)*x21(i)+ex(8)*y21(i)+ex(9)*z21(i)
331
332
333 ENDIF
334
335
336 rot1(1,i) = r1(1)
337 rot1(2,i) = r1(2)
338 rot1(3,i) = r1(3)
339 rot2(1,i) = r2(1)
340 rot2(2,i) = r2(2)
341 rot2(3,i) = r2(3)
342
343 DO j=1,9
344 uvar(21+j,i) = ex(j)
345 END DO
346 END DO
347
348
349 RETURN
subroutine qrot33(skew, t, c, s)
subroutine prod_ab(a, b, x)
integer function get_u_skew(idskw, n1, n2, n3, v)