42 2 A ,V ,X ,SKEW ,SENSOR_TAB,
43 3 IADC ,FSKY ,FEXT ,TAGNCONT ,NSENSOR ,
44 4 LOADP_HYD_INTER , H3D_DATA , PYTHON,
45 5 NPRESLOAD ,LOADP_TAGDEL,TH_SURF,PBLAST ,WFEXT)
57#include "implicit_f.inc"
70#include "tabsiz_c.inc"
74 INTEGER,
EXTERNAL :: GET_U_NUMSENS,GET_U_SENS_FPAR,GET_U_SENS_IPAR,GET_U_SENS_VALUE,SET_U_SENS_VALUE
78 TYPE(python_),
INTENT(inout) :: PYTHON
79 INTEGER,
INTENT(IN) :: NPRESLOAD,NSENSOR
80 INTEGER NPC(*),LLOADP(SLLOADP)
81 INTEGER ILOADP(SIZLOADP,*),TAGNCONT(NLOADP_HYD_INTER,NUMNOD),LOADP_HYD_INTER(NLOADP_HYD),IADC(*)
82 my_real loadp(sloadp,*), tf(*), a(3,*), v(3,*), x(3,*), skew(lskew,*),fsky(8,lsky), fext(3,*)
84 INTEGER,
INTENT(IN) :: LOADP_TAGDEL(NPRESLOAD)
85 TYPE (sensor_str_) ,
DIMENSION(NSENSOR) ,
INTENT(IN) :: sensor_tab
86 TYPE (TH_SURF_) ,
INTENT(INOUT) :: TH_SURF
87 TYPE(pblast_),
INTENT(IN) :: PBLAST
88 DOUBLE PRECISION,
INTENT(INOUT) :: WFEXT
92 INTEGER N1, ISK, N2, N3, N4, ISENS,
93 . IAD ,NP ,IFUNC ,NPRES ,NINTERP ,IDIR ,INORM , ,IANIM,IFLOAD,
94 . SEGCONT ,N ,IADN , IJK ,,TAGN1,TAGN2,TAGN3,TAGN4,NUMPRESLOAD,
95 . IDEL, , NS, KSURF,NIDXLOAD
96 INTEGER :: IS_TABULATED
97 my_real NX, NY, NZ, AA, FX, FY, FZ, DYDX, TS, WFEXTT,F1, FCX,FCY,NORM,AREA
98 my_real,
EXTERNAL :: FINTER
109 ianim = anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+
110 . anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT
113 nsegpl = th_surf%NSEGLOADPF+th_surf%NSEGLOADPB
114 nidxload = nloadp_f+pblast%NLOADP_B
119 npres = iloadp(1,nidxload+np)
120 ifunc = iloadp(3,nidxload+np)
121 iad = iloadp(4,nidxload+np)
122 ninterp = iloadp(5,nidxload+np)
123 idir = iloadp(6,nidxload+np)
124 isens = iloadp(7,nidxload+np)
125 isk = iloadp(8,nidxload+np)
126 inorm = iloadp(9,nidxload+np)
127 ifload = iloadp(10,nidxload+np)
128 fcy = loadp(1,nidxload+np)
129 fcx = loadp(2,nidxload+np)
134 ts = tt-sensor_tab(isens)%TSTART
139 is_tabulated = npc(2*nfunct+ifunc+1)
140 IF(is_tabulated >= 0)
THEN
141 f1 = finter(ifunc,ts*fcx,npc,tf,dydx)
143 is_tabulated = -is_tabulated
144 CALL python_call_funct1d(python, is_tabulated,ts*fcx, f1)
151 n1 = lloadp(iad+4*(n-1))
152 n2 = lloadp(iad+4*(n-1)+1)
153 n3 = lloadp(iad+4*(n-1)+2)
154 n4 = lloadp(iad+4*(n-1)+3)
155 numpresload = numpresload + 1
158 idel = loadp_tagdel(numpresload)
172 IF(ninterp > 0 )
THEN
173 npl = loadp_hyd_inter(np)
175 segcont = tagncont(npl,n1) + tagncont(npl,n2) +
176 . tagncont(npl,n3)+tagncont(npl,n4)
177 IF(segcont >= 2 .AND.ifload==1)
THEN
179 ELSEIF(segcont <= 1.AND.ifload==2)
THEN
185 segcont = tagncont(npl,n1) + tagncont(npl,n2) +
187 IF(segcont >= 2 .AND.ifload==1)
THEN
189 ELSEIF(segcont <= 1.AND.ifload==2)
THEN
197 IF(segcont == 0)
THEN
201 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))
202 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))
203 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))
205 fx = aa*nx*one_over_8
206 fy = aa*ny*one_over_8
207 fz = aa*nz*one_over_8
208 ELSEIF(inorm==2)
THEN
209 norm = sqrt(nx*nx+ny*ny+nz*nz)
212 fx = aa*one_over_8*norm
216 fy = aa*one_over_8*norm
220 fz = aa*one_over_8*norm
226 fx = aa*one_over_8*norm*skew(1,isk)
230 fy = aa*one_over_8*norm*skew(2,isk)
234 fz = aa*one_over_8*norm*skew(3,isk)
239 ELSEIF(inorm==3)
THEN
243 fx = aa*one_over_8*nx
247 fy = aa*one_over_8*ny
251 fz = aa*one_over_8*nz
257 fx = aa*one_over_8*skew(1,isk)*nx
261 fy = aa*one_over_8*skew(2,isk)*ny
265 fz = aa*one_over_8*skew(3,isk)*nz
276 IF(ianim >0 .AND.impl_s==0)
THEN
277 fext(1,n1) = fext(1,n1)+fx
278 fext(2,n1) = fext(2,n1)+fy
279 fext(3,n1) = fext(3,n1)+fz
287 IF(ianim >0 .AND.impl_s==0)
THEN
288 fext(1,n2) = fext(1,n2)+fx
289 fext(2,n2) = fext(2,n2)+fy
290 fext(3,n2) = fext(3,n2)+fz
298 IF(ianim >0 .AND.impl_s==0)
THEN
299 fext(1,n3) = fext(1,n3)+fx
300 fext(2,n3) = fext(2,n3)+fy
301 fext(3,n3) = fext(3,n3)+fz
309 IF(ianim >0 .AND.impl_s==0)
THEN
310 fext(1,n4) = fext(1,n4)+fx
311 fext(2,n4) = fext(2,n4)+fy
312 fext(3,n4) = fext(3,n4)+fz
316 IF(th_surf%LOADP_FLAG >0 )
THEN
317 area = half*sqrt(nx*nx+ny*ny+nz*nz)
318 DO ns=th_surf%LOADP_KSEGS(nsegpl) +1,th_surf%LOADP_KSEGS(nsegpl+1)
319 ksurf = th_surf%LOADP_SEGS(ns)
320 th_surf%channels(4,ksurf)= th_surf%channels(4,ksurf) + area*aa
321 th_surf%channels(5,ksurf)= th_surf%channels(5,ksurf) + area
325 wfextt=wfextt+dt1*(fx*(v(1,n1)+v(1,n2)+v(1,n3)+v(1,n4))
326 + +fy*(v(2,n1)+v(2,n2)+v(2,n3)+v(2,n4))
327 + +fz*(v(3,n1)+v(3,n2)+v(3,n3)+v(3,n4)))
331 nx = (x(2,n3)-x(2,n1))*(x(3,n3)-x(3,n2)) - (x(3,n3)-x(3,n1))*(x(2,n3)
332 ny = (x(3,n3)-x(3,n1))*(x(1,n3)-x(1,n2)) - (x(1,n3)-x(1,n1))*(x(3,n3)-x(3,n2))
333 nz = (x(1,n3)-x(1,n1))*(x(2,n3)-x(2,n2)) - (x(2,n3)-x(2,n1))*(x(1,n3)-x(1,n2))
336 fx = aa*nx*one_over_6
337 fy = aa*ny*one_over_6
338 fz = aa*nz*one_over_6
339 ELSEIF(inorm==2)
THEN
340 norm = sqrt(nx*nx+ny*ny+nz*nz)
343 fx = aa*one_over_6*norm
347 fy = aa*one_over_6*norm
351 fz = aa*one_over_6*norm
357 fx = aa*one_over_6*norm*skew(1,isk)
361 fy = aa*one_over_6*norm*skew(2,isk)
365 fz = aa*one_over_6*norm*skew(3,isk)
370 ELSEIF(inorm==3)
THEN
374 IF(nx /= zero) fx = aa*one_over_6*nx
378 IF(ny /= zero) fy = aa*one_over_6*ny
382 IF(nz /= zero) fz = aa*one_over_6*nz
388 fx = aa*one_over_6*skew(1,isk)*nx
392 fy = aa*one_over_6*skew(2,isk)*ny
396 fz = aa*one_over_6*skew
407 IF(ianim >0 .AND.impl_s==0)
THEN
408 fext(1,n1) = fext(1,n1)+fx
409 fext(2,n1) = fext(2,n1)+fy
410 fext(3,n1) = fext(3,n1)+fz
419 IF(ianim >0 .AND.impl_s==0)
THEN
420 fext(1,n2) = fext(1,n2)+fx
421 fext(2,n2) = fext(2,n2)+fy
422 fext(3,n2) = fext(3,n2)+fz
430 IF(ianim >0 .AND.impl_s==0)
THEN
431 fext(1,n3) = fext(1,n3)+fx
432 fext(2,n3) = fext(2,n3)+fy
433 fext(3,n3) = fext(3,n3)+fz
437 IF(th_surf%LOADP_FLAG >0 )
THEN
438 area = half*sqrt(nx*nx+ny*ny+nz*nz)
439 DO ns=th_surf%LOADP_KSEGS(nsegpl) +1,th_surf%LOADP_KSEGS(nsegpl+1)
440 ksurf = th_surf%LOADP_SEGS(ns)
441 th_surf%channels(4,ksurf)= th_surf%channels(4,ksurf) + area*aa
442 th_surf%channels(5,ksurf)= th_surf%channels(5,ksurf) + area
446 wfextt=wfextt+dt1*(fx*(v(1,n1)+v(1,n2)+v(1,n3))
447 + + fy*(v(2,n1)+v(2,n2)+v(2,n3))
448 + + fz*(v(3,n1)+v(3,n2)+v(3,n3)))
458 wfext = wfext + wfextt
467 npres = iloadp(1,nidxload+np)
468 ifunc = iloadp(3,nidxload+np)
469 iad = iloadp(4,nidxload+np)
470 ninterp = iloadp(5,nidxload+np)
472 isens = iloadp(7,nidxload+np)
473 isk = iloadp(8,nidxload+np)
474 inorm = iloadp(9,nidxload+np)
475 ifload = iloadp(10,nidxload+np)
476 fcy = loadp(1,nidxload+np)
477 fcx = loadp(2,nidxload+np)
482 ts = tt-sensor_tab(isens)%TSTART
489 n1=lloadp(iad+4*(n-1))
491 n3=lloadp(iad+4*(n-1)+2)
492 n4=lloadp(iad+4*(n-1)+3)
494 IF(n4/=0 .AND. n1/=n2 .AND. n1/=n3 .AND. n1/=n4 .AND.
495 . n2/=n3 .AND. n2/=n4 .AND. n3/=n4 )
THEN
501 iadn = iadc(iad + 4*(n-1)+(ijk-1))
502 fsky(1:3,iadn) = zero
507 is_tabulated = npc(2*nfunct+ifunc+1)
508 IF(is_tabulated >= 0)
THEN
509 f1 = finter(ifunc,ts*fcx,npc,tf,dydx)
511 is_tabulated = -is_tabulated
512 CALL python_call_funct1d(python, is_tabulated
518 n1 = lloadp(iad+4*(n-1))
519 n2 = lloadp(iad+4*(n-1)+1)
520 n3 = lloadp(iad+4*(n-1)+2)
521 n4 = lloadp(iad+4*(n-1)+3)
523 numpresload = numpresload
526 idel = loadp_tagdel(numpresload)
540 IF(ninterp > 0 )
THEN
541 npl = loadp_hyd_inter(np)
543 segcont = tagncont(npl,n1) + tagncont(npl,n2) +
544 . tagncont(npl,n3)+tagncont(npl,n4)
545 IF(segcont >= 2 .AND.ifload==1)
THEN
547 ELSEIF(segcont <= 1.AND.ifload==2)
THEN
553 segcont = tagncont(npl,n1) + tagncont(npl,n2) +
555 IF(segcont >= 2 .AND.ifload==1)
THEN
557 ELSEIF(segcont <= 1.AND.ifload==2)
THEN
565 IF(segcont == 0)
THEN
569 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))
570 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))
571 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))
573 fx = aa*nx*one_over_8
574 fy = aa*ny*one_over_8
575 fz = aa*nz*one_over_8
576 ELSEIF(inorm==2)
THEN
577 norm = sqrt(nx*nx+ny*ny+nz*nz)
580 fx = aa*one_over_8*norm
584 fy = aa*one_over_8*norm
588 fz = aa*one_over_8*norm
594 fx = aa*one_over_8*norm*skew(1,isk)
598 fy = aa*one_over_8*norm*skew(2,isk)
602 fz = aa*one_over_8*norm*skew(3,isk)
607 ELSEIF(inorm==3)
THEN
611 fx = aa*one_over_8*nx
615 fy = aa*one_over_8*ny
619 fz = aa*one_over_8*nz
625 fx = aa*one_over_8*skew(1,isk)*nx
629 fy = aa*one_over_8*skew(2,isk)*ny
633 fz = aa*one_over_8*skew(3,isk)*nz
641 iadn = iadc(iad+4*(n-1))
645 IF(ianim >0 .AND.impl_s==0)
THEN
646 fext(1,n1) = fext(1,n1) + fx
647 fext(2,n1) = fext(2,n1) + fy
648 fext(3,n1) = fext(3,n1) + fz
653 iadn = iadc(iad+4*(n-1)+1)
657 IF(ianim >0 .AND.impl_s==0)
THEN
658 fext(1,n2) = fext(1,n2) + fx
660 fext(3,n2) = fext(3,n2) + fz
665 iadn = iadc(iad+4*(n-1)+2)
669 IF(ianim >0 .AND.impl_s==0)
THEN
671 fext(2,n3) = fext(2,n3) + fy
672 fext(3,n3) = fext(3,n3) + fz
677 iadn = iadc(iad+4*(n-1)+3)
681 IF(ianim >0 .AND.impl_s==0)
THEN
682 fext(1,n4) = fext(1,n4) + fx
683 fext(2,n4) = fext(2,n4) + fy
684 fext(3,n4) = fext(3,n4) + fz
688 IF(th_surf%LOADP_FLAG >0 )
THEN
689 area = half*sqrt(nx*nx+ny*ny+nz*nz)
690 DO ns=th_surf%LOADP_KSEGS(nsegpl) +1,th_surf%LOADP_KSEGS(nsegpl+1)
691 ksurf = th_surf%LOADP_SEGS(ns)
692 th_surf%channels(4,ksurf)= th_surf%channels(4,ksurf) + area*aa
693 th_surf%channels(5,ksurf)= th_surf%channels(5,ksurf) + area
696 wfextt=wfextt+dt1*(fx*(v(1,n1)+v(1,n2)+v(1,n3)+v(1,n4))
697 + +fy*(v(2,n1)+v(2,n2)+v(2,n3)+v(2,n4))
698 + +fz*(v(3,n1)+v(3,n2)+v(3,n3)+v(3,n4)))
703 nx = (x(2,n3)-x(2,n1))*(x(3,n3)-x(3,n2)) - (x(3,n3)-x(3,n1))*(x(2,n3)-x(2,n2))
704 ny = (x(3,n3)-x(3,n1))*(x(1,n3)-x(1,n2)) - (x(1,n3)-x(1,n1))*(x(3,n3)-x(3,n2))
705 nz = (x(1,n3)-x(1,n1))*(x(2,n3)-x(2,n2)) - (x(2,n3)-x(2,n1))*(x(1,n3)-x(1,n2))
708 fx = aa*nx*one_over_6
709 fy = aa*ny*one_over_6
710 fz = aa*nz*one_over_6
711 ELSEIF(inorm==2)
THEN
712 norm = sqrt(nx*nx+ny*ny+nz*nz)
715 fx = aa*one_over_6*norm
719 fy = aa*one_over_6*norm
723 fz = aa*one_over_6*norm
729 fx = aa*one_over_6*norm*skew(1,isk)
733 fy = aa*one_over_6*norm*skew(2,isk)
737 fz = aa*one_over_6*norm*skew(3,isk)
742 ELSEIF(inorm==3)
THEN
746 IF(nx /= zero) fx = aa*one_over_6*nx
750 IF(ny /= zero) fy = aa*one_over_6*ny
754 IF(nz /= zero) fz = aa*one_over_6*nz
760 fx = aa*one_over_6*skew(1,isk)*nx
764 fy = aa*one_over_6*skew(2,isk)*ny
768 fz = aa*one_over_6*skew(3,isk)*nz
776 iadn = iadc(iad+4*(n-1))
780 IF(ianim >0 .AND.impl_s==0)
THEN
781 fext(1,n1) = fext(1,n1) + fx
783 fext(3,n1) = fext(3,n1) + fz
788 iadn = iadc(iad+4*(n-1)+1)
792 IF(ianim >0 .AND.impl_s==0)
THEN
793 fext(1,n2) = fext(1,n2) + fx
794 fext(2,n2) = fext(2,n2) + fy
795 fext(3,n2) = fext(3,n2) + fz
800 iadn = iadc(iad+4*(n-1)+2)
804 IF(ianim >0 .AND.impl_s==0)
THEN
805 fext(1,n3) = fext(1,n3) + fx
806 fext(2,n3) = fext(2,n3) + fy
812 IF(th_surf%LOADP_FLAG >0 )
THEN
813 area = half*sqrt(nx*nx+ny*ny+nz*nz)
814 DO ns=th_surf%LOADP_KSEGS(nsegpl) +1,th_surf%LOADP_KSEGS(nsegpl+1)
815 ksurf = th_surf%LOADP_SEGS(ns)
816 th_surf%channels(4,ksurf)= th_surf%channels(4,ksurf) + area*aa
817 th_surf%channels(5,ksurf)= th_surf%channels(5,ksurf) + area
822 + + fy*(v(2,n1)+v(2,n2)+v(2,n3))
823 + + fz*(v(3,n1)+v(3,n2)+v(3,n3)))
834 wfext = wfext + wfextt