33 SUBROUTINE volprep(IVOLU ,RVOLU ,NJET ,IBAGJET ,RBAGJET ,
34 2 NSENSOR,SENSOR_TAB,X ,V ,A ,
35 3 NORMAL ,NPC ,TF ,NN ,SURF_NODES,
36 4 IADMV ,FSKY ,FSKYV ,FEXT ,H3D_DATA ,
37 5 SURF_ELTYP,SURF_ELEM,NODE_NUMBER,TOTAL_CONTRIBUTION_NUMBER,
38 6 CONTRIBUTION_INDEX,CONTRIBUTION_NUMBER,
39 7 NODE_ID,CONTRIBUTION,WFEXT,PYTHON)
52#include "implicit_f.inc"
65 INTEGER ,
INTENT(IN) :: NSENSOR
66 INTEGER ,
INTENT(IN) :: NODE_NUMBER
67 INTEGER ,
INTENT(IN) :: TOTAL_CONTRIBUTION_NUMBER
68 INTEGER IVOLU(*),NJET,IBAGJET(NIBJET,*),
69 . NPC(*),NN,IADMV(4,*),SURF_NODES(NN,4),SURF_ELTYP(NN),
71 INTEGER,
DIMENSION(NN,4),
INTENT(in) :: CONTRIBUTION_INDEX
72 INTEGER,
DIMENSION(NODE_NUMBER+1),
INTENT(in) :: CONTRIBUTION_NUMBER
73 INTEGER,
DIMENSION(NODE_NUMBER),
INTENT(in) :: NODE_ID
74 my_real,
DIMENSION(TOTAL_CONTRIBUTION_NUMBER,3),
INTENT(inout) :: contribution
75 my_real rvolu(*),rbagjet(nrbjet,*),x(3,*), v(3,*), a(3,*), normal(3,nn),tf(*),fsky(8,lsky),fskyv(lsky,8),fext(3,*)
77 TYPE (SENSOR_STR_) ,
DIMENSION(NSENSOR) ,
INTENT(IN) :: SENSOR_TAB
78 DOUBLE PRECISION,
INTENT(INOUT) :: WFEXT
79 TYPE(python_),
intent(inout) :: PYTHON
83 INTEGER I,J,II,NJ1,NJ2,NJ3,IPT,IPA,IPZ,N1,N2,N3,N4,IJ,ISENS,K,ITYP
84 INTEGER :: ADDRESS,NOD,LOCAL_CONTRIBUTION_NUMBER
85 my_real :: pres,fx,fy,fz,p,pext,dp,q,pj,pj0,xx,yy,zz,
86 . theta,nx1,nx2,ny1,ny2,nz1,nz2,an1,an,
87 . xm,ym,zm,nx3,ny3,nz3,
88 . ps1,ps2,ps3,an2,an3,det,mu,facr,
89 . api,dist,tstart,ts,tmpo,fpt,fpa,fpz,scalt,scala,scald
103 DO i=1,total_contribution_number
104 contribution(i,1) = zero
105 contribution(i,2) = zero
106 contribution(i,3) = zero
116 IF(surf_eltyp(i) /= 7) n4 = surf_nodes(i,4)
118 IF(surf_eltyp(i) == 3)
THEN
126 fsky(1,iadmv(1,i))=fx
127 fsky(2,iadmv(1,i))=fy
128 fsky(3,iadmv(1,i))=fz
130 fsky(1,iadmv(2,i))=fx
131 fsky(2,iadmv(2,i))=fy
132 fsky(3,iadmv(2,i))=fz
134 fsky(1,iadmv(3,i))=fx
135 fsky(2,iadmv(3,i))=fy
136 fsky(3,iadmv(3,i))=fz
138 fsky(1,iadmv(4,i))=fx
139 fsky(2,iadmv(4,i))=fy
140 fsky(3,iadmv(4,i))=fz
141 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+
142 . anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0)
THEN
143 address = contribution_index(i,1)
144 contribution(address,1) = fx
145 contribution(address,2) = fy
146 contribution(address,3) = fz
147 address = contribution_index(i,2)
148 contribution(address,1) = fx
149 contribution(address,2) = fy
150 contribution(address,3) = fz
151 address = contribution_index(i,3)
152 contribution(address,1) = fx
153 contribution(address,2) = fy
154 contribution(address,3) = fz
155 address = contribution_index(i,4)
156 contribution(address,1) = fx
157 contribution(address,2) = fy
158 contribution(address,3) = fz
160 ELSEIF(surf_eltyp(i)==7)
THEN
162 ii=surf_elem(i) + numelc
168 fsky(1,iadmv(1,i))=fx
169 fsky(2,iadmv(1,i))=fy
170 fsky(3,iadmv(1,i))=fz
172 fsky(1,iadmv(2,i))=fx
173 fsky(2,iadmv(2,i))=fy
174 fsky(3,iadmv(2,i))=fz
176 fsky(1,iadmv(3,i))=fx
177 fsky(2,iadmv(3,i))=fy
178 fsky(3,iadmv(3,i))=fz
179 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+
180 . anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0)
THEN
181 address = contribution_index(i,1)
182 contribution(address,1) = fx
183 contribution(address,2) = fy
184 contribution(address,3) = fz
185 address = contribution_index(i,2)
186 contribution(address,1) = fx
187 contribution(address,2) = fy
188 contribution(address,3) = fz
189 address = contribution_index(i,3)
190 contribution(address,1) = fx
191 contribution(address,2) = fy
192 contribution(address,3) = fz
202 fsky(1,iadmv(1,i))=fx
203 fsky(2,iadmv(1,i))=fy
204 fsky(3,iadmv(1,i))=fz
206 fsky(1,iadmv(2,i))=fx
207 fsky(2,iadmv(2,i))=fy
208 fsky(3,iadmv(2,i))=fz
212 fsky(3,iadmv(3,i))=fz
214 fsky(1,iadmv(4,i))=fx
215 fsky(2,iadmv(4,i))=fy
216 fsky(3,iadmv(4,i))=fz
217 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+
218 . anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0)
THEN
219 address = contribution_index(i,1)
220 contribution(address,1) = fx
221 contribution(address,2) = fy
222 contribution(address,3) = fz
223 address = contribution_index(i,2)
225 contribution(address,2) = fy
226 contribution(address,3) = fz
227 address = contribution_index(i,3)
228 contribution(address,1) = fx
229 contribution(address,2) = fy
230 contribution(address,3) = fz
231 address = contribution_index(i,4)
232 contribution(address,1) = fx
233 contribution(address,2) = fy
234 contribution(address,3) = fz
241 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+
242 . anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0)
THEN
246 address = contribution_number(i)
247 local_contribution_number = contribution_number(i+1) - contribution_number(i)
251 DO j=1,local_contribution_number
252 tmp(1) = tmp(1) + contribution(address+j,1)
253 tmp(2) = tmp(2) + contribution(address+j,2)
254 tmp(3) = tmp(3) + contribution(address+j,3)
256 fext(1,nod) = fext(1,nod)+ tmp(1)
257 fext(2,nod) = fext(2,nod)+ tmp(2)
258 fext(3,nod) = fext(3,nod)+ tmp(3)
266 IF(ityp/=4.AND.ityp/=5.AND.ityp/=7.AND.ityp/=9)
THEN
287 tstart=sensor_tab(isens)%TSTART
290 IF(nj1/=0.AND.tt>=tstart)
THEN
292 pj0=fpt*finter_mixed(python,nfunct,ipt,ts*scalt,npc,tf)
294 DO i=1,total_contribution_number
295 contribution(i,1) = zero
296 contribution(i,2) = zero
297 contribution(i,3) = zero
308 IF(surf_eltyp(i)==3)
THEN
318 xx = fourth*(x(1,n1)+x(1,n2)+x(1,n3)+x(1,n4))
319 yy = fourth*(x(2,n1)+x(2,n2)+x(2,n3)+x(2,n4))
320 zz = fourth*(x(3,n1)+x(3,n2)+x(3,n3)+x(3,n4))
322 xm=half*(x(1,nj1)+x(1,nj3))
323 ym=half*(x(2,nj1)+x(2,nj3))
324 zm=half*(x(3,nj1)+x(3,nj3))
339 ps1 = nx1*nx2+ny1*ny2+nz1*nz2
340 ps2 = nx2*nx3+ny2*ny3+nz2*nz3
341 ps3 = nx1*nx3+ny1*ny3+nz1*nz3
342 an2 = nx2*nx2+ny2*ny2+nz2*nz2
343 an3 = nx3*nx3+ny3*ny3+nz3*nz3
344 det = ps2*ps2-an2*an3
346 mu = (ps2*ps1-ps3*an2)/sign(
max(em30,abs(det)),det)
348 facr =
min(one,
max(-one,mu))
353 an1 = (nx1**2+ny1**2+nz1**2)
354 an =
max(em30,sqrt((normal(1,i)**2+normal(2,i)**2+normal(3,i)**2)*an1))
355 pj=pj*
max(zero,(nx1*normal(1,i)+ny1*normal(2,i)+nz1*normal(3,i))/an)
356 an =
max(em30,sqrt((nx2**2+ny2**2+nz2**2)*an1))
357 tmpo = (nx1*nx2+ny1*ny2+nz1*nz2)/an
358 tmpo = sign(
min(one,abs(tmpo)),tmpo)
360 pj=pj*fpa*finter_mixed(python,nfunct,ipa,theta*scala,npc,tf)
362 IF(ipz/=0)pj=pj*fpz*finter_mixed(python,nfunct,ipz,dist*scald,npc,tf)
368 fsky(1,iadmv(1,i))=fsky(1,iadmv(1,i))+fx
369 fsky(2,iadmv(1,i))=fsky(2,iadmv(1,i))+fy
370 fsky(3,iadmv(1,i))=fsky(3,iadmv(1,i))+fz
372 fsky(1,iadmv(2,i))=fsky(1,iadmv(2,i))+fx
373 fsky(2,iadmv(2,i))=fsky(2,iadmv(2,i))+fy
374 fsky(3,iadmv(2,i))=fsky(3,iadmv(2,i))+fz
376 fsky(1,iadmv(3,i))=fsky(1,iadmv(3,i))+fx
377 fsky(2,iadmv(3,i))=fsky(2,iadmv(3,i))+fy
378 fsky(3,iadmv(3,i))=fsky(3,iadmv(3,i))+fz
380 fsky(1,iadmv(4,i))=fsky(1,iadmv(4,i))+fx
381 fsky(2,iadmv(4,i))=fsky(2,iadmv(4,i))+fy
382 fsky(3,iadmv(4,i))=fsky(3,iadmv(4,i))+fz
384 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+
385 . anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0)
THEN
386 address = contribution_index(i,1)
387 contribution(address,1) = fx
388 contribution(address,2) = fy
389 contribution(address,3) = fz
390 address = contribution_index(i,2)
391 contribution(address,1) = fx
392 contribution(address,2) = fy
393 contribution(address,3) = fz
394 address = contribution_index(i,3)
395 contribution(address,1) = fx
396 contribution(address,2) = fy
397 contribution(address,3) = fz
398 address = contribution_index(i,4)
399 contribution(address,1) = fx
400 contribution(address,2) = fy
401 contribution(address,3) = fz
404 wfext=wfext+dt1*(fx*(v(1,n1)+v(1,n2)+v(1,n3)+v(1,n4))
405 + +fy*(v(2,n1)+v(2,n2)+v(2,n3)+v(2,n4))
406 + +fz*(v(3,n1)+v(3,n2)+v(3,n3)+v(3,n4)))
407 ELSEIF(surf_eltyp(i)==7)
THEN
414 ii=surf_elem(i) + numelc
416 xx = (x(1,n1)+x(1,n2)+x(1,n3))*third
417 yy = (x(2,n1)+x(2,n2)+x(2,n3))*third
418 zz = (x(3,n1)+x(3,n2)+x(3,n3))*third
420 xm=half*(x(1,nj1)+x(1,nj3))
421 ym=half*(x(2,nj1)+x(2,nj3))
422 zm=half*(x(3,nj1)+x(3,nj3))
437 ps1 = nx1*nx2+ny1*ny2+nz1*nz2
438 ps2 = nx2*nx3+ny2*ny3+nz2*nz3
439 ps3 = nx1*nx3+ny1*ny3+nz1*nz3
440 an2 = nx2*nx2+ny2*ny2+nz2*nz2
441 an3 = nx3*nx3+ny3*ny3+nz3*nz3
442 det = ps2*ps2-an2*an3
444 mu = (ps2*ps1-ps3*an2)/sign(
max(em30,abs(det)),det)
446 facr =
min(one,
max(-one,mu))
451 an1 = (nx1**2+ny1**2+nz1**2)
452 an =
max(em30,sqrt((normal(1,i)**2+normal(2,i)**2+normal(3,i)**2)*an1))
453 pj=pj*
max(zero,(nx1*normal(1,i
454 an =
max(em30,sqrt((nx2**2+ny2**2+nz2**2)*an1))
455 tmpo = (nx1*nx2+ny1*ny2+nz1*nz2)/an
456 tmpo = sign(
min(one,abs(tmpo)),tmpo)
458 pj=pj*fpa*finter_mixed(python,nfunct,ipa,theta*scala,npc,tf)
460 IF(ipz/=0)pj=pj*fpz*finter_mixed(python,nfunct,ipz,dist*scald,npc,tf)
466 fsky(1,iadmv(1,i))=fsky(1,iadmv(1,i))+fx
467 fsky(2,iadmv(1,i))=fsky(2,iadmv(1,i))+fy
470 fsky(1,iadmv(2,i))=fsky(1,iadmv(2,i))+fx
471 fsky(2,iadmv(2,i))=fsky(2,iadmv(2,i))+fy
472 fsky(3,iadmv(2,i))=fsky(3,iadmv(2,i))+fz
474 fsky(1,iadmv(3,i))=fsky(1,iadmv(3,i))+fx
475 fsky(2,iadmv(3,i))=fsky(2,iadmv(3,i))+fy
476 fsky(3,iadmv(3,i))=fsky(3,iadmv(3,i))+fz
478 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+
479 . anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0)
THEN
480 address = contribution_index(i,1)
481 contribution(address,1) = fx
482 contribution(address,2) = fy
483 contribution(address,3) = fz
484 address = contribution_index(i,2)
486 contribution(address,2) = fy
487 contribution(address,3) = fz
488 address = contribution_index(i,3)
489 contribution(address,1) = fx
490 contribution(address,2) = fy
491 contribution(address,3) = fz
494 wfext=wfext+dt1*(fx*(v(1,n1)+v(1,n2)+v(1,n3))
495 + +fy*(v(2,n1)+v(2,n2)+v(2,n3))
496 + +fz*(v(3,n1)+v(3,n2)+v(3,n3)))
507 xx = fourth*(x(1,n1)+x(1,n2)+x(1,n3)+x(1,n4))
508 yy = fourth*(x(2,n1)+x(2,n2)+x(2,n3)+x(2,n4))
509 zz = fourth*(x(3,n1)+x(3,n2)+x(3,n3)+x(3,n4))
511 xm=half*(x(1,nj1)+x(1,nj3))
512 ym=half*(x(2,nj1)+x(2,nj3))
513 zm=half*(x(3,nj1)+x(3,nj3))
528 ps1 = nx1*nx2+ny1*ny2+nz1*nz2
529 ps2 = nx2*nx3+ny2*ny3+nz2*nz3
530 ps3 = nx1*nx3+ny1*ny3+nz1*nz3
531 an2 = nx2*nx2+ny2*ny2+nz2*nz2
532 an3 = nx3*nx3+ny3*ny3+nz3*nz3
533 det = ps2*ps2-an2*an3
535 mu = (ps2*ps1-ps3*an2)/sign(
max(em30,abs(det)),det)
537 facr =
min(one,
max(-one,mu))
542 an1 = (nx1**2+ny1**2+nz1**2)
543 an =
max(em30,sqrt((normal(1,i)**2+normal(2,i)**2+normal(3,i)**2)*an1))
544 pj=pj*
max(zero,(nx1*normal(1,i)+ny1*normal(2,i)+nz1*normal(3,i))/an)
545 an =
max(em30,sqrt((nx2**2+ny2**2+nz2**2)*an1))
546 tmpo = (nx1*nx2+ny1*ny2+nz1*nz2)/an
547 tmpo = sign(
min(one,abs(tmpo)),tmpo)
549 pj=pj*fpa*finter_mixed(python,nfunct,ipa,theta*scala,npc,tf)
551 IF(ipz/=0)pj=pj*fpz*finter_mixed(python,nfunct,ipz,dist*scald,npc,tf)
557 fsky(1,iadmv(1,i))=fsky(1,iadmv(1,i))+fx
558 fsky(2,iadmv(1,i))=fsky(2,iadmv(1,i))+fy
559 fsky(3,iadmv(1,i))=fsky(3,iadmv(1,i))+fz
561 fsky(1,iadmv(2,i))=fsky(1,iadmv(2,i))+fx
562 fsky(2,iadmv(2,i))=fsky(2,iadmv(2,i))+fy
563 fsky(3,iadmv(2,i))=fsky(3,iadmv(2,i))+fz
565 fsky(1,iadmv(3,i))=fsky(1,iadmv(3,i))+fx
566 fsky(2,iadmv(3,i))=fsky(2,iadmv(3,i))+fy
567 fsky(3,iadmv(3,i))=fsky(3,iadmv(3,i))+fz
569 fsky(1,iadmv(4,i))=fsky(1,iadmv(4,i))+fx
570 fsky(2,iadmv(4,i))=fsky(2,iadmv(4,i))+fy
571 fsky(3,iadmv(4,i))=fsky(3,iadmv(4,i))+fz
573 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+
574 . anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0)
THEN
575 address = contribution_index(i,1)
576 contribution(address,1) = fx
577 contribution(address,2) = fy
578 contribution(address,3) = fz
579 address = contribution_index(i,2)
580 contribution(address,1) = fx
581 contribution(address,2) = fy
582 contribution(address,3) = fz
583 address = contribution_index(i,3)
584 contribution(address,1) = fx
585 contribution(address,2) = fy
586 contribution(address,3) = fz
587 address = contribution_index(i,4)
588 contribution(address,1) = fx
589 contribution(address,2) = fy
590 contribution(address,3) = fz
593 wfext=wfext+dt1*(fx*(v(1,n1)+v(1,n2)+v(1,n3)+v(1,n4))
594 + +fy*(v(2,n1)+v(2,n2)+v(2,n3)+v(2,n4))
595 + +fz*(v(3,n1)+v(3,n2)+v(3,n3)+v(3,n4)))
600 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+
601 . anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0)
THEN
605 address = contribution_number(i)
606 local_contribution_number = contribution_number(i+1) - contribution_number(i)
610 DO j=1,local_contribution_number
611 tmp(1) = tmp(1) + contribution(address+j,1)
612 tmp(2) = tmp(2) + contribution(address+j,2)
613 tmp(3) = tmp(3) + contribution(address+j,3)
615 fext(1,nod) = fext(1,nod)+ tmp(1)
616 fext(2,nod) = fext(2,nod)+ tmp(2)
617 fext(3,nod) = fext(3,nod)+ tmp(3)