35 SUBROUTINE cfield_1(PYTHON, ICFIELD ,FAC ,NPC ,TF ,A ,
36 2 V ,X ,XFRAME ,MS,SENSOR_TAB,
37 3 WEIGHT,IB,ITASK,IFRAME,NSENSOR,WFEXT)
46#include "implicit_f.inc"
59 TYPE(python_),
INTENT(INOUT) :: PYTHON
60 INTEGER ,
INTENT(IN) :: NSENSOR
62 INTEGER ICFIELD(SIZFIELD,*),IB(*),IFRAME(LISKN,*)
63 INTEGER WEIGHT(*),ITASK
64 my_real fac(lfacload,*), tf(*), a(3,*), v(3,*), ms(*),x(3,*), xframe(nxframe,*)
65 TYPE (SENSOR_STR_) ,
DIMENSION(NSENSOR) ,
INTENT(IN) :: SENSOR_TAB
66 DOUBLE PRECISION,
INTENT(INOUT) :: WFEXT
70 INTEGER NL, N1, IFRA, N2, IFUNC, K1, K2, K3, ISENS,K,NN,IAD, J, PROC, IADF, IADL,IDIR
71INTEGER :: IS_TABULATED
72 my_real nx, ny, nz, axi, a0, aa, vv, fx, fy, fz, ax, dydx, ts,
73 . gama, ma, vrot, x0, y0, z0, x1, y1, z1, x2, y2, z2, dwdt,
74 . wfextt,vmx,vmy,vmz,vrot2
75 my_real dist(3),arel(3),vn1fram(3),an1fram(3),dw(3)
88 iadf = iad+itask*nn/nthread
89 iadl = iad-1+(itask+1)*nn/nthread
92 IF(ifra /= 0) n1fram = iframe(1,ifra+1)
95 vn1fram(1) = v(1,n1fram)
96 vn1fram(2) = v(2,n1fram)
97 vn1fram(3) = v(3,n1fram)
98 an1fram(1) = a(1,n1fram)
99 an1fram(2) = a(2,n1fram)
100 an1fram(3) = a(3,n1fram)
111 isens = icfield(6,nl)
115 ts = tt-sensor_tab(isens)%TSTART
119 is_tabulated = npc(2*nfunct+ifunc+1)
120 IF(is_tabulated >= 0)
THEN
121 vrot = fac(1,nl)*finter(ifunc,ts*fac(2,nl),npc,tf,dydx)
123 is_tabulated = -is_tabulated
124 CALL python_call_funct1d(python, is_tabulated,ts*fac(2,nl), vrot)
125 vrot = vrot * fac(1,nl)
129 x0 = xframe(10,ifra+1)
130 y0 = xframe(11,ifra+1)
131 z0 = xframe(12,ifra+1)
133 x2 = xframe(1,ifra+1)
134 y2 = xframe(2,ifra+1)
135 z2 = xframe(3,ifra+1)
136 ELSEIF(idir == 5)
THEN
137 x2 = xframe(4,ifra+1)
138 y2 = xframe(5,ifra+1)
139 z2 = xframe(6,ifra+1)
141 x2 = xframe(7,ifra+1)
142 y2 = xframe(8,ifra+1)
143 z2 = xframe(9,ifra+1)
146 IF (iflag == 2 .AND. imovfram == 1)
THEN
147 dwdt = fac(1,nl)*dydx
148#include "vectorize.inc"
154 dist(1)=x1-(x1*x2+y1*y2+z1*z2)*x2
155 dist(2)=y1-(x1*x2+y1*y2+z1*z2)*y2
156 dist(3)=z1-(x1*x2+y1*y2+z1*z2)*z2
160 arel(1) = dist(1)*vrot2 + dw(2) * dist(3) - dw(3) * dist(2)
161 arel(2) = dist(2)*vrot2 + dw(3) * dist(1) - dw(1) * dist(3)
162 arel(3) = dist(3)*vrot2 + dw(1) * dist(2) - dw(2) * dist(1)
163 CALL relfram_m1(x(1,n1) ,v(1,n1), arel , xframe(1,ifra+1), vn1fram , an1fram )
164 a(1,n1)=a(1,n1)+arel(1)
165 a(2,n1)=a(2,n1)+arel(2)
166 a(3,n1)=a(3,n1)+arel(3)
168 vmx=v(1,n1)+half*dt2*a(1,n1)
169 vmy=v(2,n1)+half*dt2*a(2,n1)
170 vmz=v(3,n1)+half*dt2*a(3,n1)
171 wfextt=wfextt + ms(n1)*(arel(1)*vmx+arel(2)*vmy+arel(3)*vmz)*dt12*weight(n1)
174 ELSEIF(iflag == 2)
THEN
175 dwdt = fac(1,nl)*dydx
176#include "vectorize.inc"
182 dist(1)=x1-(x1*x2+y1*y2+z1*z2)*x2
183 dist(2)=y1-(x1*x2+y1*y2+z1*z2)*y2
184 dist(3)=z1-(x1*x2+y1*y2+z1*z2)*z2
188 arel(1) = dist(1)*vrot2 + dw(2) * dist(3) - dw(3) * dist(2)
189 arel(2) = dist(2)*vrot2 + dw(3) * dist(1) - dw(1) * dist(3)
190 arel(3) = dist(3)*vrot2 + dw(1) * dist(2) - dw(2) * dist(1)
191 a(1,n1)=a(1,n1)+arel(1)
192 a(2,n1)=a(2,n1)+arel(2)
193 a(3,n1)=a(3,n1)+arel(3)
195 vmx=v(1,n1)+half*dt2*a(1,n1)
196 vmy=v(2,n1)+half*dt2*a(2,n1)
197 vmz=v(3,n1)+half*dt2*a(3,n1)
198 wfextt=wfextt+ms(n1)*(arel(1)*vmx+arel(2)*vmy+arel(3)*vmz)*dt12*weight(n1)
201 ELSEIF(imovfram == 1)
THEN
202#include "vectorize.inc"
208 dist(1)=x1-(x1*x2+y1*y2+z1*z2)*x2
209 dist(2)=y1-(x1*x2+y1*y2+z1*z2)*y2
210 dist(3)=z1-(x1*x2+y1*y2+z1*z2)*z2
211 arel(1) = dist(1)*vrot2
212 arel(2) = dist(2)*vrot2
213 arel(3) = dist(3)*vrot2
214 CALL relfram_m1(x(1,n1) ,v(1,n1), arel , xframe(1,ifra+1),vn1fram , an1fram )
215 a(1,n1)=a(1,n1)+arel(1)
216 a(2,n1)=a(2,n1)+arel(2)
217 a(3,n1)=a(3,n1)+arel(3)
219 vmx=v(1,n1)+half*dt2*a(1,n1)
220 vmy=v(2,n1)+half*dt2*a(2,n1)
221 vmz=v(3,n1)+half*dt2*a(3,n1)
222 wfextt=wfextt+ms(n1)*(arel(1)*vmx+arel(2)*vmy+arel(3)*vmz)*dt12*weight(n1)
226#include "vectorize.inc"
232 dist(1)=x1-(x1*x2+y1*y2+z1*z2)*x2
233 dist(2)=y1-(x1*x2+y1*y2+z1*z2)*y2
234 dist(3)=z1-(x1*x2+y1*y2+z1*z2)*z2
235 arel(1) = dist(1)*vrot2
236 arel(2) = dist(2)*vrot2
237 arel(3) = dist(3)*vrot2
238 a(1,n1)=a(1,n1)+arel(1)
239 a(2,n1)=a(2,n1)+arel(2)
240 a(3,n1)=a(3,n1)+arel(3)
242 vmx=v(1,n1)+half*dt2*a(1,n1)
243 vmy=v(2,n1)+half*dt2*a(2,n1)
244 vmz=v(3,n1)+half*dt2*a(3,n1)
245 wfextt=wfextt +ms(n1)*(arel(1)*vmx+arel(2)*vmy+arel(3)*vmz)*dt12*weight(n1)
255 wfext = wfext + wfextt