40
41
42
43 USE nodal_arrays_mod
44 USE python_funct_mod
45 use python_call_funct_cload_mod
47 USE sensor_mod
48
49
50
51#include "implicit_f.inc"
52#include "param_c.inc"
53
54
55
56#include "com01_c.inc"
57#include "com04_c.inc"
58#include "com06_c.inc"
59#include "com08_c.inc"
60#include "impl1_c.inc"
61#include "scr14_c.inc"
62#include "scr16_c.inc"
63#include "parit_c.inc"
64
65
66
68 EXTERNAL finter,finter_smooth
69
70
71
72 TYPE(NODAL_ARRAYS_) :: NODES
73 TYPE(PYTHON_), INTENT(inout) :: PYTHON
74 INTEGER ,INTENT(IN) :: NSENSOR
75 INTEGER IBFV(NIFV,*), NPC(*)
76 INTEGER ITABM1(*)
77 my_real tf(*), a(3,*), v(3,*), x(3,*),
78 . vel(lfxvelr,*),fsky(8,lsky),fext(3,*)
79 TYPE(H3D_DATABASE) :: H3D_DATA
80 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) :: SENSOR_TAB
81 DOUBLE PRECISION,INTENT(INOUT) :: WFEXT
82
83
84
85 INTEGER N, N1, N2, K
86 INTEGER NCUR, NCUR_OLD, ISENS, ISMOOTH
88 . axi, aa, a0, vv, dydx, ts, ts_old,
89 . startt, stopt, facx, facy, f1, f2,
90 . xa, ya, za, xf, yf, zf,
91 . fac, skew1, skew2, skew3, wfextt
92
93 wfextt = zero
94 ts_old = zero
95 ncur_old = 0
96
97
98
99 DO n=1,nfxvel
100 IF (ibfv(13,n) /= 2) cycle
101 ncur = ibfv(15,n)
102 IF (ncur == 0) cycle
103 startt = vel(2,n)
104 stopt = vel(3,n)
105 IF(tt<startt) cycle
106 IF(tt>stopt ) cycle
107 n1 = iabs(ibfv(1,n))
108 n2 = ibfv(14,n)
109
110 facx = vel(5,n)
111 facy = vel(8,n)
112
113 isens=0
114 DO k=1,nsensor
115 IF(ibfv(4,n)==sensor_tab(k)%SENS_ID) isens=k
116 ENDDO
117 IF(isens==0)THEN
118 ts=tt
119 ELSE
120 ts = tt-sensor_tab(isens)%TSTART
121 IF(ts < zero) cycle
122 ENDIF
123
124 IF(ncur_old/=ncur.OR.ts_old/=ts) THEN
125
126
127 ismooth = 0
128 IF (ncur > 0) ismooth = npc(2*nfunct+ncur+1)
129 IF (ismooth == 0) THEN
130 f1 = finter(ncur,(ts-dt1)*facx,npc,tf,dydx)
131 f2 = finter(ncur,ts*facx,npc,tf,dydx)
132 ELSE IF(ismooth > 0) THEN
133 f1 = finter_smooth(ncur,(ts-dt1)*facx,npc,tf,dydx)
134 f2 = finter_smooth(ncur,ts*facx,npc,tf,dydx)
135 ELSE IF(ismooth < 0) THEN
136 CALL python_call_funct_cload(python, -ismooth,ts-dt1, f1,n1,nodes)
137 CALL python_call_funct_cload(python, -ismooth,ts, f2,n2,nodes)
138 ENDIF
139 ncur_old = ncur
140 ts_old = ts
141 ENDIF
142
143 a0 = facy*f1
144 aa = facy*f2
145
146 IF(n2d/=1)THEN
147 axi=one
148 ELSE
149 axi=x(2,n2)
150 ENDIF
151
152 xa = x(1,n1)
153 ya = x(2,n1)
154 za = x(3,n1)
155 xf = x(1,n2)
156 yf = x(2,n2)
157 zf = x(3,n2)
158 fac= sqrt((xf-xa)**2+(yf-ya)**2+(zf-za)**2)
159 IF(fac < vel(7,n)) cycle
160 skew1= (xf-xa)/fac
161 skew2= (yf-ya)/fac
162 skew3= (zf-za)/fac
163 vv = skew1*v(1,n2)+skew2*v(2,n2)+skew3*v(3,n2)
164 a(1,n2) = a(1,n2)+skew1*aa
165 a(2,n2) = a(2,n2)+skew2*aa
166 a(3,n2) = a(3,n2)+skew3*aa
167
168 IF( anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+
169 . anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT > 0
170 . .AND.impl_s==0) THEN
171 fext(1,n2) = fext(1,n2)+skew1*aa
172 fext(2,n2) = fext(2,n2)+skew2*aa
173 fext(3,n2) = fext(3,n2)+skew3*aa
174 ENDIF
175 wfextt = wfextt + dt1*half*(a0+aa)*vv*axi
176 ENDDO
177
178
179 wfext = wfext + wfextt
180
181 RETURN