35 3 NPF, ANIM, IANI, FR_WAVE,
36 4 DMN, DMX, IGEO, GEO,
37 5 PID, DV0, ALPHA, NEL,
43#include "implicit_f.inc"
52 type(python_),
intent(inout) :: python
53 INTEGER,
INTENT(IN) :: NEL
54 INTEGER,
INTENT(IN) :: NFT
55 INTEGER,
INTENT(INOUT) :: IAD
57 INTEGER NPF(*),IGEO(NPROPGI,*),PID(*)
60 . geo(npropg,*),fx(*),xk(*),dx(*),dxold(*),tf(*),xl0(*),e(*),
61 . off(*), dmn(*), dmx(*), anim(*),fr_wave(*),dv0(*),
71 INTEGER FUNC1(MVSIZ), FUNC2(MVSIZ),NFUNC(MVSIZ),NFUND(MVSIZ)
74 . DDX(MVSIZ),FOLD(MVSIZ),DVX(MVSIZ),DV(MVSIZ),DL(MVSIZ),
75 . RATE1(MVSIZ),RATE2(MVSIZ),YFAC1(MVSIZ), YFAC2(MVSIZ),
76 . fmin(mvsiz),fmax(mvsiz),xfac(mvsiz)
78 . df1,df2,y1,y2,vel,fac,damp,damm,dt11
79 INTEGER :: NFUNCT, PYID
86 nfunct = python%funct_offset + python%nb_functs - python%nb_sensors
88 IF (dt11 == zero) dt11 = ep30
92 dxold(i)=dxold(i)/xl0(i)
97 ddx(i)= (dx(i)-dxold(i))
109 dv(i) = (one-
alpha(i))*dv0(i) +
alpha(i)*dv(i)
116 damp=dx(i)/
max(dmx(i),em15)
117 damm=dx(i)/
min(dmn(i),-em15)
118 anim(j)=
max(anim(j),damp,damm)
119 anim(j)=
min(anim(j),one)
124 IF (off(i) == one)
THEN
125 IF (dx(i) >= zero)
THEN
128 fx(i) = fold(i) + xk(i)*ddx(i)
132 nfunc(i) = igeo(20,pid(i))
133 xfac(i) = geo(5,pid(i))
136 vel = geo(iad+100+j,pid(i))
137 IF (dv(i) >= vel) j1 = j
139 func1(i) = igeo(iad+j1,pid(i))
140 rate1(i) = geo(iad+100+j1,pid(i))
141 yfac1(i) = geo(iad+200+j1,pid(i))
142 pyid = python_funct_id(nfunct,func1(i),npf)
143 IF(pyid > 0) func1(i) = -pyid
145 IF (nfunc(i) > 1)
THEN
147 func2(i) = igeo(iad+j2,pid(i))
149 yfac2(i) = geo(iad+200+j2,pid(i))
150 pyid = python_funct_id(nfunct,func2(i),npf)
151 IF(pyid > 0) func2(i) = -pyid
153 IF(func1(i) >= 0)
THEN
154 y1 = yfac1(i)*finter(func1(i),dl(i)/xfac(i),npf,tf,df1)
156 CALL python_call_funct1d(python, -func1(i),dl(i),y1)
159 IF(func2(i) >= 0)
THEN
160 y2 = yfac2(i)*finter(func2(i),dl(i)/xfac(i),npf,tf,df2)
162 CALL python_call_funct1d(python, -func2(i),dl(i),y2)
166 fac = (dv(i) - rate1(i))/(rate2(i) - rate1(i))
167 fmax(i) = -
max(y1 + fac*(y2 - y1), em20)
169 IF(func1(i) >= 0)
THEN
170 fmax(i) = -yfac1(i)*finter(func1(i),dl(i)/xfac(i),npf,tf,df1)
172 CALL python_call_funct1d(python, -func1(i),dl(i),fmax(i))
173 fmax(i) = -fmax(i)*yfac1(i)
178 nfund(i) = igeo(21,pid(i))
180 vel = geo(iad+100+j,pid(i))
181 IF (dv(i) >= vel) j1 = nfunc(i) + j
183 func1(i) = igeo(iad+j1,pid(i))
184 pyid = python_funct_id(nfunct,func1(i),npf)
185 IF(pyid > 0) func1(i) = -pyid
187 rate1(i) = geo(iad+100+j1,pid(i))
188 yfac1(i) = geo(iad+200+j1,pid(i))
190 IF (nfund(i) > 1)
THEN
192 func2(i) = igeo(iad+j2,pid(i))
193 pyid = python_funct_id(nfunct,func2(i),npf)
194 IF(pyid > 0) func2(i) = -pyid
195 rate2(i) = geo(iad+100+j2,pid(i))
196 yfac2(i) = geo(iad+200+j2,pid(i))
198 IF(func1(i) >= 0)
THEN
199 y1 = yfac1(i)*finter(func1(i),dl(i)/xfac(i),npf,tf,df1)
201 CALL python_call_funct1d(python, -func1(i),dl(i),y1)
204 IF(func1(i) >= 0)
THEN
205 y2 = yfac2(i)*finter(func2(i),dl(i)/xfac(i),npf,tf,df2)
207 CALL python_call_funct1d(python, -func2(i),dl(i),y2)
210 fac = (dv(i) - rate1(i))/(rate2(i) - rate1(i))
212 fmin(i) = -
max(y1 + fac*(y2 - y1), em20)
214 IF(func1(i) >= 0)
THEN
215 fmin(i) = -yfac1(i)*finter(func1(i),dl(i)/xfac(i),npf,tf,df1)
217 CALL python_call_funct1d(python, -func1(i),dl(i),fmin(i))
218 fmin(i) = -fmin(i)*yfac1(i)
222 IF (dx(i) < zero)
THEN
223 IF (fx(i) > fmin(i))
THEN
225 ELSEIF (fx(i) < fmax(i) )
THEN
235 IF (abs(ddx(i)) > zero) xk(i) = abs(fx(i)-fold(i))/abs(ddx(i))
236 e(i) = e(i) + (dx(i)-dxold(i)) * (fx(i)+fold(i)) * half
239 dxold( i)=dxold(i)*xl0(i)
subroutine r26sig(python, fx, xk, dx, dxold, e, off, xl0, tf, npf, anim, iani, fr_wave, dmn, dmx, igeo, geo, pid, dv0, alpha, nel, nft, iad)