47 . IS_WRITTEN_SKIN ,H3D_PART,INFO1 ,KEYWORD ,
48 . IB ,ILOADP,LLOADP,FAC ,NPC,TF ,SENSOR_TAB,
49 . TAGNCONT,LOADP_HYD_INTER,FORC,XFRAME,X ,V ,
50 . IMAPSKP,LOADS ,TABLE,IFRAME,DIS,PBLAST)
66#include "implicit_f.inc"
73#include "tabsiz_c.inc"
77 INTEGER GET_U_NUMSENS,GET_U_SENS_FPAR,GET_U_SENS_IPAR,
78 . GET_U_SENS_VALUE,SET_U_SENS_VALUE
79 EXTERNAL GET_U_NUMSENS,GET_U_SENS_FPAR,GET_U_SENS_IPAR,
80 . GET_U_SENS_VALUE,SET_U_SENS_VALUE
84 INTEGER ,
INTENT(IN) :: NSENSOR
85 CHARACTER(LEN=NCHARLINE100):: KEYWORD
87 . SKIN_VECTOR(3,*),TF(*),X(3,*),V(3,*),DIS(3,NUMNOD)
88 TYPE (H3D_DATABASE) :: H3D_DATA
89 INTEGER ,
DIMENSION(NUMSKINP0),
INTENT(IN) :: IMAPSKP
91 . h3d_part(*),is_written_skin(*),info1,npc(*)
92 INTEGER LLOADP(SLLOADP)
93 INTEGER ILOADP(SIZLOADP,*),IB(NIBCLD,*)
94 INTEGER TAGNCONT(NLOADP_HYD_INTER,NUMNOD),
95 . LOADP_HYD_INTER(NLOADP_HYD),NODAL_IPART(*)
97 . fac(lfacload,nloadp),xframe(nxframe,*),forc(lfaccld,*)
98 TYPE (SENSOR_STR_) ,
DIMENSION(NSENSOR) ,
INTENT(IN) :: SENSOR_TAB
99 TYPE (LOADS_) ,
INTENT(IN) :: LOADS
100 INTEGER ,
DIMENSION(LISKN,NUMFRAM+1) ,
INTENT(IN) :: IFRAME
101 TYPE (TTABLE) ,
DIMENSION(NTABLE) ,
INTENT(IN) :: TABLE
102 TYPE(pblast_),
INTENT(IN) :: PBLAST
106 INTEGER NL, N1, ISK, N2, N3, N4, N5,NSKIN,
107 . IAD ,NP ,IFUNC ,NPRES,NSKIN0,NSKIN1,N1FRAM,DIR_HSP,I,N
108 INTEGER K1, K2, K3, ISENS,K,LL,IERR,
109 . N_OLD, ISMOOTH,IDEL,NINTERP ,NPL,,TAGN2,TAGN3,TAGN4,
110 . fun_cx,fun_vel,dir_vel,ifra2, ianim,ijk,up_bound,
111 . iz_update,abac_id,isiz_seg,ierr1,
112 . phi_i,
id, user_id, ita_shift,ndt,ndt0,
113 . niter,iter,imodel,il,is,segcont,fun_hsp,ifra1,np0
115 . nx, ny, nz, axi, aa, a0, vv, fx, fy, fz, ax, dydx, ts,
116 . sixth,x_old, f1, f2,xsens,fcx,fcy,fcypinch,fp,
117 . fcx1,fcy1,fcx2,fcy2,vx
118 my_real finter, ps, zx,zy,zz,finter_smooth
120 . rxi,ryi,rzi,sxi,syi,szi
121 my_real coormean,ymean,zmean,pvel,nsign,dnorm,
122 . xdet,ydet,zdet,tdet,wtnt,pmin,dx,dy,dz,normd, p,
123 . t0inf_loc, ta_shift, tt_star
124 INTEGER :: IFUN,IFRA,M1,M2,NDIM,NPOINT, IIOUT,SHIFT,FUNCTYPE
125 my_real :: a11,a12,a21,a22,b1,b2,det,len,dirx,diry,dirz,
126 . beta,gamma,r,s,rmax,xfacr,xfact,yfac,segp,press,disp
127 my_real,
DIMENSION(3) :: p0,dir,a,b,c,d,m
129 EXTERNAL finter,finter_smooth
131 IF (keyword /=
'VECT/PEXT')
RETURN
133 is_written_skin(nskin+1:numskin) = 0
134 skin_vector(1:3,nskin+1:numskin)=zero
151 IF (n1==0.OR.n2==0.OR.n3==0.OR.n4==-1) cycle
154 nskin = nskin0+ imapskp(np0)
155 IF (nodal_ipart(n1)>0)
THEN
156 IF (h3d_part(nodal_ipart(n1))==1) is_written_skin(nskin)=1
161 IF(ib(6,nl)== sensor_tab(k)%SENS_ID) isens=k
166 ts = tt- sensor_tab(isens)%TSTART
170 IF(functype == 1)
THEN
171 IF(n_old/=n5.OR.x_old/=ts)
THEN
173 IF (n5 > 0) ismooth = npc(2*nfunct+n5+1)
174 IF (ismooth == 0)
THEN
175 f1 = finter(n5,ts*fcx,npc,tf,dydx)
176 ELSE IF(ismooth > 0)
THEN
177 f1 = finter_smooth(n5,ts*fcx,npc,tf,dydx)
183 ELSEIF(functype == 2)
THEN
185 disp = (dis(3,n1)+dis(3,n2)+dis(3,n3)+dis(3,n4))/4.0
187 IF (n5 > 0) ismooth = npc(2*nfunct+n5+1)
188 IF (ismooth == 0)
THEN
189 f1 = finter(n5,disp*fcx,npc,tf,dydx)
190 ELSE IF(ismooth > 0)
THEN
191 f1 = finter_smooth(n5,disp*fcx,npc,tf,dydx)
197 ELSEIF(functype == 3)
THEN
199 vel = (v(3,n1)+v(3,n2)+v(3,n3)+v(3,n4))/4.0
201 IF (n5 > 0) ismooth = npc(2*nfunct+n5+1)
202 IF (ismooth == 0)
THEN
203 f1 = finter(n5,vel*fcx,npc
204 ELSE IF(ismooth > 0)
THEN
205 f1 = finter_smooth(n5,vel*fcx,npc,tf,dydx)
213 skin_vector(3,nskin)=skin_vector(3,nskin) + aa
216 shift = nloadp_f+pblast%NLOADP_B
217 DO np=1+shift,nloadp_hyd+shift
218 isiz_seg = iloadp(1,np)/4
221 ninterp = iloadp(5,np)
227 n1 = lloadp(iad+4*(n-1))
228 n2 = lloadp(iad+4*(n-1)+1)
229 n3 = lloadp(iad+4*(n-1)+2)
230 n4 = lloadp(iad+4*(n-1)+3)
231 IF (n1==0.OR.n2==0.OR.n3==0) cycle
232 nskin = nskin0+ imapskp(np0+n)
233 IF (nodal_ipart(n1)>0)
THEN
234 IF (h3d_part(nodal_ipart(n1))==1) is_written_skin(nskin)=1
241 ts = tt-sensor_tab(isens)%TSTART
245 n2 = lloadp(iad+4*(n-1)+1)
246 n3 = lloadp(iad+4*(n-1)+2)
248 IF (n1==0.OR.n2==0.OR.n3==0) cycle
252 nskin = nskin0+ imapskp(np0)
265 IF(ninterp > 0 )
THEN
266 npl = loadp_hyd_inter(np)
268 IF(tagncont(npl,n1)==1.AND.tagncont(npl,n2)==1.AND.
269 . tagncont(npl,n3)==1.AND.tagncont(npl,n4)==1)
THEN
272 tagn1 = tagncont(npl,n1)
273 tagn2 = tagncont(npl,n2)
274 tagn3 = tagncont(npl,n3)
275 tagn4 = tagncont(npl,n4)
276 fp = (tagn1+tagn2+tagn3+tagn4)/4
279 IF(tagncont(npl,n1)==1.AND.tagncont(npl,n2)==1.AND.
280 . tagncont(npl,n3)==1)
THEN
283 tagn1 = tagncont(npl,n1)
284 tagn2 = tagncont(npl,n2)
285 tagn3 = tagncont(npl,n3)
286 fp = (tagn1+tagn2+tagn3)/3
289 IF (fp==zero) fp = one
291 IF (segcont==1) aa = zero
293 skin_vector(3,nskin)=skin_vector(3,nskin) + aa
299 isiz_seg = iloadp(1,nl)/4
302 n1 = lloadp(iad+4*(n-1))
303 n2 = lloadp(iad+4*(n-1)+1)
304 n3 = lloadp(iad+4*(n-1)+2)
305 n4 = lloadp(iad+4*(n-1)+3)
306 IF (n1==0.OR.n2==0.OR.n3==0) cycle
307 nskin = nskin0+ imapskp(np0+n)
308 IF (nodal_ipart(n1)>0)
THEN
309 IF (h3d_part(nodal_ipart(n1))==1) is_written_skin(nskin)=1
320 fun_vel=iloadp(11,nl)
325 dir_vel=
max(iloadp(12,nl),1)
330 IF(iloadp(6,nl)== sensor_tab(k)%SENS_ID) isens=k
335 ts = tt-sensor_tab(isens)%TSTART
338 n1=lloadp(iloadp(4,nl)+4*(i-1))
339 n2=lloadp(iloadp(4,nl)+4*(i-1)+1)
340 n3=lloadp(iloadp(4,nl)+4*(i-1)+2)
341 n4=lloadp(iloadp(4,nl)+4*(i-1)+3)
342 IF (n1==0.OR.n2==0.OR.n3==0) cycle
345 nskin = nskin0+ imapskp(np0)
352 IF(n4/=0 .AND. n1/=n2 .AND. n1/=n3 .AND. n1/=n4 .AND.
353 . n2/=n3 .AND. n2/=n4 .AND. n3/=n4 )
THEN
360 coormean = (xframe(k1,ifra1
361 . (xframe(k2,ifra1)*(x(2,n1)+x(2,n2)+x(2,n3)+x
362 . (xframe(k3,ifra1)*(x(3,n1)+x(3,n2)+x(3,n3)+x(3,n4))/four)
363 aa = fcy*finter(fun_hsp,(coormean-xframe
365 nx= (x(2,n3)-x(2,n1))*(x(3,n4)-x(3,n2)) - (x(3,n3)-x(3,n1))*(x(2,n4)-x(2,n2))
366 ny= (x(3,n3)-x(3,n1))*(x(1,n4)-x(1,n2)) - (x(1,n3)-x(1,n1))*(x(3,n4)-x(3,n2))
367 nz= (x(1,n3)-x(1,n1))*(x(2,n4)-x(2,n2)) - (x(2,n3)-x(2,n1))*(x(1,n4)-x(1,n2))
368 norm = sqrt(nx*nx+ny*ny+nz*nz)
369 aa = aa * half *
norm
375 nsign = (nx * xframe(k1,ifra2
376 . ny * xframe(k2,ifra2) +
377 . nz * xframe(k3,ifra2))
378 IF(nsign/=zero) nsign = sign(one,nsign)
380 vseg= (xframe(k1,ifra2)*
381 . (v(1,n1) + v(1,n2) + v(1,n3) + v(1,n4)) /four)+
383 . (v(2,n1) + v(2,n2) + v(2,n3) + v(2,n4)) /four)+
385 . (v(3,n1) + v(3,n2) + v(3,n3) + v(3,n4)) /four)
388 vel = fcy2*finter(fun_vel,tt*fcx2,npc,tf,dydx)- vseg
393 . pvel = ( (-(nx/
norm)*vel*xframe(k1,ifra2)-
394 . (ny/
norm)*vel*xframe(k2,ifra2)-
395 . (nz/
norm)*vel*xframe(k3,ifra2))**2 )* fcy1*
396 . finter(fun_cx,tt*fcx1,npc,tf,dydx)/two
425 coormean = (xframe(k1,ifra1)*(x(1,n1)+x(1,n2)+x(1,n3))/three)+
426 . (xframe(k2,ifra1)*(x(2,n1)+x(2,n2)+x(2,n3))/three)+
427 . (xframe(k3,ifra1)*(x(3,n1)+x(3,n2)+x(3,n3))/three)
428 aa = fcy*finter(fun_hsp,(coormean-xframe(9+dir_hsp,ifra1))*fcx,npc,tf,dydx)
430 nx= (x(2,n3)-x(2,n1))*(x(3,n4)-x(3,n2)) - (x(3,n3)-x(3,n1))*(x(2,n4)-x(2,n2))
431 ny= (x(3,n3)-x(3,n1))*(x(1,n4)-x(1,n2)) - (x(1,n3)-x(1,n1))*(x(3,n4)-x(3,n2))
432 nz= (x(1,n3)-x(1,n1))*(x(2,n4)-x(2,n2)) - (x(2,n3)-x(2,n1))*(x(1,n4)-x(1,n2))
433 norm = sqrt(nx*nx+ny*ny+nz*nz)
434 aa = aa * half *
norm
440 nsign = (nx * xframe(k1,ifra2) +
441 . ny * xframe(k2,ifra2) +
442 . nz * xframe(k3,ifra2))
443 IF(nsign/=zero) nsign = sign(one,nsign
445 vseg= (xframe(k1,ifra2)*
446 . (v(1,n1) + v(1,n2) + v(1,n3)) /three)+
448 . (v(2,n1) + v(2,n2) + v(2,n3)) /three)+
450 . (v(3,n1) + v(3,n2) + v(3,n3)) /three)
453 vel = fcy2*finter(fun_vel,tt*fcx2,npc,tf,dydx)- vseg
458 . pvel = ( (-(nx/
norm)*vel*xframe(k1,ifra2)-
459 . (ny/
norm)*vel*xframe(k2,ifra2)-
460 . (nz/
norm)*vel*xframe(k3,ifra2))**2 )* fcy1*
461 . finter(fun_cx,tt*fcx1,npc,tf,dydx)/two
464 skin_vector(3,nskin)=skin_vector(3,nskin) + aa
468 DO nl=1+nloadp_f,nloadp_f+pblast%NLOADP_B
470 isiz_seg = iloadp(1,nl)/4
473 n1 = lloadp(iad+4*(n-1))
474 n2 = lloadp(iad+4*(n-1)+1)
475 n3 = lloadp(iad+4*(n-1)+2)
476 n4 = lloadp(iad+4*(n-1)+3)
477 IF (n1==0.OR.n2==0.OR.n3==0) cycle
478 nskin = nskin0+ imapskp(np0+n)
479 IF (nodal_ipart(n1)>0)
THEN
480 IF (h3d_part(nodal_ipart(n1))==1) is_written_skin(nskin)=1
490 n1=lloadp(iloadp(4,nl)+4*(i-1))
491 n2=lloadp(iloadp(4,nl)+4*(i-1)+1)
492 n3=lloadp(iloadp(4,nl)+4*(i-1)+2)
493 n4=lloadp(iloadp(4,nl)+4*(i-1)+3)
494 IF (n1==0.OR.n2==0.OR.n3==0) cycle
497 nskin = nskin0+ imapskp(np0)
500 skin_vector(3,nskin)=skin_vector(3,nskin) + aa
504 DO nl=1,loads%NLOAD_CYL
506 isiz_seg = loads%LOAD_CYL
508 n1 = loads%LOAD_CYL(nl)%SEGNOD(n,1)
509 n2 = loads%LOAD_CYL(nl)%SEGNOD(n,2)
510 n3 = loads%LOAD_CYL(nl)%SEGNOD(n,3)
511 n4 = loads%LOAD_CYL(nl)%SEGNOD(n,4)
512 IF (n1==0.OR.n2==0.OR.n3==0) cycle
513 nskin = nskin0+ imapskp(np0+n)
514 IF (nodal_ipart(n1)>0)
THEN
515 IF (h3d_part(nodal_ipart(n1
518 isens = loads%LOAD_CYL(nl)%ISENS
521 IF (sensor_tab(isens)%STATUS == 0)
THEN
526 ifra = loads%LOAD_CYL(nl)%IFRAME + 1
527 xfacr= loads%LOAD_CYL(nl)%XSCALE_R
528 xfact= loads%LOAD_CYL(nl)%XSCALE_T
529 yfac = loads%LOAD_CYL(nl)%YSCALE
530 ifun = loads%LOAD_CYL(nl)%ITABLE
531 ndim = table(ifun)%NDIM
532 npoint =
SIZE(table(ifun)%X(1)%VALUES)
533 rmax = table(ifun)%X(1)%VALUES(npoint)
536 dirx = x(1,m1) - x(1,m2)
537 diry = x(2,m1) - x(2,m2)
538 dirz = x(3,m1) - x(3,m2)
539 len = sqrt(dirx**2 + diry**2 + dirz**2)
551 n1 = loads%LOAD_CYL(nl)%SEGNOD(n,1)
552 n2 = loads%LOAD_CYL(nl)%SEGNOD(n,2)
553 n3 = loads%LOAD_CYL(nl)%SEGNOD(n,3)
554 n4 = loads%LOAD_CYL(nl)%SEGNOD(n,4)
568 . ifun ,table ,xfacr ,xfact ,segp )
569 press = abs(segp) * yfac
575 m(1) = (x(1,n1) + x(1,n2) + x(1,n3) + x(1,n4)) * fourth
576 m(2) = (x(2,n1) + x(2,n2) + x(2,n3) + x(2,n4)) * fourth
577 m(3) = (x(3,n1) + x(3,n2) + x(3,n3) + x(3,n4)) * fourth
580 . ifun ,table ,xfacr ,xfact ,segp )
581 press = press + segp * fourth
584 . ifun ,table ,xfacr ,xfact ,segp )
585 press = press + segp * fourth
588 . ifun ,table ,xfacr ,xfact ,segp )
589 press = press + segp * fourth
592 . ifun ,table ,xfacr ,xfact ,segp )
593 press = press + segp * fourth
594 press = abs(press) * yfac
596 nskin = nskin0+ imapskp(np0)
597 skin_vector(3,nskin)=skin_vector(3,nskin) +press