39
40
41
42 USE python_funct_mod
43 USE sensor_mod
45
46
47
48#include "implicit_f.inc"
49#include "comlock.inc"
50
51
52
53#include "com01_c.inc"
54#include "com04_c.inc"
55#include "com06_c.inc"
56#include "com08_c.inc"
57#include "task_c.inc"
58#include "param_c.inc"
59#include "tabsiz_c.inc"
60
61
62
63 INTEGER ,INTENT(IN) :: NSENSOR
64 INTEGER, INTENT(IN) :: NALE(ALE%GLOBAL%SNALE)
65 INTEGER NPC(*)
66 INTEGER IGRV(NIGRV,*),IB(*)
67 INTEGER WEIGHT(*), ITASK
68 my_real agrv(lfacgrv,*), tf(*), a(3,*), v(3,*), ms(*), x(3,*), skew(lskew,*)
69 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) ,INTENT(IN) :: SENSOR_TAB
70 TYPE (PYTHON_), INTENT(INOUT) :: PYTHON
71 DOUBLE PRECISION,INTENT(INOUT) :: WFEXT
72
73
74
75 INTEGER NL, N1, ISK, N2, IFUNC, K1, K2, K3, ISENS,K,NN, IAD,J, IADF, IADL,
76 my_real axi, a0, aa, vv, dydx, ts, gama, wfextt,fcx,fcy
77 my_real,
EXTERNAL :: finter,finter_smooth
78
79
80
81 wfextt=zero
82
91 iadf = iad+itask*nn/nthread
92 iadl = iad-1+(itask+1)*nn/nthread
93 ismooth = 0
94 IF (ifunc > 0) ismooth = npc(2*nfunct+ifunc+1)
95
96 isens=0
97 DO k=1,nsensor
98 IF(igrv(6,
nl)== sensor_tab(k)%SENS_ID) isens=k
99 ENDDO
100 IF(isens==0)THEN
101 ts=tt
102 ELSE
103 ts = tt- sensor_tab(isens)%TSTART
104 IF(ts<0.0)cycle
105 ENDIF
106
107 IF (ifunc > 0) THEN
108 IF (ismooth == 0) THEN
109 a0 = fcy*finter(ifunc,(ts-dt1)*fcx,npc,tf,dydx)
110 gama = fcy*finter(ifunc,ts*fcx,npc,tf,dydx)
111 ELSE IF(ismooth > 0) THEN
112 a0 = fcy*finter_smooth(ifunc,(ts-dt1)*fcx,npc,tf,dydx)
113 gama = fcy*finter_smooth(ifunc,ts*fcx,npc,tf,dydx)
114 ELSE
115 ismooth = -ismooth
116 CALL python_call_funct1d(python, ismooth,(ts-dt1)*fcx, a0)
117 CALL python_call_funct1d(python, ismooth,ts*fcx, gama)
118 ENDIF
119 ELSE
120 a0 = fcy
121 gama = fcy
122 ENDIF
123
124 aa = gama
125 IF(n2d==1.AND.isk<=1)THEN
126#include "vectorize.inc"
127 DO j=iadf,iadl
128 n1=iabs(ib(j))
129 axi=x(2,n1)
130 a(n2,n1)=a(n2,n1)+aa
131 IF(ib(j)>0 .AND. nale(n1)/=-1)wfextt=wfextt+half*(a0+aa)*ms(n1)*v(n2,n1)*dt1*axi
132 ENDDO
133 ELSEIF(n2d==1.AND.isk>1)THEN
134 k1=3*n2-2
135 k2=3*n2-1
136 k3=3*n2
137#include "vectorize.inc"
138 DO j=iadf,iadl
139 n1=iabs(ib(j))
140 axi=x(2,n1)
141 vv = skew(k1,isk)*v(1,n1)+skew(k2,isk)*v(2,n1)+skew
142 a(1,n1)=a(1,n1)+skew(k1,isk)*aa
143 a(2,n1)=a(2,n1)+skew(k2,isk)*aa
144 a(3,n1)=a(3,n1)+skew(k3,isk)*aa
145 IF(ib(j)>0 .AND. nale(n1)/=-1)wfextt=wfextt+half*(a0+aa)*ms(n1)*vv
146 ENDDO
147 ELSEIF(isk<=1)THEN
148#include "vectorize.inc"
149 DO j=iadf,iadl
150 n1=iabs(ib(j))
151 a(n2,n1)=a(n2,n1)+aa
152 IF(ib(j)>0 .AND. nale(n1)/=-1)wfextt=wfextt+half*(a0+aa)*ms(n1)*v(n2,n1
153 ENDDO
154 ELSE
155 k1=3*n2-2
156 k2=3*n2-1
157 k3=3*n2
158#include "vectorize.inc"
159 DO j=iadf,iadl
160 n1=iabs(ib(j))
161 vv = skew(k1,isk)*v(1,n1)+skew(k2,isk)*v(2,n1)+skew(k3,isk)*v
162 a(1,n1)=a(1,n1)+skew(k1,isk)*aa
163 a(2,n1)=a(2,n1)+skew(k2,isk)*aa
164 a(3,n1)=a(3,n1)+skew(k3,isk)*aa
165 IF(ib(j)>0 .AND. nale(n1)/=-1)wfextt=wfextt+half*(a0+aa)*ms(n1)*vv*dt1*weight(n1)
166 ENDDO
167 ENDIF
168
170
171 END DO
172
173
174 wfext = wfext + wfextt
175
176 RETURN
character *2 function nl()