OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
finter.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23#include "my_real.inc"
24!||====================================================================
25!|| finter ../engine/source/tools/curve/finter.F
26!||--- called by ------------------------------------------------------
27!|| alefvm_grav_init ../engine/source/ale/alefvm/alefvm_grav_init.F
28!|| cfield_1 ../engine/source/loads/general/load_centri/cfield.F
29!|| cfield_imp ../engine/source/loads/general/load_centri/cfield_imp.F
30!|| cmain3 ../engine/source/materials/mat_share/cmain3.F
31!|| cmain3pinch ../engine/source/elements/shell/coqueba/cmain3pinch.F
32!|| convec ../engine/source/constraints/thermic/convec.f
33!|| daasolv ../engine/source/fluid/daasolv.F
34!|| daasolvp ../engine/source/fluid/daasolvp.F
35!|| dam_fld_sol ../engine/source/output/h3d/h3d_results/h3d_sol_skin_scalar.F
36!|| ebcs11 ../engine/source/boundary_conditions/ebcs/ebcs11.F90
37!|| fail_biquad_b ../engine/source/materials/fail/biquad/fail_biquad_b.F
38!|| fail_biquad_c ../engine/source/materials/fail/biquad/fail_biquad_c.F
39!|| fail_biquad_ib ../engine/source/materials/fail/biquad/fail_biquad_ib.F
40!|| fail_biquad_s ../engine/source/materials/fail/biquad/fail_biquad_s.F
41!|| fail_connect ../engine/source/materials/fail/connect/fail_connect.F
42!|| fail_energy_b ../engine/source/materials/fail/energy/fail_energy_b.F
43!|| fail_energy_c ../engine/source/materials/fail/energy/fail_energy_c.F
44!|| fail_energy_ib ../engine/source/materials/fail/energy/fail_energy_ib.F
45!|| fail_energy_s ../engine/source/materials/fail/energy/fail_energy_s.F
46!|| fail_fabric_c ../engine/source/materials/fail/fabric/fail_fabric_c.F
47!|| fail_fld_c ../engine/source/materials/fail/fld/fail_fld_c.f
48!|| fail_fld_tsh ../engine/source/materials/fail/fld/fail_fld_tsh.F
49!|| fail_fld_xfem ../engine/source/materials/fail/fld/fail_fld_xfem.F
50!|| fail_gene1_b ../engine/source/materials/fail/gene1/fail_gene1_b.F90
51!|| fail_gene1_c ../engine/source/materials/fail/gene1/fail_gene1_c.F
52!|| fail_gene1_ib ../engine/source/materials/fail/gene1/fail_gene1_ib.F90
53!|| fail_gene1_s ../engine/source/materials/fail/gene1/fail_gene1_s.F
54!|| fail_nxt_c ../engine/source/materials/fail/nxt/fail_nxt_c.F
55!|| fail_orthbiquad_c ../engine/source/materials/fail/orthbiquad/fail_orthbiquad_c.F
56!|| fail_orthbiquad_s ../engine/source/materials/fail/orthbiquad/fail_orthbiquad_s.F
57!|| fail_orthstrain ../engine/source/materials/fail/orthstrain/fail_orthstrain_s.F
58!|| fail_orthstrain_c ../engine/source/materials/fail/orthstrain/fail_orthstrain_c.F
59!|| fail_sahraei_s ../engine/source/materials/fail/sahraei/fail_sahraei_s.F
60!|| fail_snconnect ../engine/source/materials/fail/snconnect/fail_snconnect.F
61!|| fail_syazwan_c ../engine/source/materials/fail/syazwan/fail_syazwan_c.F
62!|| fail_syazwan_s ../engine/source/materials/fail/syazwan/fail_syazwan_s.F
63!|| fail_tab2_b ../engine/source/materials/fail/tabulated/fail_tab2_b.F90
64!|| fail_tab2_c ../engine/source/materials/fail/tabulated/fail_tab2_c.F
65!|| fail_tab2_ib ../engine/source/materials/fail/tabulated/fail_tab2_ib.F90
66!|| fail_tab2_s ../engine/source/materials/fail/tabulated/fail_tab2_s.F
67!|| fail_tab_c ../engine/source/materials/fail/tabulated/fail_tab_c.F
68!|| fail_tab_old_c ../engine/source/materials/fail/tabulated/fail_tab_old_c.F
69!|| fail_tab_old_s ../engine/source/materials/fail/tabulated/fail_tab_old_s.F
70!|| fail_tab_old_xfem ../engine/source/materials/fail/tabulated/fail_tab_old_xfem.F
71!|| fail_tab_s ../engine/source/materials/fail/tabulated/fail_tab_s.F
72!|| fail_tab_xfem ../engine/source/materials/fail/tabulated/fail_tab_xfem.F
73!|| fail_tensstrain_b ../engine/source/materials/fail/tensstrain/fail_tensstrain_b.F
74!|| fail_tensstrain_c ../engine/source/materials/fail/tensstrain/fail_tensstrain_c.F
75!|| fail_tensstrain_ib ../engine/source/materials/fail/tensstrain/fail_tensstrain_ib.F
76!|| fail_tensstrain_s ../engine/source/materials/fail/tensstrain/fail_tensstrain_s.F
77!|| fail_visual_b ../engine/source/materials/fail/visual/fail_visual_b.F90
78!|| fail_visual_ib ../engine/source/materials/fail/visual/fail_visual_ib.F90
79!|| finter_mixed_mod ../engine/source/tools/finter_mixed.F90
80!|| fixflux ../engine/source/constraints/thermic/fixflux.F
81!|| force ../engine/source/loads/general/force.F90
82!|| forcefingeo ../engine/source/loads/general/forcefingeo.F
83!|| forcepinch ../engine/source/loads/general/forcepinch.F
84!|| frictionparts_model_isot ../engine/source/interfaces/int07/frictionparts_model.F
85!|| fxgrvcor ../engine/source/constraints/fxbody/fxgrvcor.F
86!|| gravit ../engine/source/loads/general/grav/gravit.F
87!|| gravit_fvm_fem ../engine/source/loads/general/grav/gravit_fvm_fem.f
88!|| gravit_imp ../engine/source/loads/general/grav/gravit_imp.F
89!|| h3d_pre_skin_scalar ../engine/source/output/h3d/h3d_results/h3d_skin_scalar.F
90!|| h3d_skin_vector ../engine/source/output/h3d/h3d_results/h3d_skin_vector.F
91!|| i11therm ../engine/source/interfaces/int11/i11therm.F
92!|| i21for3 ../engine/source/interfaces/int21/i21for3.F
93!|| i21therm ../engine/source/interfaces/int21/i21therm.F
94!|| i23mainf ../engine/source/interfaces/int23/i23mainf.F
95!|| i25therm ../engine/source/interfaces/int25/i25therm.F
96!|| i6ass3 ../engine/source/interfaces/inter3d/i6ass3.F
97!|| i7therm ../engine/source/interfaces/int07/i7therm.F
98!|| idx_fld_sol ../engine/source/output/h3d/h3d_results/h3d_sol_skin_scalar.F
99!|| imp_kpres ../engine/source/implicit/imp_glob_k.F
100!|| incpflow ../engine/source/fluid/incpflow.F
101!|| lag_fxv ../engine/source/tools/lagmul/lag_fxv.F
102!|| lag_fxvp ../engine/source/tools/lagmul/lag_fxv.F
103!|| load_pressure ../engine/source/loads/general/load_pressure/load_pressure.F
104!|| m11law ../engine/source/materials/mat/mat011/m11law.F
105!|| m21law ../engine/source/materials/mat/mat021/m21law.F
106!|| mmain ../engine/source/materials/mat_share/mmain.F90
107!|| pfluid ../engine/source/loads/general/pfluid/pfluid.F
108!|| pforc3 ../engine/source/elements/beam/pforc3.F
109!|| r26sig ../engine/source/elements/spring/r26sig.F
110!|| r27def3 ../engine/source/elements/spring/r27def3.F
111!|| radiation ../engine/source/constraints/thermic/radiation.F
112!|| ruptint2 ../engine/source/interfaces/interf/ruptint2.F
113!|| sigeps100 ../engine/source/materials/mat/mat100/sigeps100.F90
114!|| sigeps101 ../engine/source/materials/mat/mat101/sigeps101.F
115!|| sigeps105 ../engine/source/materials/mat/mat105/sigeps105.F
116!|| sigeps106 ../engine/source/materials/mat/mat106/sigeps106.F
117!|| sigeps111 ../engine/source/materials/mat/mat111/sigeps111.F
118!|| sigeps117 ../engine/source/materials/mat/mat117/sigeps117.F
119!|| sigeps187 ../engine/source/materials/mat/mat187/sigeps187.F
120!|| sigeps28 ../engine/source/materials/mat/mat028/sigeps28.F
121!|| sigeps33 ../engine/source/materials/mat/mat033/sigeps33.F
122!|| sigeps34c ../engine/source/materials/mat/mat034/sigeps34c.F
123!|| sigeps35 ../engine/source/materials/mat/mat035/sigeps35.F
124!|| sigeps35c ../engine/source/materials/mat/mat035/sigeps35c.F
125!|| sigeps36 ../engine/source/materials/mat/mat036/sigeps36.F
126!|| sigeps36g ../engine/source/materials/mat/mat036/sigeps36g.F
127!|| sigeps36pi ../engine/source/materials/mat/mat036/sigeps36pi.F
128!|| sigeps37 ../engine/source/materials/mat/mat037/sigeps37.F
129!|| sigeps38 ../engine/source/materials/mat/mat038/sigeps38.F
130!|| sigeps40 ../engine/source/materials/mat/mat040/sigeps40.F
131!|| sigeps42 ../engine/source/materials/mat/mat042/sigeps42.F
132!|| sigeps43c ../engine/source/materials/mat/mat043/sigeps43c.F
133!|| sigeps43g ../engine/source/materials/mat/mat043/sigeps43g.F
134!|| sigeps44p ../engine/source/materials/mat/mat044/sigeps44p.F
135!|| sigeps44t ../engine/source/materials/mat/mat044/sigeps44t.F
136!|| sigeps45 ../engine/source/materials/mat/mat045/sigeps45.F
137!|| sigeps45c ../engine/source/materials/mat/mat045/sigeps45c.F
138!|| sigeps48 ../engine/source/materials/mat/mat048/sigeps48.F
139!|| sigeps51 ../engine/source/materials/mat/mat051/sigeps51.f90
140!|| sigeps51_boundary_material ../engine/source/materials/mat/mat051/sigeps51_boundary_material.F90
141!|| sigeps52c ../engine/source/materials/mat/mat052/sigeps52c.F
142!|| sigeps55c ../engine/source/materials/mat/mat055/sigeps55c.F
143!|| sigeps56c ../engine/source/materials/mat/mat056/sigeps56c.F
144!|| sigeps58c ../engine/source/materials/mat/mat058/sigeps58c.F
145!|| sigeps59 ../engine/source/materials/mat/mat059/sigeps59.F
146!|| sigeps60 ../engine/source/materials/mat/mat060/sigeps60.F
147!|| sigeps60c ../engine/source/materials/mat/mat060/sigeps60c.F
148!|| sigeps60g ../engine/source/materials/mat/mat060/sigeps60g.F
149!|| sigeps62 ../engine/source/materials/mat/mat062/sigeps62.F
150!|| sigeps62c ../engine/source/materials/mat/mat062/sigeps62c.F
151!|| sigeps63c ../engine/source/materials/mat/mat063/sigeps63c.F
152!|| sigeps64c ../engine/source/materials/mat/mat064/sigeps64c.F
153!|| sigeps65 ../engine/source/materials/mat/mat065/sigeps65.F
154!|| sigeps65c ../engine/source/materials/mat/mat065/sigeps65c.F
155!|| sigeps66 ../engine/source/materials/mat/mat066/sigeps66.F
156!|| sigeps66c ../engine/source/materials/mat/mat066/sigeps66c.F
157!|| sigeps68 ../engine/source/materials/mat/mat068/sigeps68.F
158!|| sigeps69 ../engine/source/materials/mat/mat069/sigeps69.F
159!|| sigeps70 ../engine/source/materials/mat/mat070/sigeps70.F
160!|| sigeps71c ../engine/source/materials/mat/mat071/sigeps71c.F
161!|| sigeps73c ../engine/source/materials/mat/mat073/sigeps73c.F
162!|| sigeps74 ../engine/source/materials/mat/mat074/sigeps74.F
163!|| sigeps75 ../engine/source/materials/mat/mat075/sigeps75.F
164!|| sigeps77 ../engine/source/materials/mat/mat077/sigeps77.F
165!|| sigeps78 ../engine/source/materials/mat/mat078/sigeps78.F
166!|| sigeps80 ../engine/source/materials/mat/mat080/sigeps80.F
167!|| sigeps80c ../engine/source/materials/mat/mat080/sigeps80c.F
168!|| sigeps82 ../engine/source/materials/mat/mat082/sigeps82.F
169!|| sigeps82c ../engine/source/materials/mat/mat082/sigeps82c.F
170!|| sigeps83 ../engine/source/materials/mat/mat083/sigeps83.F
171!|| sigeps85c_void ../engine/source/materials/mat/mat085/sigeps85c_void.F
172!|| sigeps86c ../engine/source/materials/mat/mat086/sigeps86c.F
173!|| sigeps88 ../engine/source/materials/mat/mat088/sigeps88.F
174!|| sigeps88c ../engine/source/materials/mat/mat088/sigeps88c.F
175!|| sigeps92 ../engine/source/materials/mat/mat092/sigeps92.f
176!|| sigeps94 ../engine/source/materials/mat/mat094/sigeps94.F
177!|| sigeps95 ../engine/source/materials/mat/mat095/sigeps95.F
178!|| sms_gravit ../engine/source/ams/sms_gravit.F
179!|| thermexpc ../engine/source/materials/mat_share/thermexpc.F
180!||====================================================================
181 my_real FUNCTION finter(IFUNC,XX,NPF,TF,DERI)
182!$COMMENT
183! FINTER description :
184! FINTER function interpolates XX on TF curve
185! and computes also the derivative DERI
186! FINTER organization :
187! two cases :
188! - constant function --> direct interpolation
189! - non-constant function :
190! (1): if the number of point in the function is < MIN_GAP, then
191! the interpolation is computed
192! (2): if the number of point in the function is > MIN_GAP, then
193! a dichotmy reduces the point interval and a interpolation
194! is performed on the reduced point interval
195! if the dichotomy fails, then the classical interpolation
196! is used
197!$ENDCOMMENT
198C-----------------------------------------------
199C I m p l i c i t T y p e s
200C-----------------------------------------------
201#include "implicit_f.inc"
202! ----------------------------------------
203! Global variables
204! ----------------------------------------
205 INTEGER ifunc,npf(*)
206 my_real tf(*),deri,xx
207! -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*
208! IFUNC : integer ; function number
209! NPF : integer ; dimension=SUM( (number of point[IFUNC])*2), IFUNC=1:MAX_FUNC
210! pointer for the function points x + function value f(x)
211! TF : my_real ; dimension=SUM( (number of point[IFUNC])*2), IFUNC=1:MAX_FUNC
212! gives the function points x + function value f(x)
213! DERI : my_real ; function derivative
214! XX : my_real ; x value to be interpolate
215! -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*
216! ----------------------------------------
217! Local variables
218! ----------------------------------------
219 LOGICAL :: bool
220 INTEGER :: i,j,point_nbr
221 INTEGER :: first, last, middle
222 INTEGER :: min_gap
223 INTEGER :: counter
224 my_real :: dx1,dx2,dx2_first,dx2_last,dx2_middle
225 my_real :: product_fm,product_ml
226 my_real :: div, div0
227
228! ----------------------------------------
229 finter = zero
230 min_gap = 20
231 dx2 = tf(npf(ifunc)) - xx
232 ! -----------------------------
233 IF ((npf(ifunc+1)-npf(ifunc))==2) THEN
234 ! constant function
235 finter = tf(npf(ifunc)+1)
236 RETURN
237 ELSE
238 ! -----------------------------
239 ! check the number of point in the function:
240 ! if point_nbt < MIN_GAP --> classical interpolation
241 ! if point_nbt > MIN_GAP --> dichotomy in order to reduce the point number interval
242 ! and then when the interval is < MIN_GAP --> classical interpolation
243 ! -----------------------------
244 point_nbr = ( npf(ifunc+1)-2 - (npf(ifunc)+2) ) / 2 + 1
245 IF(point_nbr<min_gap) THEN
246 ! -----------------------------
247 ! classical interpolation
248 DO i=npf(ifunc)+2,npf(ifunc+1)-2,2
249 dx1 = -dx2
250 dx2 = tf(i) - xx
251 IF(dx2>=zero.OR.i==npf(ifunc+1)-2)THEN
252 div0 = tf(i) - tf(i-2)
253 div = max(abs(div0),em16)
254 div = sign(div,div0)
255 deri = (tf(i+1) - tf(i-1)) / div
256 IF(dx1<=dx2)THEN
257 finter = tf(i-1) + dx1 * deri
258 ELSE
259 finter = tf(i+1) - dx2 * deri
260 ENDIF
261 RETURN
262 ENDIF
263 ENDDO
264 ! -----------------------------
265 ELSE
266 ! -----------------------------
267 ! dichotomy
268 ! first shot : (a) we check the first value
269
270 dx2 = tf(npf(ifunc)) - xx
271 i=npf(ifunc)+2
272 dx1 = -dx2
273 dx2 = tf(i) - xx
274 IF(dx2>=zero.OR.i==npf(ifunc+1)-2)THEN
275 div0 = tf(i) - tf(i-2)
276 div = max(abs(div0),em16)
277 div = sign(div,div0)
278 deri = (tf(i+1) - tf(i-1)) / div
279 IF(dx1<=dx2)THEN
280 finter = tf(i-1) + dx1 * deri
281 ELSE
282 finter = tf(i+1) - dx2 * deri
283 ENDIF
284 RETURN
285 ENDIF
286
287 ! first shot : (b) we check the last value
288 dx2 = tf(npf(ifunc+1)-2) - xx
289 i=npf(ifunc+1)-2
290 dx1 = -dx2
291 dx2 = tf(i) - xx
292 IF(dx2 <= zero)THEN
293 div0 = tf(i) - tf(i-2)
294 div = max(abs(div0),em16)
295 div = sign(div,div0)
296 deri = (tf(i+1) - tf(i-1)) / div
297 IF(dx1 == zero .AND. dx2 == zero) THEN
298 finter = tf(i+1)
299 ELSEIF(dx1<=dx2)THEN
300 finter = tf(i-1) + dx1 * deri
301 ELSE
302 finter = tf(i+1) - dx2 * deri
303 ENDIF
304 RETURN
305 ENDIF
306
307
308 ! -----------------------------
309 ! second shot : (a) dichotomy in order to reduce the gap
310 first = 1
311 last = point_nbr
312 bool=.true.
313 dx2 = tf(npf(ifunc)) - xx
314 counter = 0
315
316 DO WHILE(bool)
317 middle = (last - first) / 2 + first
318 dx2_first= tf(npf(ifunc)+2*first) - xx
319 dx2_last= tf(npf(ifunc)+2*last) - xx
320 dx2_middle= tf(npf(ifunc)+2*middle) - xx
321
322
323 product_fm = dx2_first*dx2_middle
324 product_ml = dx2_middle*dx2_last
325
326 IF(product_fm<0) THEN
327 last=middle
328 ELSEIF(product_ml<0) THEN
329 first=middle
330 ELSE
331 bool=.false.
332 ENDIF
333 IF( (last-first)<min_gap) bool=.false.
334 ! ---------------------
335 ! check in order to avoid infinite loop
336 counter = counter + 1
337 IF( counter>point_nbr ) THEN
338 ! INFINITE LOOP DETECTED
339 counter = -1
340 bool=.false.
341 ENDIF
342 ! ---------------------
343 ENDDO
344 ! -----------------------------
345 ! second shot : (b) classical interpolation with reduced interval
346
347 ! ------------------------
348 ! INFINITE LOOP DETECTED
349 ! the dichotomy failed to reduce the interval, back to old treatment
350 IF( counter == -1 ) THEN
351 first = 1
352 last = point_nbr
353 ENDIF
354 ! ------------------------
355 dx2 = tf(npf(ifunc)+2*first-2) - xx
356 DO j=first,last
357 i=npf(ifunc)+2*j
358 dx1 = -dx2
359 dx2 = tf(i) - xx
360 IF(dx2>=zero.OR.j==last)THEN
361 div0 = tf(i) - tf(i-2)
362 div = max(abs(div0),em16)
363 div = sign(div,div0)
364
365 deri = (tf(i+1) - tf(i-1)) / div
366 IF(dx1<=dx2)THEN
367 finter = tf(i-1) + dx1 * deri
368 ELSE
369 finter = tf(i+1) - dx2 * deri
370 ENDIF
371 RETURN
372 ENDIF
373 ENDDO
374 ! -----------------------------
375 ENDIF ! end of point_nbr < MIN_GAP
376 END IF ! end of constant function
377C
378 RETURN
379 END
380! ----------------------------------------
subroutine convec(ibcv, fconv, npc, tf, x, temp, nsensor, sensor_tab, fthe, iad, fthesky, python, glob_therm)
Definition convec.F:38
#define my_real
Definition cppsort.cpp:32
subroutine fail_fld_c(nel, nuparam, nfunc, ifunc, npf, tf, time, uparam, ngl, ipg, ilay, iptt, epsxx, epsyy, epsxy, lf_dammx, depsxx, depsyy, depsxy, pla, zt, off, foff, tdel, fld_idx, dam, dfmax, dt1, niparam, iparam, nuvar, uvar)
Definition fail_fld_c.F:42
subroutine gravit_fvm_fem(igrv, agrv, npc, tf, a, v, x, skew, ms, sensor_tab, weight, ib, itask, nale, nsensor, python, wfext)
#define max(a, b)
Definition macros.h:21
subroutine sigeps92(nel, nuparam, nuvar, nfunc, ifunc, npf, tf, time, timestep, uparam, rho0, rho, volume, eint, ngl, epspxx, epspyy, epspzz, epspxy, epspyz, epspzx, depsxx, depsyy, depszz, depsxy, depsyz, depszx, epsxx, epsyy, epszz, epsxy, epsyz, epszx, sigoxx, sigoyy, sigozz, sigoxy, sigoyz, sigozx, signxx, signyy, signzz, signxy, signyz, signzx, sigvxx, sigvyy, sigvzz, sigvxy, sigvyz, sigvzx, soundsp, viscmax, uvar, off, ismstr, et, ihet, offg, epsth3, iexpan, ww)
Definition sigeps92.F:44