17 INTEGER,
INTENT(IN) :: LDA, NPIV, NBROW
18 INTEGER(8),
INTENT(IN) :: SIZEA
19 INTEGER,
INTENT(IN) :: IW( NPIV )
21 DOUBLE PRECISION :: A(SIZEA)
22 INTEGER(8) :: IOLD, INEW, J8
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
29 IF ( keep(459) .GT. 1 .AND. keep(50) .NE. 0 )
THEN
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
36 inew = int(npiv + 1,8)
37 IF (iold .EQ. inew )
THEN
38 WRITE(*,*)
" Internal error in DMUMPS_COMPACT_FACTORS",
43 IF ( i .LE. npiv-2 )
THEN
48 DO j8 = 0_8, int(ilast,8)
49 a( inew + j8 ) = a( iold + j8 )
51 inew = inew + int(npiv,8)
52 iold = iold + int(lda,8)
54 nbrow_l_rectangle_to_move = nbrow
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
65 DO WHILE ( icol_beg .LE. npiv )
67 icol_end =
min(nb_target * nbpanels, npiv)
68 IF ( iw( icol_end ) < 0 )
THEN
69 icol_end = icol_end + 1
71 nbcols_panel = icol_end - icol_beg + 1
72 iold = int(icol_beg-1,8) * int(lda,8) + int(icol_beg,8)
74 IF (iold .NE. inew)
THEN
75 DO j8=0,
min(i+1, nbcols_panel)-1
76 a(inew+j8) = a(iold+j8)
79 inew = inew + int(nbcols_panel,8)
80 iold = iold + int(lda,8)
82 nbrows_panel = nbrows_panel - nbcols_panel
83 icol_beg = icol_end + 1
85 iold = 1_8 + int(lda,8)*int(npiv,8)
86 nbrow_l_rectangle_to_move = nbrow
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 )
92 inew = inew + int(npiv,8)
93 iold = iold + int(lda,8)
119 & NBCOL_STACK, NBROW_STACK,
120 & NBROW_SEND, SIZECB, KEEP, PACKED_CB,
121 & LAST_ALLOWED, NBROW_ALREADY_STACKED )
123 INTEGER(8),
intent (in) :: POSELT, IPTRLU, LA, SIZECB
124 LOGICAL,
intent (in) :: PACKED_CB
126INTEGER,
intent(in):: , NPIV, NBCOL_STACK, NBROW_STACK,
128 INTEGER,
intent(inout) :: NBROW_ALREADY_STACKED
129 INTEGER(8),
intent(in) :: LAST_ALLOWED
130 INTEGER(8) :: APOS, NPOS
134#if defined(ZERO_TRIANGLE)
135 DOUBLE PRECISION ZERO
136 parameter( zero = 0.0d0 )
138 nbrow = nbrow_stack + nbrow_send
139 IF (nbrow_stack .NE. 0 )
THEN
140 npos = iptrlu + sizecb
141 apos = poselt + int(npiv+nbrow,8)
143 IF ( keep(50) .EQ. 0 .OR. .NOT. packed_cb )
THEN
144 apos = apos - int(lda,8) * int(nbrow_already_stacked,8)
146 & - int(nbcol_stack,8) * int(nbrow_already_stacked,8)
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
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
158 DO j= 1_8,int(nbcol_stack,8)
159 a(npos-j+1_8) = a(apos-j+1_8)
161 npos = npos - int(nbcol_stack,8)
163 IF (.NOT. packed_cb)
THEN
164 IF ( npos - int(nbcol_stack,8) + 1_8 .LT.
165 & last_allowed )
THEN
168#if defined(ZERO_TRIANGLE)
169 DO j = 1_8, int(nbcol_stack - i,8)
170 a(npos - j + 1_8) = zero
173 npos = npos + int(- nbcol_stack + i,8)
175 IF ( npos - int(i,8) + 1_8 .LT. last_allowed )
THEN
179 a(npos-j+1_8) = a(apos-j+1_8)
181 npos = npos - int(i,8)
183 IF (keep(50).EQ.0)
THEN
184 apos = apos - int(lda,8)
186 apos = apos - int(lda + 1,8)
188 nbrow_already_stacked = nbrow_already_stacked + 1
195 & NBCOL_STACK, NBROW_STACK,
196 & NBROW_SEND, SIZECB, KEEP, PACKED_CB)
198 INTEGER(8),
intent (in) :: POSELT, IPTRLU, LA, SIZECB
199 LOGICAL,
intent (in) :: PACKED_CB
200 DOUBLE PRECISION A(LA)
201 INTEGER,
intent(in):: LDA, NPIV, NBCOL_STACK, NBROW_STACK,
203 INTEGER(8) :: APOS, NPOS, APOS_ini, NPOS_ini
205 INTEGER(8) :: J, LDA8
206#if defined(ZERO_TRIANGLE)
207 DOUBLE PRECISION ZERO
208 parameter( zero = 0.0d0 )
211 npos_ini = iptrlu + 1_8
212 apos_ini = poselt + int(npiv+nbrow_send,8)* lda8 + int(npiv,8)
214 DO i = 1, nbrow_stack
216 npos = npos_ini + int(i-1,8) * int(i,8)/2_8 +
217 & int(i-1,8) * int(nbrow_send,8)
219 npos = npos_ini + int(i-1,8) * int(nbcol_stack,8)
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)
227 DO j = 1_8, int(i + nbrow_send,8)
228 a(npos+j-1_8)=a(apos+j-1_8)
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
subroutine dmumps_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 dmumps_copy_cb_left_to_right(a, la, lda, poselt, iptrlu, npiv, nbcol_stack, nbrow_stack, nbrow_send, sizecb, keep, packed_cb)