OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
cmumps_iXamax.F File Reference

Go to the source code of this file.

Functions/Subroutines

integer function cmumps_ixamax (n, x, incx, grain)

Function/Subroutine Documentation

◆ cmumps_ixamax()

integer function cmumps_ixamax ( integer, intent(in) n,
complex, dimension(*), intent(in) x,
integer, intent(in) incx,
integer, intent(in) grain )

Definition at line 14 of file cmumps_iXamax.F.

15!$ USE OMP_LIB
16 IMPLICIT NONE
17 COMPLEX, intent(in) :: X(*)
18 INTEGER, intent(in) :: INCX,N
19 INTEGER, intent(in) :: GRAIN
20 REAL ABSMAX
21 INTEGER :: I
22 INTEGER(8) :: IX
23!$ INTEGER :: NOMP, CHUNK
24!$ INTEGER :: IMAX
25!$ REAL :: XMAX, VALABS
26!$ REAL, PARAMETER :: RZERO = 0.0E0
27!$ NOMP = OMP_GET_MAX_THREADS()
29 IF ( n.LT.1 ) RETURN
31 IF ( n.EQ.1 .OR. incx.LE.0 ) RETURN
32!$ IF (NOMP.GT.1 .AND. N.GE.GRAIN*2) THEN
33!$ IF ( INCX.EQ.1 ) THEN
34!$ CHUNK = max(GRAIN,(N+NOMP-1)/NOMP)
35!$ ABSMAX = RZERO
36!$OMP PARALLEL PRIVATE(I, VALABS, XMAX, IMAX)
37!$OMP& FIRSTPRIVATE(N, CHUNK)
38!$ XMAX = RZERO
39!$OMP DO SCHEDULE(static, CHUNK)
40!$ DO I = 1, N
41!$ VALABS = abs(X(I))
42!$ IF ( VALABS .GT. XMAX ) THEN
43!$ XMAX = VALABS
44!$ IMAX = I
45!$ ENDIF
46!$ ENDDO
47!$OMP END DO
48!$ IF (XMAX .GT. RZERO) THEN
49!$OMP CRITICAL
50!$ IF (XMAX .GT. ABSMAX) THEN
51!$ CMUMPS_IXAMAX = IMAX
52!$ ABSMAX = XMAX
53!$ ENDIF
54!$OMP END CRITICAL
55!$ ENDIF
56!$OMP END PARALLEL
57!$ ELSE
58!$ CHUNK = max(GRAIN,(N+NOMP-1)/NOMP)
59!$ ABSMAX = RZERO
60!$OMP PARALLEL PRIVATE(I, VALABS, XMAX, IMAX, IX)
61!$OMP& FIRSTPRIVATE(N, CHUNK, INCX)
62!$ XMAX = RZERO
63!$OMP DO SCHEDULE(static, CHUNK)
64!$ DO I = 1, N
65!$ IX = 1 + int((I-1),8)*int(INCX,8)
66!$ VALABS = abs(X(IX))
67!$ IF ( VALABS .GT. XMAX ) THEN
68!$ XMAX = VALABS
69!$ IMAX = I
70!$ ENDIF
71!$ ENDDO
72!$OMP END DO
73!$ IF (XMAX .GT. RZERO) THEN
74!$OMP CRITICAL
75!$ IF (XMAX .GT. ABSMAX) THEN
76!$ CMUMPS_IXAMAX = IMAX
77!$ ABSMAX = XMAX
78!$ ENDIF
79!$OMP END CRITICAL
80!$ ENDIF
81!$OMP END PARALLEL
82!$ ENDIF
83!$ ELSE
84 IF ( incx.EQ.1 ) THEN
85 absmax = abs(x(1))
86 DO i = 2, n
87 IF ( abs(x(i)) .LE. absmax ) cycle
89 absmax = abs(x(i))
90 ENDDO
91 ELSE
92 ix = 1
93 absmax = abs(x(1))
94 ix = ix + incx
95 DO i = 2, n
96 IF ( abs(x(ix)).LE.absmax ) GOTO 5
98 absmax = abs(x(ix))
99 5 ix = ix + incx
100 ENDDO
101 ENDIF
102!$ ENDIF
103 RETURN
integer function cmumps_ixamax(n, x, incx, grain)