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

Go to the source code of this file.

Functions/Subroutines

subroutine smumps_compact_factors (a, lda, npiv, nbrow, keep, sizea, iw)
subroutine smumps_compact_factors_unsym (a, lda, npiv, ncontig, sizea)
subroutine smumps_copy_cb_right_to_left (a, la, lda, poselt, iptrlu, npiv, nbcol_stack, nbrow_stack, nbrow_send, sizecb, keep, packed_cb, last_allowed, nbrow_already_stacked)
subroutine smumps_copy_cb_left_to_right (a, la, lda, poselt, iptrlu, npiv, nbcol_stack, nbrow_stack, nbrow_send, sizecb, keep, packed_cb)

Function/Subroutine Documentation

◆ smumps_compact_factors()

subroutine smumps_compact_factors ( real, dimension(sizea) a,
integer, intent(in) lda,
integer, intent(in) npiv,
integer, intent(in) nbrow,
integer, dimension(500) keep,
integer(8), intent(in) sizea,
integer, dimension( npiv ), intent(in) iw )

Definition at line 14 of file sfac_mem_stack_aux.F.

16 IMPLICIT NONE
17 INTEGER, INTENT(IN) :: LDA, NPIV, NBROW
18 INTEGER(8), INTENT(IN) :: SIZEA
19 INTEGER, INTENT(IN) :: IW( NPIV )
20 INTEGER :: KEEP(500)
21 REAL :: A(SIZEA)
22 INTEGER(8) :: IOLD, INEW, J8
23 INTEGER I , ILAST
24 INTEGER NBROW_L_RECTANGLE_TO_MOVE
25 INTEGER :: ICOL_BEG, ICOL_END, NBPANELS, NB_TARGET
26 INTEGER :: NBCOLS_PANEL, NBROWS_PANEL
27 IF ( npiv .EQ. 0 ) GOTO 500
28 nb_target = npiv
29 IF ( keep(459) .GT. 1 .AND. keep(50) .NE. 0 ) THEN
30 CALL mumps_ldltpanel_nbtarget( npiv, nb_target, keep )
31 ENDIF
32 IF ( keep(50) .EQ.0 .OR. nb_target .EQ. npiv ) THEN
33 IF (lda.EQ.npiv) GOTO 500
34 IF ( keep(50) .NE. 0 ) THEN
35 iold = int(lda + 1,8)
36 inew = int(npiv + 1,8)
37 IF (iold .EQ. inew ) THEN
38 WRITE(*,*) " Internal error in SMUMPS_COMPACT_FACTORS",
39 & iold, inew, npiv
40 CALL mumps_abort()
41 ENDIF
42 DO i = 1, npiv - 1
43 IF ( i .LE. npiv-2 ) THEN
44 ilast = i+1
45 ELSE
46 ilast = i
47 ENDIF
48 DO j8 = 0_8, int(ilast,8)
49 a( inew + j8 ) = a( iold + j8 )
50 END DO
51 inew = inew + int(npiv,8)
52 iold = iold + int(lda,8)
53 END DO
54 nbrow_l_rectangle_to_move = nbrow
55 ELSE
56 inew = 1_8 + int(npiv,8) * int(lda + 1,8)
57 iold = 1_8 + int(lda,8) * int(npiv +1,8)
58 nbrow_l_rectangle_to_move = nbrow - 1
59 ENDIF
60 ELSE
61 icol_beg = 1
62 nbpanels = 0
63 inew = 1_8
64 nbrows_panel = npiv
65 DO WHILE ( icol_beg .LE. npiv )
66 nbpanels=nbpanels + 1
67 icol_end = min(nb_target * nbpanels, npiv)
68 IF ( iw( icol_end ) < 0 ) THEN
69 icol_end = icol_end + 1
70 ENDIF
71 nbcols_panel = icol_end - icol_beg + 1
72 iold = int(icol_beg-1,8) * int(lda,8) + int(icol_beg,8)
73 DO i =1, nbrows_panel
74 IF (iold .NE. inew) THEN
75 DO j8=0, min(i+1, nbcols_panel)-1
76 a(inew+j8) = a(iold+j8)
77 ENDDO
78 ENDIF
79 inew = inew + int(nbcols_panel,8)
80 iold = iold + int(lda,8)
81 ENDDO
82 nbrows_panel = nbrows_panel - nbcols_panel
83 icol_beg = icol_end + 1
84 ENDDO
85 iold = 1_8 + int(lda,8)*int(npiv,8)
86 nbrow_l_rectangle_to_move = nbrow
87 ENDIF
88 DO i = 1, nbrow_l_rectangle_to_move
89 DO j8 = 0_8, int(npiv - 1,8)
90 a( inew + j8 ) = a( iold + j8 )
91 END DO
92 inew = inew + int(npiv,8)
93 iold = iold + int(lda,8)
94 ENDDO
95 500 RETURN
#define mumps_abort
Definition VE_Metis.h:25
#define min(a, b)
Definition macros.h:20
subroutine mumps_ldltpanel_nbtarget(npiv, nb_target, keep)

◆ smumps_compact_factors_unsym()

subroutine smumps_compact_factors_unsym ( real, dimension(sizea), intent(inout) a,
integer, intent(in) lda,
integer, intent(in) npiv,
integer, intent(in) ncontig,
integer(8), intent(in) sizea )

Definition at line 97 of file sfac_mem_stack_aux.F.

99 IMPLICIT NONE
100 INTEGER, INTENT(IN) :: NCONTIG, NPIV, LDA
101 INTEGER(8), INTENT(IN) :: SIZEA
102 REAL, INTENT(INOUT) :: A(SIZEA)
103 INTEGER I, J
104 INTEGER(8) :: INEW, IOLD
105 inew = int(npiv+1,8)
106 iold = int(lda+1,8)
107 DO i = 2, ncontig
108 DO j = 1, npiv
109 a(inew)=a(iold)
110 inew = inew + 1_8
111 iold = iold + 1_8
112 ENDDO
113 iold = iold + int(lda - npiv,8)
114 ENDDO
115 RETURN

◆ smumps_copy_cb_left_to_right()

subroutine smumps_copy_cb_left_to_right ( real, dimension(la) a,
integer(8), intent(in) la,
integer, intent(in) lda,
integer(8), intent(in) poselt,
integer(8), intent(in) iptrlu,
integer, intent(in) npiv,
integer, intent(in) nbcol_stack,
integer, intent(in) nbrow_stack,
integer, intent(in) nbrow_send,
integer(8), intent(in) sizecb,
integer, dimension(500) keep,
logical, intent(in) packed_cb )

Definition at line 193 of file sfac_mem_stack_aux.F.

197 IMPLICIT NONE
198 INTEGER(8), intent (in) :: POSELT, IPTRLU, LA, SIZECB
199 LOGICAL, intent (in) :: PACKED_CB
200 REAL A(LA)
201 INTEGER, intent(in):: LDA, NPIV, NBCOL_STACK, NBROW_STACK,
202 & NBROW_SEND
203 INTEGER(8) :: APOS, NPOS, APOS_ini, NPOS_ini
204 INTEGER I, KEEP(500)
205 INTEGER(8) :: J, LDA8
206#if defined(ZERO_TRIANGLE)
207 REAL ZERO
208 parameter( zero = 0.0e0 )
209#endif
210 lda8 = int(lda,8)
211 npos_ini = iptrlu + 1_8
212 apos_ini = poselt + int(npiv+nbrow_send,8)* lda8 + int(npiv,8)
213!$OMP PARALLEL DO PRIVATE(J, NPOS, APOS) IF (NBROW_STACK > KEEP(360))
214 DO i = 1, nbrow_stack
215 IF (packed_cb) THEN
216 npos = npos_ini + int(i-1,8) * int(i,8)/2_8 +
217 & int(i-1,8) * int(nbrow_send,8)
218 ELSE
219 npos = npos_ini + int(i-1,8) * int(nbcol_stack,8)
220 ENDIF
221 apos = apos_ini + int(i-1,8) * lda8
222 IF (keep(50).EQ.0) THEN
223 DO j = 1_8, int(nbcol_stack,8)
224 a(npos+j-1_8) = a(apos+j-1_8)
225 ENDDO
226 ELSE
227 DO j = 1_8, int(i + nbrow_send,8)
228 a(npos+j-1_8)=a(apos+j-1_8)
229 ENDDO
230#if defined(ZERO_TRIANGLE)
231 IF (.NOT. packed_cb) THEN
232 a(npos+int(i+nbrow_send,8):
233 & npos+int(nbcol_stack-1,8))=zero
234 ENDIF
235#endif
236 ENDIF
237 ENDDO
238!$OMP END PARALLEL DO
239 RETURN

◆ smumps_copy_cb_right_to_left()

subroutine smumps_copy_cb_right_to_left ( real, dimension(la) a,
integer(8), intent(in) la,
integer, intent(in) lda,
integer(8), intent(in) poselt,
integer(8), intent(in) iptrlu,
integer, intent(in) npiv,
integer, intent(in) nbcol_stack,
integer, intent(in) nbrow_stack,
integer, intent(in) nbrow_send,
integer(8), intent(in) sizecb,
integer, dimension(500) keep,
logical, intent(in) packed_cb,
integer(8), intent(in) last_allowed,
integer, intent(inout) nbrow_already_stacked )

Definition at line 117 of file sfac_mem_stack_aux.F.

122 IMPLICIT NONE
123 INTEGER(8), intent (in) :: POSELT, IPTRLU, LA, SIZECB
124 LOGICAL, intent (in) :: PACKED_CB
125 REAL A(LA)
126 INTEGER, intent(in):: LDA, NPIV, NBCOL_STACK, NBROW_STACK,
127 & NBROW_SEND
128 INTEGER, intent(inout) :: NBROW_ALREADY_STACKED
129 INTEGER(8), intent(in) :: LAST_ALLOWED
130 INTEGER(8) :: APOS, NPOS
131 INTEGER NBROW
132 INTEGER(8) :: J
133 INTEGER I, KEEP(500)
134#if defined(ZERO_TRIANGLE)
135 REAL ZERO
136 parameter( zero = 0.0e0 )
137#endif
138 nbrow = nbrow_stack + nbrow_send
139 IF (nbrow_stack .NE. 0 ) THEN
140 npos = iptrlu + sizecb
141 apos = poselt + int(npiv+nbrow,8)
142 & * int(lda,8) - 1_8
143 IF ( keep(50) .EQ. 0 .OR. .NOT. packed_cb ) THEN
144 apos = apos - int(lda,8) * int(nbrow_already_stacked,8)
145 npos = npos
146 & - int(nbcol_stack,8) * int(nbrow_already_stacked,8)
147 ELSE
148 apos = apos - int(lda - 1,8) * int(nbrow_already_stacked,8)
149 npos = npos - ( int(nbrow_already_stacked,8) *
150 & int(nbrow_already_stacked+1,8) ) / 2_8
151 ENDIF
152 DO i = nbrow - nbrow_already_stacked, nbrow_send+1, -1
153 IF (keep(50).EQ.0) THEN
154 IF ( npos - int(nbcol_stack,8) + 1_8 .LT.
155 & last_allowed ) THEN
156 EXIT
157 ENDIF
158 DO j= 1_8,int(nbcol_stack,8)
159 a(npos-j+1_8) = a(apos-j+1_8)
160 ENDDO
161 npos = npos - int(nbcol_stack,8)
162 ELSE
163 IF (.NOT. packed_cb) THEN
164 IF ( npos - int(nbcol_stack,8) + 1_8 .LT.
165 & last_allowed ) THEN
166 EXIT
167 ENDIF
168#if defined(ZERO_TRIANGLE)
169 DO j = 1_8, int(nbcol_stack - i,8)
170 a(npos - j + 1_8) = zero
171 END DO
172#endif
173 npos = npos + int(- nbcol_stack + i,8)
174 ENDIF
175 IF ( npos - int(i,8) + 1_8 .LT. last_allowed ) THEN
176 EXIT
177 ENDIF
178 DO j =1_8, int(i,8)
179 a(npos-j+1_8) = a(apos-j+1_8)
180 ENDDO
181 npos = npos - int(i,8)
182 ENDIF
183 IF (keep(50).EQ.0) THEN
184 apos = apos - int(lda,8)
185 ELSE
186 apos = apos - int(lda + 1,8)
187 ENDIF
188 nbrow_already_stacked = nbrow_already_stacked + 1
189 ENDDO
190 END IF
191 RETURN