OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
r26sig.F File Reference
#include "implicit_f.inc"
#include "param_c.inc"
#include "mvsiz_p.inc"
#include "com08_c.inc"

Go to the source code of this file.

Functions/Subroutines

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)

Function/Subroutine Documentation

◆ r26sig()

subroutine r26sig ( type(python_), intent(inout) python,
fx,
xk,
dx,
dxold,
e,
off,
xl0,
tf,
integer, dimension(*) npf,
anim,
integer iani,
fr_wave,
dmn,
dmx,
integer, dimension(npropgi,*) igeo,
geo,
integer, dimension(*) pid,
dv0,
alpha,
integer, intent(in) nel,
integer, intent(in) nft,
integer, intent(inout) iad )

Definition at line 32 of file r26sig.F.

39 use python_funct_mod
40C-----------------------------------------------
41C I m p l i c i t T y p e s
42C-----------------------------------------------
43#include "implicit_f.inc"
44C-----------------------------------------------
45C G l o b a l P a r a m e t e r s
46C-----------------------------------------------
47#include "param_c.inc"
48#include "mvsiz_p.inc"
49C-----------------------------------------------
50C D u m m y A r g u m e n t s
51C-----------------------------------------------
52 type(python_), intent(inout) :: python
53 INTEGER, INTENT(IN) :: NEL
54 INTEGER, INTENT(IN) :: NFT
55 INTEGER, INTENT(INOUT) :: IAD
56 INTEGER IANI
57 INTEGER NPF(*),IGEO(NPROPGI,*),PID(*)
58C REAL
60 . geo(npropg,*),fx(*),xk(*),dx(*),dxold(*),tf(*),xl0(*),e(*),
61 . off(*), dmn(*), dmx(*), anim(*),fr_wave(*),dv0(*),
62 . alpha(*)
63C-----------------------------------------------
64C C o m m o n B l o c k s
65C-----------------------------------------------
66#include "com08_c.inc"
67C-----------------------------------------------
68C L o c a l V a r i a b l e s
69C-----------------------------------------------
70 INTEGER I, J, J1, J2
71 INTEGER FUNC1(MVSIZ), FUNC2(MVSIZ),NFUNC(MVSIZ),NFUND(MVSIZ)
72C REAL
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
80C-----------------------------------------------
81C E x t e r n a l
82C-----------------------------------------------
84 . finter
85C=======================================================================
86 nfunct = python%funct_offset + python%nb_functs - python%nb_sensors! total number of functions = non-python + python
87 dt11 = dt1
88 IF (dt11 == zero) dt11 = ep30
89 DO i=1,nel
90 e(i) =e(i)/xl0(i)
91 dx(i) =dx(i)/xl0(i)
92 dxold(i)=dxold(i)/xl0(i)
93 ENDDO
94C
95 DO i=1,nel
96 fold(i)=fx(i)
97 ddx(i)= (dx(i)-dxold(i))
98 dvx(i)= ddx(i)/ dt11
99 dv(i) = abs(dvx(i))
100 dl(i) = abs(dx(i))
101 ENDDO
102 IF (tt == zero) THEN
103 DO i=1,nel
104 dv0(i) = dv(i)
105 ENDDO
106 ENDIF
107c filtrage des vitesses
108 DO i=1,nel
109 dv(i) = (one-alpha(i))*dv0(i) + alpha(i)*dv(i)
110 dv0(i) = dv(i)
111 ENDDO
112C
113 IF(iani/=0)THEN
114 DO i=1,nel
115 j =i+nft
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)
120 ENDDO
121 ENDIF
122C-------------------------------------
123 DO i=1,nel
124 IF (off(i) == one) THEN
125 IF (dx(i) >= zero) THEN
126 fx(i) = xk(i)*dx(i)
127 ELSE
128 fx(i) = fold(i) + xk(i)*ddx(i)
129 ENDIF
130 iad = 100
131C calcul du y_max
132 nfunc(i) = igeo(20,pid(i))
133 xfac(i) = geo(5,pid(i))
134 j1 = 1
135 DO j=2,nfunc(i)-1
136 vel = geo(iad+100+j,pid(i))
137 IF (dv(i) >= vel) j1 = j
138 ENDDO
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
144
145 IF (nfunc(i) > 1)THEN
146 j2 = j1+1
147 func2(i) = igeo(iad+j2,pid(i))
148 rate2(i) = geo(iad+100+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
152C
153 IF(func1(i) >= 0) THEN
154 y1 = yfac1(i)*finter(func1(i),dl(i)/xfac(i),npf,tf,df1)
155 ELSE ! python
156 CALL python_call_funct1d(python, -func1(i),dl(i),y1)
157 y1 = y1*yfac1(i)
158 ENDIF
159 IF(func2(i) >= 0) THEN
160 y2 = yfac2(i)*finter(func2(i),dl(i)/xfac(i),npf,tf,df2)
161 ELSE ! python
162 CALL python_call_funct1d(python, -func2(i),dl(i),y2)
163 y2 = y2*yfac2(i)
164 ENDIF
165C
166 fac = (dv(i) - rate1(i))/(rate2(i) - rate1(i))
167 fmax(i) = -max(y1 + fac*(y2 - y1), em20)
168 ELSE
169 IF(func1(i) >= 0) THEN
170 fmax(i) = -yfac1(i)*finter(func1(i),dl(i)/xfac(i),npf,tf,df1)
171 ELSE ! python
172 CALL python_call_funct1d(python, -func1(i),dl(i),fmax(i))
173 fmax(i) = -fmax(i)*yfac1(i)
174 ENDIF
175 ENDIF
176C calcul du y_min
177 j1 = nfunc(i) + 1
178 nfund(i) = igeo(21,pid(i))
179 DO j=2,nfund(i)-1
180 vel = geo(iad+100+j,pid(i))
181 IF (dv(i) >= vel) j1 = nfunc(i) + j
182 ENDDO
183 func1(i) = igeo(iad+j1,pid(i))
184 pyid = python_funct_id(nfunct,func1(i),npf)
185 IF(pyid > 0) func1(i) = -pyid
186
187 rate1(i) = geo(iad+100+j1,pid(i))
188 yfac1(i) = geo(iad+200+j1,pid(i))
189C
190 IF (nfund(i) > 1) THEN
191 j2 = j1+1
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))
197C
198 IF(func1(i) >= 0) THEN
199 y1 = yfac1(i)*finter(func1(i),dl(i)/xfac(i),npf,tf,df1)
200 ELSE ! python
201 CALL python_call_funct1d(python, -func1(i),dl(i),y1)
202 y1 = y1*yfac1(i)
203 ENDIF
204 IF(func1(i) >= 0) THEN
205 y2 = yfac2(i)*finter(func2(i),dl(i)/xfac(i),npf,tf,df2)
206 ELSE ! python
207 CALL python_call_funct1d(python, -func2(i),dl(i),y2)
208 y2 = y2*yfac2(i)
209 ENDIF
210 fac = (dv(i) - rate1(i))/(rate2(i) - rate1(i))
211c FMIN(I) = -MAX(Y2 + FAC*(Y1-Y2), EM20)
212 fmin(i) = -max(y1 + fac*(y2 - y1), em20)
213 ELSE
214 IF(func1(i) >= 0) THEN
215 fmin(i) = -yfac1(i)*finter(func1(i),dl(i)/xfac(i),npf,tf,df1)
216 ELSE ! python
217 CALL python_call_funct1d(python, -func1(i),dl(i),fmin(i))
218 fmin(i) = -fmin(i)*yfac1(i)
219 ENDIF
220 ENDIF
221C--------------
222 IF (dx(i) < zero) THEN
223 IF (fx(i) > fmin(i)) THEN
224 fx(i) = fmin(i)
225 ELSEIF (fx(i) < fmax(i) )THEN
226 fx(i) = fmax(i)
227 ENDIF
228 ENDIF
229 ELSE
230 fx(i) = zero
231 ENDIF
232 ENDDO
233C--------------
234 DO i=1,nel
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
237 e(i) = e(i)*xl0(i)
238 dx(i)= dx(i)*xl0(i)
239 dxold( i)=dxold(i)*xl0(i)
240 ENDDO
241C---
242 RETURN
#define my_real
Definition cppsort.cpp:32
#define alpha
Definition eval.h:35
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21