35 SUBROUTINE gravit(IGRV ,AGRV ,NPC ,TF ,A ,
36 2 V ,X ,SKEW ,MS ,SENSOR_TAB,
37 3 WEIGHT,IB ,ITASK, NSENSOR, PYTHON, WFEXT)
46#include "implicit_f.inc"
57#include "tabsiz_c.inc"
61 INTEGER,
INTENT(IN) :: ITASK
64 INTEGER IGRV(NIGRV,*),IB(*)
66 my_real agrv(lfacgrv,*), tf(*), a(3,*), v(3,*), ms(*),x(3,*), skew(lskew,*)
67 TYPE (SENSOR_STR_) ,
DIMENSION(NSENSOR) ,
INTENT(IN) :: SENSOR_TAB
68 TYPE (PYTHON_),
INTENT(IN) :: PYTHON
69 DOUBLE PRECISION,
INTENT(INOUT) :: WFEXT
73 INTEGER NL, N1, ISK, N2, IFUNC, K1, K2, K3, ISENS,K,NN, IAD,J, IADF, IADL, ISMOOTH
74 my_real AXI, A0, AA, , DYDX, TS, GAMA, WFEXTT,FCX,FCY
75 my_real finter,finter_smooth
76 EXTERNAL finter,finter_smooth
89 IF (ifunc > 0) ismooth = npc(2*nfunct
90 iadf = iad+itask*nn/nthread
91 iadl = iad-1+(itask+1)*nn/nthread
94 IF(igrv(6,nl)== sensor_tab(k)%SENS_ID) isens=k
99 ts = tt- sensor_tab(isens)%TSTART
103 IF (ismooth == 0)
THEN
104 a0 = fcy*finter(ifunc,(ts-dt1)*fcx,npc,tf,dydx)
105 gama = fcy*finter(ifunc,ts*fcx,npc,tf,dydx)
106 ELSE IF (ismooth > 0)
THEN
107 a0 = fcy*finter_smooth(ifunc,(ts-dt1)*fcx,npc,tf,dydx)
108 gama = fcy*finter_smooth(ifunc,ts*fcx,npc,tf,dydx)
111 CALL python_call_funct1d(python, ismooth,(ts-dt1)*fcx, a0)
112 CALL python_call_funct1d(python, ismooth,ts*fcx, gama)
122#include
"vectorize.inc"
127 IF(ib(j)>0)wfextt=wfextt+half*(a0+aa)*ms(n1)*v(n2,n1)*dt1*axi*weight(n1)
129 ELSEIF(n2d==1.AND.isk>1)
THEN
133#include "vectorize.inc"
137 vv = skew(k1,isk)*v(1,n1)+skew(k2,isk)*v(2,n1)+skew(k3,isk)*v(3,n1)
138 a(1,n1)=a(1,n1)+skew(k1,isk)*aa
139 a(2,n1)=a(2,n1)+skew(k2,isk)*aa
140 a(3,n1)=a(3,n1)+skew(k3,isk)*aa
141 IF(ib(j)>0)wfextt=wfextt+half*(a0+aa)*ms(n1)*vv*dt1*axi*weight(n1)
144#include "vectorize.inc"
148 IF(ib(j)>0)wfextt=wfextt+half*(a0+aa)*ms(n1)*v(n2,n1)*dt1*weight(n1)
154#include "vectorize.inc"
157 vv = skew(k1,isk)*v(1,n1)+skew(k2,isk)*v(2,n1)+ skew(k3,isk)*v(3,n1)
158 a(1,n1)=a(1,n1)+skew(k1,isk)*aa
159 a(2,n1)=a(2,n1)+skew(k2,isk)*aa
160 a(3,n1)=a(3,n1)+skew(k3,isk)*aa
161 IF(ib(j)>0)wfextt=wfextt+half*(a0+aa)*ms(n1)*vv*dt1*weight(n1)
169 wfext = wfext + wfextt
subroutine gravit(igrv, agrv, npc, tf, a, v, x, skew, ms, sensor_tab, weight, ib, itask, nsensor, python, wfext)