37
38
39
41 USE sensor_mod
42 USE python_funct_mod
43 USE finter_mixed_mod
44
45
46
47#include "implicit_f.inc"
48
49
50
51#include "param_c.inc"
52#include "com04_c.inc"
53#include "com06_c.inc"
54#include "com08_c.inc"
55#include "scr14_c.inc"
56#include "scr16_c.inc"
57
58
59
60 INTEGER ,INTENT(IN) :: NSENSOR
61 INTEGER IVOLU(*),NJET,IBAGJET(NIBJET,*),NPC(*),NN,SURF_NODES(NN,4),SURF_ELTYP(NN),SURF_ELEM(NN)
62 my_real rvolu(*),rbagjet(nrbjet,*), x(3,*), v(3,*), a(3,*), normal(3,nn),tf(*),fext(3,*)
63 TYPE(H3D_DATABASE) :: H3D_DATA
64 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) ,INTENT(IN) :: SENSOR_TAB
65 DOUBLE PRECISION, INTENT(INOUT) :: WFEXT
66 TYPE(PYTHON_), intent(inout) :: PYTHON
67
68
69
70 INTEGER I,II,NJ1,NJ2,NJ3,IPT,IPA,IPZ,
71 . N1,N2,N3,N4,IJ,ISENS,
72 . ITYP
73 my_real pres,fx,fy,fz,p,pext,dp,q,pj,pj0,dydx,xx,yy,zz,
74 . theta,nx1,nx2,ny1,ny2,nz1,nz2,an1,an,
75 . xm,ym,zm,nx3,ny3,nz3,
76 . ps1,ps2,ps3,an2,an3,det,mu,facr,
77 . api,dist,tstart,ts,tmpo,fpt,fpa,fpz,scalt,scala,scald
78
79 api=hundred80/pi
80
81 pres =rvolu(12)
82 q =rvolu(23)
83 pext =rvolu(3)
84 scalt =rvolu(26)
85 scala =rvolu(29)
86 scald =rvolu(30)
87 dp =q+pres-pext
88 DO i=1,nn
89
90 IF(surf_eltyp(i) == 3)THEN
91 p=dp*fourth
92 ii=surf_elem(i)
93
94 fx=p*normal(1,i)
95 fy=p*normal(2,i)
96 fz=p*normal(3,i)
97
98 n1 = surf_nodes(i,1)
99 n2 = surf_nodes(i,2)
100 n3 = surf_nodes(i,3)
101 n4 = surf_nodes(i,4)
102
103 a(1,n1)=a(1,n1)+fx
104 a(2,n1)=a(2,n1)+fy
105 a(3,n1)=a(3,n1)+fz
106
107 a(1,n2)=a(1,n2)+fx
108 a(2,n2)=a(2,n2)+fy
109 a(3,n2)=a(3,n2)+fz
110
111 a(1,n3)=a(1,n3)+fx
112 a(2,n3)=a(2,n3)+fy
113 a(3,n3)=a(3,n3)+fz
114
115 a(1,n4)=a(1,n4)+fx
116 a(2,n4)=a(2,n4)+fy
117 a(3,n4)=a(3,n4)+fz
118 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0) THEN
119 fext(1,n1) = fext(1,n1)+fx
120 fext(2,n1) = fext(2,n1)+fy
121 fext(3,n1) = fext(3,n1)+fz
122 fext(1,n2) = fext(1,n2)+fx
123 fext(2,n2) = fext(2,n2)+fy
124 fext(3,n2) = fext(3,n2)+fz
125 fext(1,n3) = fext(1,n3)+fx
126 fext(2,n3) = fext(2,n3)+fy
127 fext(3,n3) = fext(3,n3)+fz
128 fext(1,n4) = fext(1,n4)+fx
129 fext(2,n4) = fext(2,n4)+fy
130 fext(3,n4) = fext(3,n4)+fz
131 ENDIF
132 ELSEIF(surf_eltyp(i) == 7)THEN
133 p=dp/3.
134 ii=surf_elem(i) + numelc
135
136 fx=p*normal(1,i)
137 fy=p*normal(2,i)
138 fz=p*normal(3,i)
139
140 n1 = surf_nodes(i,1)
141 n2 = surf_nodes(i,2)
142 n3 = surf_nodes(i,3)
143
144 a(1,n1)=a(1,n1)+fx
145 a(2,n1)=a(2,n1)+fy
146 a(3,n1)=a(3,n1)+fz
147
148 a(1,n2)=a(1,n2)+fx
149 a(2,n2)=a(2,n2)+fy
150 a(3,n2)=a(3,n2)+fz
151
152 a(1,n3)=a(1,n3)+fx
153 a(2,n3)=a(2,n3)+fy
154 a(3,n3)=a(3,n3)+fz
155 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0) THEN
156 fext(1,n1) = fext(1,n1)+fx
157 fext(2,n1) = fext(2,n1)+fy
158 fext(3,n1) = fext(3,n1)+fz
159 fext(1,n2) = fext(1,n2)+fx
160 fext(2,n2) = fext(2,n2)+fy
161 fext(3,n2) = fext(3,n2)+fz
162 fext(1,n3) = fext(1,n3)+fx
163 fext(2,n3) = fext(2,n3)+fy
164 fext(3,n3) = fext(3,n3)+fz
165 ENDIF
166 ELSE
167 p=dp*fourth
168 ii=i+numelc+numeltg
169
170 fx=p*normal(1,i)
171 fy=p*normal(2,i)
172 fz=p*normal(3,i)
173
174 n1 = surf_nodes(i,1)
175 n2 = surf_nodes(i,2)
176 n3 = surf_nodes(i,3)
177 n4 = surf_nodes(i,4)
178
179 a(1,n1)=a(1,n1)+fx
180 a(2,n1)=a(2,n1)+fy
181 a(3,n1)=a(3,n1)+fz
182
183 a(1,n2)=a(1,n2)+fx
184 a(2,n2)=a(2,n2)+fy
185 a(3,n2)=a(3,n2)+fz
186
187 a(1,n3)=a(1,n3)+fx
188 a(2,n3)=a(2,n3)+fy
189 a(3,n3)=a(3,n3)+fz
190
191 a(1,n4)=a(1,n4)+fx
192 a(2,n4)=a(2,n4)+fy
193 a(3,n4)=a(3,n4)+fz
194 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0) THEN
195 fext(1,n1) = fext(1,n1)+fx
196 fext(2,n1) = fext(2,n1)+fy
197 fext(3,n1) = fext(3,n1)+fz
198 fext(1,n2) = fext(1,n2)+fx
199 fext(2,n2) = fext(2,n2)+fy
200 fext(3,n2) = fext(3,n2)+fz
201 fext(1,n3) = fext(1,n3)+fx
202 fext(2,n3) = fext(2,n3)+fy
203 fext(3,n3) = fext(3,n3)+fz
204 fext(1,n4) = fext(1,n4)+fx
205 fext(2,n4) = fext(2,n4)+fy
206 fext(3,n4) = fext(3,n4)+fz
207 ENDIF
208 ENDIF
209 ENDDO
210
211 ityp=ivolu(2)
212 IF(ityp /= 4 .AND. ityp /= 5 .AND. ityp /= 7 .AND. ityp /= 9)RETURN
213
214
215
216 DO ij =1,njet
217 nj1 = ibagjet( 5,ij)
218 nj2 = ibagjet( 6,ij)
219 nj3 = ibagjet( 7,ij)
220 ipt = ibagjet( 8,ij)
221 ipa = ibagjet( 9,ij)
222 ipz = ibagjet(10,ij)
223 fpt = rbagjet(12,ij)
224 fpa = rbagjet(13,ij)
225 fpz = rbagjet(14,ij)
226
227 isens=ibagjet(4,ij)
228 IF(isens==0)THEN
229 tstart=zero
230 ELSE
231 tstart=sensor_tab(isens)%TSTART
232 ENDIF
233
234 IF(nj1 /= 0 .AND. tt >= tstart)THEN
235 ts=tt-tstart
236 pj0=fpt*finter_mixed(python,nfunct,ipt,ts*scalt,npc,tf)
237 DO i=1,nn
238 IF(surf_eltyp(i)==3)THEN
239 pj=fourth*pj0
240
241 n1 = surf_nodes(i,1)
242 n2 = surf_nodes(i,2)
243 n3 = surf_nodes(i,3)
244 n4 = surf_nodes(i,4)
245
246 ii=surf_elem(i)
247
248 xx = fourth*(x(1,n1)+x(1,n2)+x(1,n3)+x(1,n4))
249 yy = fourth*(x(2,n1)+x(2,n2)+x(2,n3)+x(2,n4))
250 zz = fourth*(x(3,n1)+x(3,n2)+x(3,n3)+x(3,n4))
251
252 xm=half*(x(1,nj1)+x(1,nj3))
253 ym=half*(x(2,nj1)+x(2,nj3))
254 zm=half*(x(3,nj1)+x(3,nj3))
255
256
257 nx1 = xx-xm
258 ny1 = yy-ym
259 nz1 = zz-zm
260
261
262 nx2 = x(1,nj2)-xm
263 ny2 = x(2,nj2)-ym
264 nz2 = x(3,nj2)-zm
265
266 nx3 = x(1,nj3)-xm
267 ny3 = x(2,nj3)-ym
268 nz3 = x(3,nj3)-zm
269
270 ps1 = nx1*nx2+ny1*ny2+nz1*nz2
271 ps2 = nx2*nx3+ny2*ny3+nz2*nz3
272 ps3 = nx1*nx3+ny1*ny3+nz1*nz3
273 an2 = nx2*nx2+ny2*ny2+nz2*nz2
274 an3 = nx3*nx3+ny3*ny3+nz3*nz3
275 det = ps2*ps2-an2*an3
276
277 mu = (ps2*ps1-ps3*an2)/sign(
max(em30,abs(det)),det)
278
279 facr =
min(one,
max(-one,mu))
280 nx1=nx1-facr*nx3
281 ny1=ny1-facr*ny3
282 nz1=nz1-facr*nz3
283
284 an1 = (nx1**2+ny1**2+nz1**2)
285 an =
max(em30,sqrt((normal(1,i)**2+normal(2,i)**2+normal(3,i)**2)*an1))
286 pj=pj*
max(zero,(nx1*normal(1,i)+ny1*normal(2,i)+nz1*normal(3,i))/an)
287 an =
max(em30,sqrt((nx2**2+ny2**2+nz2**2)*an1))
288 tmpo = (nx1*nx2+ny1*ny2+nz1*nz2)/an
289 tmpo = sign(
min(one,abs(tmpo)),tmpo)
290 theta=api*acos(tmpo)
291 pj=pj*fpa*finter_mixed(python,nfunct,ipa,theta*scala,npc,tf)
292 dist = sqrt(an1)
293 IF(ipz/=0)pj=pj*fpz*finter_mixed(python,nfunct,ipz,dist*scald,npc,tf)
294
295 fx=pj*normal(1,i)
296 fy=pj*normal(2,i)
297 fz=pj*normal(3,i)
298
299 a(1,n1)=a(1,n1)+fx
300 a(2,n1)=a(2,n1)+fy
301 a(3,n1)=a(3,n1)+fz
302
303 a(1,n2)=a(1,n2)+fx
304 a(2,n2)=a(2,n2)+fy
305 a(3,n2)=a(3,n2)+fz
306
307 a(1,n3)=a(1,n3)+fx
308 a(2,n3)=a(2,n3)+fy
309 a(3,n3)=a(3,n3)+fz
310
311 a(1,n4)=a(1,n4)+fx
312 a(2,n4)=a(2,n4)+fy
313 a(3,n4)=a(3,n4)+fz
314
315 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0) THEN
316 fext(1,n1) = fext(1,n1)+fx
317 fext(2,n1) = fext(2,n1)+fy
318 fext(3,n1) = fext(3,n1)+fz
319 fext(1,n2) = fext(1,n2)+fx
320 fext(2,n2) = fext(2,n2)+fy
321 fext(3,n2) = fext(3,n2)+fz
322 fext(1,n3) = fext(1,n3)+fx
323 fext(2,n3) = fext(2,n3)+fy
324 fext(3,n3) = fext(3,n3)+fz
325 fext(1,n4) = fext(1,n4)+fx
326 fext(2,n4) = fext(2,n4)+fy
327 fext(3,n4) = fext(3,n4)+fz
328 ENDIF
329
330 wfext=wfext+dt1*(fx*(v(1,n1)+v(1,n2)+v(1,n3)+v(1,n4))
331 + +fy*(v(2,n1)+v(2,n2)+v(2,n3)+v(2,n4))
332 + +fz*(v(3,n1)+v(3,n2)+v(3,n3)+v(3,n4)))
333 ELSEIF(surf_eltyp(i)==7)THEN
334 pj=pj0*third
335
336 n1 = surf_nodes(i,1)
337 n2 = surf_nodes(i,2)
338 n3 = surf_nodes(i,3)
339
340 ii=surf_elem(i) + numelc
341
342 xx = (x(1,n1)+x(1,n2)+x(1,n3)) * third
343 yy = (x(2,n1)+x(2,n2)+x(2,n3)) * third
344 zz = (x(3,n1)+x(3,n2)+x(3,n3)) * third
345
346 xm=0.5*(x(1,nj1)+x(1,nj3))
347 ym=0.5*(x(2,nj1)+x(2,nj3))
348 zm=0.5*(x(3,nj1)+x(3,nj3))
349
350 nx1 = xx-xm
351 ny1 = yy-ym
352 nz1 = zz-zm
353
354
355 nx2 = x(1,nj2)-xm
356 ny2 = x(2,nj2)-ym
357 nz2 = x(3,nj2)-zm
358
359 nx3 = x(1,nj3)-xm
360 ny3 = x(2,nj3)-ym
361 nz3 = x(3,nj3)-zm
362
363 ps1 = nx1*nx2+ny1*ny2+nz1*nz2
364 ps2 = nx2*nx3+ny2*ny3+nz2*nz3
365 ps3 = nx1*nx3+ny1*ny3+nz1*nz3
366 an2 = nx2*nx2+ny2*ny2+nz2*nz2
367 an3 = nx3*nx3+ny3*ny3+nz3*nz3
368 det = ps2*ps2-an2*an3
369
370 mu = (ps2*ps1-ps3*an2)/sign(
max(em30,abs(det)),det)
371
372 facr =
min(one,
max(-one,mu))
373 nx1=nx1-facr*nx3
374 ny1=ny1-facr*ny3
375 nz1=nz1-facr*nz3
376
377 an1 = (nx1**2+ny1**2+nz1**2)
378 an =
max(em30,sqrt((normal(1,i)**2+normal(2,i)**2+normal(3,i)**2)*an1))
379 pj=pj*
max(zero,(nx1*normal(1,i)+ny1*normal(2,i)+nz1*normal(3,i))/an)
380 an =
max(em30,sqrt((nx2**2+ny2**2+nz2**2)*an1))
381 tmpo = (nx1*nx2+ny1*ny2+nz1*nz2)/an
382 tmpo = sign(
min(one,abs(tmpo)),tmpo)
383 theta=api*acos(tmpo)
384 pj=pj*fpa*finter_mixed(python,nfunct,ipa,theta*scala,npc,tf)
385 dist = sqrt(an1)
386 IF(ipz/=0)pj=pj*fpz*finter_mixed(python,nfunct,ipz,dist*scald,npc,tf)
387
388 fx=pj*normal(1,i)
389 fy=pj*normal(2,i)
390 fz=pj*normal(3,i)
391
392 a(1,n1)=a(1,n1)+fx
393 a(2,n1)=a(2,n1)+fy
394 a(3,n1)=a(3,n1)+fz
395
396 a(1,n2)=a(1,n2)+fx
397 a(2,n2)=a(2,n2)+fy
398 a(3,n2)=a(3,n2)+fz
399
400 a(1,n3)=a(1,n3)+fx
401 a(2,n3)=a(2,n3)+fy
402 a(3,n3)=a(3,n3)+fz
403
404 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+
405 . anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0) THEN
406 fext(1,n1) = fext(1,n1)+fx
407 fext(2,n1) = fext(2,n1)+fy
408 fext(3,n1) = fext(3,n1)+fz
409 fext(1,n2) = fext(1,n2)+fx
410 fext(2,n2) = fext(2,n2)+fy
411 fext(3,n2) = fext(3,n2)+fz
412 fext(1,n3) = fext(1,n3)+fx
413 fext(2,n3) = fext(2,n3)+fy
414 fext(3,n3) = fext(3,n3)+fz
415 ENDIF
416
417 wfext=wfext+dt1*(fx*(v(1,n1)+v(1,n2)+v(1,n3))
418 + +fy*(v(2,n1)+v(2,n2)+v(2,n3))
419 + +fz*(v(3,n1)+v(3,n2)+v(3,n3)))
420 ELSE
421 pj=fourth*pj0
422
423
424
425
426
427 n1 = surf_nodes(i,1)
428 n2 = surf_nodes(i,2)
429 n3 = surf_nodes(i,3)
430 n4 = surf_nodes(i,4)
431
432 ii=i+numelc+numeltg
433
434 xx = fourth*(x(1,n1)+x(1,n2)+x(1,n3)+x(1,n4))
435 yy = fourth*(x(2,n1)+x(2,n2)+x(2,n3)+x(2,n4))
436 zz = fourth*(x(3,n1)+x(3,n2)+x(3,n3)+x(3,n4))
437
438 xm=half*(x(1,nj1)+x(1,nj3))
439 ym=half*(x(2,nj1)+x(2,nj3))
440 zm=half*(x(3,nj1)+x(3,nj3))
441
442 nx1 = xx-xm
443 ny1 = yy-ym
444 nz1 = zz-zm
445
446
447 nx2 = x(1,nj2)-xm
448 ny2 = x(2,nj2)-ym
449 nz2 = x(3,nj2)-zm
450
451 nx3 = x(1,nj3)-xm
452 ny3 = x(2,nj3)-ym
453 nz3 = x(3,nj3)-zm
454
455 ps1 = nx1*nx2+ny1*ny2+nz1*nz2
456 ps2 = nx2*nx3+ny2*ny3+nz2*nz3
457 ps3 = nx1*nx3+ny1*ny3+nz1*nz3
458 an2 = nx2*nx2+ny2*ny2+nz2*nz2
459 an3 = nx3*nx3+ny3*ny3+nz3*nz3
460 det = ps2*ps2-an2*an3
461
462 mu = (ps2*ps1-ps3*an2)/sign(
max(em30,abs(det)),det)
463
464 facr =
min(one,
max(-one,mu))
465 nx1=nx1-facr*nx3
466 ny1=ny1-facr*ny3
467 nz1=nz1-facr*nz3
468
469 an1 = (nx1**2+ny1**2+nz1**2)
470 an =
max(em30,sqrt((normal(1,i)**2+normal(2,i)**2+normal(3,i)**2)*an1))
471 pj=pj*
max(zero,(nx1*normal(1,i)+ny1*normal(2,i)+nz1*normal(3,i))/an)
472 an =
max(em30,sqrt((nx2**2+ny2**2+nz2**2)*an1))
473 tmpo = (nx1*nx2+ny1*ny2+nz1*nz2)/an
474 tmpo = sign(
min(one,abs(tmpo)),tmpo)
475 theta=api*acos(tmpo)
476 pj=pj*fpa*finter_mixed(python,nfunct,ipa,theta*scala,npc,tf)
477 dist = sqrt(an1)
478 IF(ipz/=0)pj=pj*fpz*finter_mixed(python,nfunct,ipz,dist*scald,npc,tf)
479
480 fx=pj*normal(1,i)
481 fy=pj*normal(2,i)
482 fz=pj*normal(3,i)
483
484 a(1,n1)=a(1,n1)+fx
485 a(2,n1)=a(2,n1)+fy
486 a(3,n1)=a(3,n1)+fz
487
488 a(1,n2)=a(1,n2)+fx
489 a(2,n2)=a(2,n2)+fy
490 a(3,n2)=a(3,n2)+fz
491
492 a(1,n3)=a(1,n3)+fx
493 a(2,n3)=a(2,n3)+fy
494 a(3,n3)=a(3,n3)+fz
495
496 a(1,n4)=a(1,n4)+fx
497 a(2,n4)=a(2,n4)+fy
498 a(3,n4)=a(3,n4)+fz
499
500 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+
501 . anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0) THEN
502 fext(1,n1) = fext(1,n1)+fx
503 fext(2,n1) = fext(2,n1)+fy
504 fext(3,n1) = fext(3,n1)+fz
505 fext(1,n2) = fext(1,n2)+fx
506 fext(2,n2) = fext(2,n2)+fy
507 fext(3,n2) = fext(3,n2)+fz
508 fext(1,n3) = fext(1,n3)+fx
509 fext(2,n3) = fext(2,n3)+fy
510 fext(3,n3) = fext(3,n3)+fz
511 fext(1,n4) = fext(1,n4)+fx
512 fext(2,n4) = fext(2,n4)+fy
513 fext(3,n4) = fext(3,n4)+fz
514 ENDIF
515
516 wfext=wfext+dt1*(fx*(v(1,n1)+v(1,n2)+v(1,n3)+v(1,n4))
517 + +fy*(v(2,n1)+v(2,n2)+v(2,n3)+v(2,n4))
518 + +fz*(v(3,n1)+v(3,n2)+v(3,n3)+v(3,n4)))
519 ENDIF
520 ENDDO
521
522 ENDIF
523 ENDDO
524
525 RETURN