OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
fail_inievo_s.F File Reference
#include "implicit_f.inc"
#include "scr17_c.inc"
#include "units_c.inc"
#include "comlock.inc"
#include "com04_c.inc"
#include "tabsiz_c.inc"
#include "lockon.inc"
#include "lockoff.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine fail_inievo_s (nel, nuparam, nuvar, table, ntablf, itablf, time, uparam, ngl, aldt, dpla, epsp, uvar, signxx, signyy, signzz, signxy, signyz, signzx, pla, temp, sigy, off, dfmax, tdele, dmg_scale, uelr, ipg, npg, loff, damini, vol, inloc)

Function/Subroutine Documentation

◆ fail_inievo_s()

subroutine fail_inievo_s ( integer, intent(in) nel,
integer, intent(in) nuparam,
integer, intent(in) nuvar,
type (ttable), dimension(ntable), intent(in) table,
integer, intent(in) ntablf,
integer, dimension(ntablf), intent(in) itablf,
intent(in) time,
dimension(nuparam), intent(in) uparam,
integer, dimension(nel), intent(in) ngl,
dimension(nel), intent(in) aldt,
dimension(nel), intent(in) dpla,
dimension(nel), intent(in) epsp,
dimension(nel,nuvar), intent(inout) uvar,
dimension(nel), intent(in) signxx,
dimension(nel), intent(in) signyy,
dimension(nel), intent(in) signzz,
dimension(nel), intent(in) signxy,
dimension(nel), intent(in) signyz,
dimension(nel), intent(in) signzx,
dimension(nel), intent(in) pla,
dimension(nel), intent(in) temp,
dimension(nel), intent(in) sigy,
dimension(nel), intent(inout) off,
dimension(nel), intent(inout) dfmax,
dimension(nel), intent(inout) tdele,
dimension(nel), intent(inout) dmg_scale,
dimension(nel), intent(inout) uelr,
integer, intent(in) ipg,
integer, intent(in) npg,
dimension(nel), intent(inout) loff,
dimension(nel), intent(inout) damini,
dimension(nel), intent(in) vol,
integer, intent(in) inloc )

Definition at line 37 of file fail_inievo_s.F.

45C---------+---------+---+---+--------------------------------------------
46 USE table_mod
48 USE message_mod
49C-----------------------------------------------
50C I m p l i c i t T y p e s
51C-----------------------------------------------
52#include "implicit_f.inc"
53C-----------------------------------------------
54C C o m m o n B l o c k s
55C-----------------------------------------------
56#include "scr17_c.inc"
57#include "units_c.inc"
58#include "comlock.inc"
59#include "com04_c.inc"
60#include "tabsiz_c.inc"
61C-----------------------------------------------
62C I N P U T A r g u m e n t s
63C-----------------------------------------------
64 INTEGER, INTENT(IN) ::
65 . NEL,NUPARAM,NUVAR,NGL(NEL),NPG,IPG,NTABLF,INLOC
66 INTEGER, DIMENSION(NTABLF) ,INTENT(IN) :: ITABLF
67 my_real, INTENT(IN) ::
68 . time,uparam(nuparam),aldt(nel),
69 . dpla(nel),epsp(nel),temp(nel),
70 . signxx(nel),signyy(nel),signzz(nel),
71 . signxy(nel),signyz(nel),signzx(nel),
72 . pla(nel),sigy(nel),vol(nel)
73 my_real, INTENT(INOUT) ::
74 . uvar(nel,nuvar),dfmax(nel),tdele(nel),
75 . dmg_scale(nel),off(nel),uelr(nel),
76 . loff(nel),damini(nel)
77 TYPE (TTABLE), INTENT(IN), DIMENSION(NTABLE) :: TABLE
78C-----------------------------------------------
79C L o c a l V a r i a b l e s
80C-----------------------------------------------
81 INTEGER I,J,INDX(NEL),NINDX,FAILIP,IPOS(NEL,2),
82 . NROT(NEL),NINIEVO,ILEN
83 INTEGER, DIMENSION(:), ALLOCATABLE ::
84 . INITYPE,EVOTYPE,EVOSHAP,COMPTYP,TAB_ID,
85 . TAB_EL,FCRIT
86 my_real, DIMENSION(:), ALLOCATABLE ::
87 . sr_ref,fscale,ini_p1,el_ref,elscal,
88 . disp,ener,alpha2
89 my_real, DIMENSION(:,:), ALLOCATABLE ::
90 . dmgini,dmgevo
92 . lambda,fac,df,l0(nel) ,triax(nel) ,epsf(nel) ,
93 . depsf(nel) ,xvec(nel,2) ,sxx,syy,szz ,sizefac(nel),
94 . epsmod(nel) ,p(nel) ,svm(nel) ,dmgmax(nel) ,
95 . dmgmul(nel) ,sigtens(nel,3,3) ,sig_pr(nel,3),
96 . vect_pr(nel,3,3),plas_disp,r_inter ,yld0 ,
97 . maxshear(nel),sigpmaj(nel),alpha(nel) ,dsize(nel) ,
98 . center ,devsp1 ,devsp2 ,radius ,
99 . sigp1 ,sigp2
100C!--------------------------------------------------------------
101 !=======================================================================
102 ! - INITIALISATION OF COMPUTATION ON TIME STEP
103 !=======================================================================
104 ! Recovering failure criterion parameters
105 ninievo = uparam(1)
106 ilen = int(uparam(3))
107 IF (inloc > 0) ilen = 1
108 failip = min(nint(uparam(4)),npg)
109 ALLOCATE(initype(ninievo))
110 ALLOCATE(evotype(ninievo))
111 ALLOCATE(evoshap(ninievo))
112 ALLOCATE(comptyp(ninievo))
113 ALLOCATE(tab_id(ninievo))
114 ALLOCATE(sr_ref(ninievo))
115 ALLOCATE(fscale(ninievo))
116 ALLOCATE(ini_p1(ninievo))
117 ALLOCATE(tab_el(ninievo))
118 ALLOCATE(el_ref(ninievo))
119 ALLOCATE(elscal(ninievo))
120 ALLOCATE(disp(ninievo))
121 ALLOCATE(ener(ninievo))
122 ALLOCATE(alpha2(ninievo))
123c
124 tab_id(1:ninievo) = itablf(1:ninievo)
125 tab_el(1:ninievo) = itablf(ninievo+1:ninievo*2)
126c
127 DO j = 1,ninievo
128 initype(j) = uparam(6 + 14*(j-1))
129 evotype(j) = uparam(7 + 14*(j-1))
130 evoshap(j) = uparam(8 + 14*(j-1))
131 comptyp(j) = uparam(9 + 14*(j-1))
132 sr_ref(j) = uparam(11 + 14*(j-1))
133 fscale(j) = uparam(12 + 14*(j-1))
134 ini_p1(j) = uparam(13 + 14*(j-1))
135 el_ref(j) = uparam(15 + 14*(j-1))
136 elscal(j) = uparam(16 + 14*(j-1))
137 disp(j) = uparam(17 + 14*(j-1))
138 alpha2(j) = uparam(18 + 14*(j-1))
139 ener(j) = uparam(19 + 14*(j-1))
140 ENDDO
141c
142 ! Element characteristic length computation
143 ! -> Initial values
144 IF (uvar(1,1) == zero) THEN
145 ! -> Critical timestep formulation
146 IF (ilen == 1) THEN
147 uvar(1:nel,1) = aldt(1:nel)
148 ! -> Geometric formulation
149 ELSE
150 DO i = 1,nel
151 uvar(i,1) = exp(third*log(vol(i)))
152 ENDDO
153 ENDIF
154 ENDIF
155 l0(1:nel) = uvar(1:nel,1)
156 ! Positive stress triaxiality bounded plastic strain
157 epsmod(1:nel) = uvar(1:nel,2)
158 ! Damage initiation and evolution variable
159 ALLOCATE(dmgini(nel,ninievo))
160 ALLOCATE(dmgevo(nel,ninievo))
161 ALLOCATE(fcrit(nel))
162 DO j = 1,ninievo
163 DO i=1,nel
164 ! Initiation damage
165 dmgini(i,j) = uvar(i,3+(j-1)*3)
166 ! Evolution damage
167 dmgevo(i,j) = uvar(i,4+(j-1)*3)
168 ENDDO
169 ENDDO
170 ! Criterion number leading to element deletion
171 fcrit(1:nel) = 0
172c
173 !====================================================================
174 ! - LOOP OVER THE ELEMENT TO COMPUTE THE STRESS STATE QUANTITIES
175 !====================================================================
176 DO i=1,nel
177c
178 ! Computation of hydrostatic stress, Von Mises stress, and stress triaxiality
179 p(i) = -third*(signxx(i) + signyy(i) + signzz(i))
180 sxx = signxx(i) + p(i)
181 syy = signyy(i) + p(i)
182 szz = signzz(i) + p(i)
183 svm(i) = half*(sxx**2 + syy**2 + szz**2)
184 . + signxy(i)**2 + signzx(i)**2 + signyz(i)**2
185 svm(i) = sqrt(three*svm(i))
186 triax(i) = -p(i)/max(em20,svm(i))
187 IF (triax(i) < -one) triax(i) = -one
188 IF (triax(i) > one) triax(i) = one
189c
190 ! Increase the modified plastic strain
191 IF (triax(i) > zero) epsmod(i) = epsmod(i) + dpla(i)
192c
193 ! Stress tensor
194 sigtens(i,1,1) = signxx(i)
195 sigtens(i,2,2) = signyy(i)
196 sigtens(i,3,3) = signzz(i)
197 sigtens(i,1,2) = signxy(i)
198 sigtens(i,2,3) = signyz(i)
199 sigtens(i,3,1) = signzx(i)
200 sigtens(i,2,1) = signxy(i)
201 sigtens(i,3,2) = signyz(i)
202 sigtens(i,1,3) = signzx(i)
203c
204 ENDDO
205c
206 ! Compute principal stresses
207 CALL jacobiew_v(nel,3,sigtens,sig_pr,vect_pr,nrot)
208c
209 ! Sort principal stresses and compute variables
210 DO i = 1,nel
211c
212 IF (sig_pr(i,1) < sig_pr(i,2)) THEN
213 r_inter = sig_pr(i,1)
214 sig_pr(i,1) = sig_pr(i,2)
215 sig_pr(i,2) = r_inter
216 ENDIF
217 IF (sig_pr(i,2) < sig_pr(i,3)) THEN
218 r_inter = sig_pr(i,2)
219 sig_pr(i,2) = sig_pr(i,3)
220 sig_pr(i,3) = r_inter
221 ENDIF
222 IF (sig_pr(i,1) < sig_pr(i,2)) THEN
223 r_inter = sig_pr(i,1)
224 sig_pr(i,1) = sig_pr(i,2)
225 sig_pr(i,2) = r_inter
226 ENDIF
227 sigpmaj(i) = sig_pr(i,1)
228 maxshear(i) = (sig_pr(i,1)-sig_pr(i,3))*half
229c
230 ! Compute the alpha parameter for FLD/MSFLD
231 center = half*(signxx(i)+signyy(i))
232 radius = sqrt((half*(signxx(i)-signyy(i)))**2 + signxy(i)**2)
233 sigp1 = center + radius
234 sigp2 = center - radius
235 devsp1 = sigp1 - third*(sigp1+sigp2)
236 devsp2 = sigp2 - third*(sigp1+sigp2)
237 alpha(i) = devsp2/sign(max(abs(devsp1),em20),devsp1)
238c
239 ENDDO
240c
241 !====================================================================
242 ! - COMPUTE DAMAGE INITIATION AND EVOLUTION
243 !====================================================================
244 DO j = 1,ninievo
245 ! Damage initiation type selection
246 SELECT CASE(initype(j))
247 ! Plastic strain vs triaxiality
248 CASE(1)
249 xvec(1:nel,1) = triax(1:nel)
250 ! Plastic strain vs shear influence (theta)
251 CASE(2)
252 DO i = 1,nel
253 xvec(i,1) = (svm(i) + ini_p1(j)*p(i))/max(maxshear(i),em08)
254 ENDDO
255 ! MSFLD / FLD
256 CASE(3,4)
257 xvec(1:nel,1) = alpha(1:nel)
258 ! Normalized principal stress
259 CASE(5)
260 DO i = 1,nel
261 xvec(i,1) = (svm(i) + ini_p1(j)*p(i))/max(sigpmaj(i),em08)
262 ENDDO
263 END SELECT
264 xvec(1:nel,2) = epsp(1:nel)/sr_ref(j)
265 ipos(1:nel,1:2) = 1
266 CALL table_vinterp(table(tab_id(j)),nel,nel,ipos,xvec,epsf,depsf)
267 epsf(1:nel) = epsf(1:nel)*fscale(j)
268c
269 ! Compute the element size regularization factor
270 IF (tab_el(j) > 0) THEN
271 xvec(1:nel,1) = l0(1:nel)/el_ref(j)
272 SELECT CASE (initype(j))
273 CASE(1)
274 xvec(1:nel,2) = triax(1:nel)
275 CASE(2)
276 DO i = 1,nel
277 xvec(i,2) = (svm(i) + ini_p1(j)*p(i))/max(maxshear(i),em08)
278 ENDDO
279 CASE(3,4)
280 xvec(1:nel,2) = alpha(1:nel)
281 CASE(5)
282 DO i = 1,nel
283 xvec(i,2) = (svm(i) + ini_p1(j)*p(i))/max(sigpmaj(i),em08)
284 ENDDO
285 END SELECT
286 ipos(1:nel,1:2) = 1
287 CALL table_vinterp(table(tab_el(j)),nel,nel,ipos,xvec,sizefac,dsize)
288 sizefac(1:nel) = sizefac(1:nel)*elscal(j)
289 epsf(1:nel) = epsf(1:nel)*sizefac(1:nel)
290 ENDIF
291c
292 ! Update damage initiation
293 SELECT CASE (initype(j))
294 CASE(1,2,5)
295 DO i = 1,nel
296 IF ((dpla(i) > zero).AND.(dmgini(i,j)<one).AND.(loff(i) == one)) THEN
297 dmgini(i,j) = dmgini(i,j) + dpla(i)/max(epsf(i),em20)
298 dmgini(i,j) = min(dmgini(i,j),one)
299 ENDIF
300 ENDDO
301 CASE(3)
302 IF (nint(ini_p1(j))>0) THEN
303 DO i = 1,nel
304 IF (((epsmod(i)-uvar(i,2)) > zero).AND.(dmgini(i,j)<one).AND.(loff(i) == one)) THEN
305 dmgini(i,j) = dmgini(i,j) + (epsmod(i)-uvar(i,2))/max(epsf(i),em20)
306 dmgini(i,j) = min(dmgini(i,j),one)
307 ENDIF
308 ENDDO
309 ELSE
310 DO i = 1,nel
311 IF (((epsmod(i)-uvar(i,2)) > zero).AND.(dmgini(i,j)<one).AND.(loff(i) == one)) THEN
312 dmgini(i,j) = max(dmgini(i,j),epsmod(i)/max(epsf(i),em20))
313 dmgini(i,j) = min(dmgini(i,j),one)
314 ENDIF
315 ENDDO
316 ENDIF
317 CASE(4)
318 IF (nint(ini_p1(j))>0) THEN
319 DO i = 1,nel
320 IF ((dpla(i) > zero).AND.(dmgini(i,j)<one).AND.(loff(i) == one)) THEN
321 dmgini(i,j) = dmgini(i,j) + dpla(i)/max(epsf(i),em20)
322 dmgini(i,j) = min(dmgini(i,j),one)
323 ENDIF
324 ENDDO
325 ELSE
326 DO i = 1,nel
327 IF ((dpla(i) > zero).AND.(dmgini(i,j)<one).AND.(loff(i) == one)) THEN
328 dmgini(i,j) = max(dmgini(i,j),pla(i)/max(epsf(i),em20))
329 dmgini(i,j) = min(dmgini(i,j),one)
330 ENDIF
331 ENDDO
332 ENDIF
333 END SELECT
334c
335 ! Update damage evolution
336 SELECT CASE (evotype(j))
337 ! Plastic displacement at failure
338 CASE(1)
339 SELECT CASE (evoshap(j))
340 ! Linear shape
341 CASE(1)
342 DO i = 1,nel
343 IF ((dmgini(i,j) >= one).AND.(dpla(i)>zero).AND.
344 . (loff(i) == one).AND.(dmgevo(i,j)<one)) THEN
345 dmgevo(i,j) = dmgevo(i,j) + l0(i)*dpla(i)/disp(j)
346 dmgevo(i,j) = min(one,dmgevo(i,j))
347 IF (dmgevo(i,j) >= one) fcrit(i) = j
348 ENDIF
349 ENDDO
350 ! Exponential shape
351 CASE(2)
352 DO i = 1,nel
353 IF ((dmgini(i,j) >= one).AND.(dpla(i)>zero).AND.
354 . (loff(i) == one).AND.(dmgevo(i,j)<one)) THEN
355 IF (dmgevo(i,j) == zero) uvar(i,5+(j-1)*3) = pla(i)
356 plas_disp = (pla(i) - uvar(i,5+(j-1)*3))*l0(i)/disp(j)
357 dmgevo(i,j) = dmgevo(i,j) + (alpha2(j)/(one - exp(-alpha2(j))))*
358 . exp(-alpha2(j)*plas_disp)*
359 . dpla(i)*l0(i)/disp(j)
360 IF (dmgevo(i,j) > 0.999d0) dmgevo(i,j) = one
361 dmgevo(i,j) = min(one,dmgevo(i,j))
362 IF (dmgevo(i,j) >= one) fcrit(i) = j
363 ENDIF
364 ENDDO
365 END SELECT
366 ! Fracture energy failure
367 CASE(2)
368 SELECT CASE (evoshap(j))
369 ! Linear shape
370 CASE(1)
371 DO i = 1,nel
372 IF ((dmgini(i,j) >= one).AND.(dpla(i)>zero).AND.
373 . (loff(i) == one).AND.(dmgevo(i,j)<one)) THEN
374 IF (dmgevo(i,j) == zero) uvar(i,5+(j-1)*3) = sigy(i)
375 yld0 = uvar(i,5+(j-1)*3)
376 dmgevo(i,j) = dmgevo(i,j) + dpla(i)*l0(i)*yld0/(two*ener(j))
377 dmgevo(i,j) = min(one,dmgevo(i,j))
378 IF (dmgevo(i,j) >= one) fcrit(i) = j
379 ENDIF
380 ENDDO
381 ! Exponential shape
382 CASE(2)
383 DO i = 1,nel
384 IF ((dmgini(i,j) >= one).AND.(dpla(i)>zero).AND.
385 . (loff(i) == one).AND.(dmgevo(i,j)<one)) THEN
386 uvar(i,5+(j-1)*3) = uvar(i,5+(j-1)*3) + sigy(i)*l0(i)*dpla(i)
387 dmgevo(i,j) = one - exp(-(uvar(i,5+(j-1)*3))/ener(j))
388 IF (dmgevo(i,j) > 0.999d0) dmgevo(i,j) = one
389 dmgevo(i,j) = min(one,dmgevo(i,j))
390 IF (dmgevo(i,j) >= one) fcrit(i) = j
391 ENDIF
392 ENDDO
393 END SELECT
394 ! Failure criterion approach
395 CASE DEFAULT
396 DO i = 1,nel
397 IF ((dmgini(i,j) >= one).AND.(dpla(i)>zero).AND.
398 . (loff(i) == one).AND.(dmgevo(i,j)<one)) THEN
399 dmgevo(i,j) = dmgini(i,j)
400 dmgevo(i,j) = min(one,dmgevo(i,j))
401 IF (dmgevo(i,j) >= one) fcrit(i) = j
402 ENDIF
403 ENDDO
404 END SELECT
405 ENDDO
406c
407 !====================================================================
408 ! - COMPUTE GLOBAL DAMAGE VARIABLE AND DAMAGE SCALING
409 !====================================================================
410 dfmax(1:nel) = zero
411 dmgmax(1:nel) = zero
412 dmgmul(1:nel) = one
413 DO j = 1,ninievo
414 SELECT CASE (comptyp(j))
415 ! Maximum damage
416 CASE(1)
417 DO i = 1,nel
418 dmgmax(i) = max(dmgmax(i),dmgevo(i,j))
419 ENDDO
420 ! Multiplicative damage
421 CASE(2)
422 DO i = 1,nel
423 dmgmul(i) = dmgmul(i)*(one-dmgevo(i,j))
424 ENDDO
425 END SELECT
426 ENDDO
427 dmgmul(1:nel) = one - dmgmul(1:nel)
428 nindx = 0
429 indx(1:nel) = 0
430 DO i = 1,nel
431 IF ((loff(i) == one).AND.(off(i) > zero)) THEN
432 dfmax(i) = max(dmgmax(i),dmgmul(i))
433 IF (dfmax(i) >= one) THEN
434 nindx = nindx + 1
435 indx(nindx) = i
436 uelr(i) = uelr(i) + one
437 loff(i) = zero
438 IF (nint(uelr(i)) >= failip) THEN
439 off(i) = zero
440 tdele(i) = time
441 ENDIF
442 ENDIF
443 ENDIF
444 ENDDO
445c
446 !====================================================================
447 ! - UPDATE THE DAMAGE SCALING FACTOR
448 !====================================================================
449 dmg_scale(1:nel) = one - dfmax(1:nel)
450c
451 !====================================================================
452 ! - UPDATE THE USER VARIABLE
453 !====================================================================
454 ! Positive stress triaxiality bounded plastic strain
455 uvar(1:nel,2) = epsmod(1:nel)
456 damini(1:nel) = zero
457 DO j = 1,ninievo
458 ! Checking element failure and recovering user variable
459 DO i=1,nel
460 ! Damage initiation output
461 damini(i) = max(dmgini(i,j),damini(i))
462 ! Initiation damage
463 uvar(i,3+(j-1)*3) = dmgini(i,j)
464 ! Evolution damage
465 uvar(i,4+(j-1)*3) = dmgevo(i,j)
466 ENDDO
467 ENDDO
468c
469 !====================================================================
470 ! - PRINTOUT DATA ABOUT FAILED ELEMENTS
471 !====================================================================
472 IF (nindx > 0) THEN
473 DO j=1,nindx
474 i = indx(j)
475#include "lockon.inc"
476 WRITE(iout, 1000) ngl(i),fcrit(i),ipg,time
477 WRITE(istdo,1000) ngl(i),fcrit(i),ipg,time
478 IF (off(i) == zero) THEN
479 WRITE(iout, 2000) ngl(i),time
480 WRITE(istdo,2000) ngl(i),time
481 ENDIF
482#include "lockoff.inc"
483 END DO
484 END IF
485c
486 !====================================================================
487 ! - TABLES DEALLOCATION
488 !====================================================================
489 IF (ALLOCATED(initype)) DEALLOCATE(initype)
490 IF (ALLOCATED(evotype)) DEALLOCATE(evotype)
491 IF (ALLOCATED(evoshap)) DEALLOCATE(evoshap)
492 IF (ALLOCATED(comptyp)) DEALLOCATE(comptyp)
493 IF (ALLOCATED(tab_id)) DEALLOCATE(tab_id)
494 IF (ALLOCATED(sr_ref)) DEALLOCATE(sr_ref)
495 IF (ALLOCATED(fscale)) DEALLOCATE(fscale)
496 IF (ALLOCATED(ini_p1)) DEALLOCATE(ini_p1)
497 IF (ALLOCATED(tab_el)) DEALLOCATE(tab_el)
498 IF (ALLOCATED(el_ref)) DEALLOCATE(el_ref)
499 IF (ALLOCATED(elscal)) DEALLOCATE(elscal)
500 IF (ALLOCATED(disp)) DEALLOCATE(disp)
501 IF (ALLOCATED(ener)) DEALLOCATE(ener)
502 IF (ALLOCATED(alpha2)) DEALLOCATE(alpha2)
503 IF (ALLOCATED(dmgini)) DEALLOCATE(dmgini)
504 IF (ALLOCATED(dmgevo)) DEALLOCATE(dmgevo)
505 IF (ALLOCATED(fcrit)) DEALLOCATE(fcrit)
506c-----------------------------------------------------------------------
507 1000 FORMAT(1x,'FOR SOLID ELEMENT NUMBER ',i10,
508 . ' FAILURE (INIEVO) WITH CRITERION NUMBER ',i3,
509 . ' AT GAUSS POINT ',i5,' AT TIME :',1pe12.4)
510 2000 FORMAT(1x,'-- rupture of solid element :',I10,
511 . ' at time :',1PE12.4)
512c
#define my_real
Definition cppsort.cpp:32
#define alpha2
Definition eval.h:48
#define alpha
Definition eval.h:35
subroutine jacobiew_v(dim1, dim2, a, ew, ev, nrot)
Definition jacobview_v.F:30
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21