16 & POSWCB,IWPOSCB,PTRICB,PTRACB)
18 INTEGER(8),
INTENT(IN) :: LWC
19 INTEGER(8),
INTENT(INOUT) :: POSWCB
20 INTEGER N,LIWW,IWPOSCB, KEEP28
21 INTEGER IWCB(LIWW),PTRICB(KEEP28)
22 INTEGER(8) :: PTRACB(KEEP28)
25 IF ( iwposcb .eq. liww )
RETURN
26 DO WHILE ( iwcb( iwposcb + 2 ) .eq. 0 )
27 sizfr = iwcb( iwposcb + 1 )
29 iwposcb = iwposcb + sizfi
30 poswcb = poswcb + sizfr
31 IF ( iwposcb .eq. liww )
RETURN
36 & POSWCB,IWPOSCB,PTRICB,PTRACB)
38 INTEGER(8),
INTENT(IN) :: LWC
39 INTEGER(8),
INTENT(INOUT) :: POSWCB
40 INTEGER N,LIWW,IWPOSCB,KEEP28
41 INTEGER IWCB(LIWW),PTRICB(KEEP28)
42 INTEGER(8) :: PTRACB(KEEP28)
44 INTEGER IPTIW,SIZFI,LONGI
45 INTEGER(8) :: IPTA, LONGR, SIZFR, I8
51 IF ( iptiw .EQ. liww )
RETURN
53 IF (iwcb(iptiw+2).EQ.0)
THEN
54 sizfr = int(iwcb(iptiw+1),8)
58 iwcb(iptiw + sizfi - i) = iwcb(iptiw - i)
61 w(ipta + sizfr - i8) = w(ipta - i8)
65 IF ((ptricb(i).LE.(iptiw+1)).AND.
66 & (ptricb(i).GT.iwposcb) )
THEN
67 ptricb(i) = ptricb(i) + sizfi
68 ptracb(i) = ptracb(i) + sizfr
71 iwposcb = iwposcb + sizfi
73 poswcb = poswcb + sizfr
76 sizfr = int(iwcb(iptiw+1),8)
83 IF (iptiw.NE.liww)
GOTO 10
87 & EFF_SIZE_SCHUR, SYM_PERM )
88 INTEGER,
INTENT(IN) :: N, KEEP(500)
89 INTEGER(8),
INTENT(IN) :: NZ8
90 INTEGER(8),
INTENT(IN) :: KEEP8(150)
91 INTEGER,
INTENT(IN) :: IRN(NZ8), ICN(NZ8)
92 REAL,
INTENT(IN) :: A(NZ8)
93 REAL,
INTENT(OUT) :: Z(N)
94 INTEGER,
INTENT(IN) :: , SYM_PERM(N)
96 LOGICAL :: SKIP_COLinSchur
97 REAL,
PARAMETER :: ZERO = 0.0e0
103 skip_colinschur = (eff_size_schur.GT.0)
104 IF (keep(264).EQ.0)
THEN
105 IF (keep(50) .EQ.0)
THEN
109 IF ((i .LT. 1) .OR. (i .GT. n)) cycle
110 IF ((j .LT. 1) .OR. (j .GT. n)) cycle
111 IF ( skip_colinschur.AND.
112 & (sym_perm(j).GT.n-eff_size_schur)) cycle
113 IF ( skip_colinschur.AND.
114 & (sym_perm(i).GT.n-eff_size_schur)) cycle
115 z(i) = z(i) + abs(a(k))
121 IF ((i .LT. 1) .OR. (i .GT. n)) cycle
122 IF ((j .LT. 1) .OR. (j .GT. n)) cycle
123 IF ( skip_colinschur.AND.
124 & ( (sym_perm(i).GT.n-eff_size_schur)
126 & (sym_perm(j).GT.n-eff_size_schur)
129 z(i) = z(i) + abs(a(k))
131 z(j) = z(j) + abs(a(k))
136 IF (keep(50) .EQ.0)
THEN
137 IF (skip_colinschur)
THEN
140 IF ( sym_perm(j).GT.n-eff_size_schur ) cycle
142 IF ( sym_perm(i).GT.n-eff_size_schur ) cycle
143 z(i) = z(i) + abs(a(k))
149 z(i) = z(i) + abs(a(k))
156 IF ( skip_colinschur.AND.
157 & ( (sym_perm(i).GT.n-eff_size_schur)
159 & (sym_perm(j).GT.n-eff_size_schur)
162 z(i) = z(i) + abs(a(k))
164 z(j) = z(j) + abs(a(k))
172 & KEEP, KEEP8, COLSCA,
173 & EFF_SIZE_SCHUR, SYM_PERM )
174 INTEGER,
INTENT(IN) :: N, KEEP(500)
175 INTEGER(8),
INTENT(IN) :: NZ8
176 INTEGER(8),
INTENT(IN) :: KEEP8(150)
177 INTEGER,
INTENT(IN) :: IRN(NZ8), ICN(NZ8)
178 REAL,
INTENT(IN) :: A(NZ8)
179 REAL,
INTENT(IN) :: COLSCA(N)
180 REAL,
INTENT(OUT) :: Z(N)
181 INTEGER,
INTENT(IN) :: EFF_SIZE_SCHUR, SYM_PERM(N)
182 REAL,
PARAMETER :: ZERO = 0.0e0
189 skip_colinschur = (eff_size_schur.GT.0)
190 IF (keep(50) .EQ.0)
THEN
194 IF ((i .LT. 1) .OR. (i .GT. n)) cycle
195 IF ((j .LT. 1) .OR. (j .GT. n)) cycle
196 IF ( skip_colinschur.AND.
197 & (sym_perm(j).GT.n-eff_size_schur)) cycle
198 IF ( skip_colinschur.AND.
199 & (sym_perm(i).GT.n-eff_size_schur)) cycle
200 z(i) = z(i) + abs(a(k)*colsca(j))
206 IF ((i .LT. 1) .OR. (i .GT. n)) cycle
207 IF ((j .LT. 1) .OR. (j .GT. n)) cycle
208 IF ( skip_colinschur.AND.
209 & ( (sym_perm(i).GT.n-eff_size_schur)
211 & (sym_perm(j).GT.n-eff_size_schur)
214 z(i) = z(i) + abs(a(k)*colsca(j))
216 z(j) = z(j) + abs(a(k)*colsca(i))
225 INTEGER,
INTENT(IN) :: N, KEEP(500)
226 INTEGER(8),
INTENT(IN) :: NZ8
227 INTEGER(8),
INTENT(IN) :: KEEP8(150)
228 INTEGER,
INTENT(IN) :: IRN(NZ8), ICN(NZ8)
229 REAL,
INTENT(IN) :: A(NZ8), RHS(N), X(N)
230 REAL,
INTENT(OUT) :: W(N)
231 REAL,
INTENT(OUT) :: R(N)
234 REAL,
PARAMETER :: ZERO = 0.0e0
240 IF (keep(264).EQ.0)
THEN
241 IF (keep(50) .EQ.0)
THEN
245 IF ((i .GT. n) .OR. (j .GT. n) .OR. (i .LT. 1) .OR.
255 IF ((i .GT. n) .OR. (j .GT. n) .OR. (i .LT. 1) .OR.
268 IF (keep(50) .EQ.0)
THEN
294 INTEGER,
intent(in) :: N
295 REAL,
intent(in) :: W(N)
296 REAL,
intent(inout) :: R(N)
304 INTEGER,
intent(in) :: N
305 INTEGER,
intent(inout) :: KASE
308 REAL,
intent(inout) :: EST
309 INTEGER,
intent(in) :: GRAIN
310 INTRINSIC abs, nint, real, sign
311 INTEGER SMUMPS_IXAMAX
312 EXTERNAL smumps_ixamax
315 INTEGER I, ITER, J, JLAST, JUMP
318 SAVE iter, j, jlast, jump
320 parameter( zero = 0.0e0 )
321 parameter( one = 1.0e0 )
322 REAL,
PARAMETER :: RZERO = 0.0e0
323 REAL,
PARAMETER :: RONE = 1.0e0
324 IF (kase .EQ. 0)
THEN
352 x(i) = sign( rone,real(x(i)) )
353 iw(i) = nint(real(x(i)))
359 j = smumps_ixamax(n, x, 1, grain)
374 IF (nint(sign(rone, real(x(i)))) .NE. iw(i))
GOTO 100
379 x(i) = sign(rone, real(x(i)))
380 iw(i) = nint(real(x(i)))
387 j = smumps_ixamax(n, x, 1, grain)
388 IF ((abs(x(jlast)) .NE. abs(x(j))) .AND. (iter .LT. itmax))
THEN
395 est = est + abs(w(i))
399 x(i) = altsgn * (rone + real(i - 1) / real(n - 1))
408 temp = temp + abs(x(i))
410 temp = 2.0e0 * temp / real(3 * n)
411 IF (temp .GT. est)
THEN
421 & LHS, WRHS, W, RHS, KEEP,KEEP8)
424 INTEGER(8),
INTENT(IN) :: NZ8
425 INTEGER,
INTENT(IN) :: IRN( NZ8 ), ( NZ8 )
427 INTEGER(8) KEEP8(150)
428 REAL,
INTENT(IN) :: ASPK( NZ8 )
429 REAL,
INTENT(IN) :: LHS( N ), WRHS( N )
430 REAL,
INTENT(OUT):: RHS( N )
431 REAL,
INTENT(OUT):: W( N )
434 REAL,
PARAMETER :: DZERO = 0.0e0
439 IF ( keep(50) .EQ. 0 )
THEN
440 IF (mtype .EQ. 1)
THEN
441 IF (keep(264).EQ.0)
THEN
445 IF ((i .LE. 0) .OR. (i .GT. n) .OR. (j .LE. 0) .OR.
447 rhs(i) = rhs(i) - aspk(k8) * lhs(j)
448 w(i) = w(i) + abs(aspk(k8))
454 rhs(i) = rhs(i) - aspk(k8) * lhs(j)
455 w(i) = w(i) + abs(aspk(k8))
459 IF (keep(264).EQ.0)
THEN
463 IF ((i .LE. 0) .OR. (i .GT. n) .OR. (j .LE. 0) .OR.
465 rhs(j) = rhs(j) - aspk(k8) * lhs(i)
466 w(j) = w(j) + abs(aspk(k8))
472 rhs(j) = rhs(j) - aspk(k8) * lhs(i)
473 w(j) = w(j) + abs(aspk(k8))
478 IF (keep(264).EQ.0)
THEN
482 IF ((i .LE. 0) .OR. (i .GT. n) .OR. (j .LE. 0) .OR.
484 rhs(i) = rhs(i) - aspk(k8) * lhs(j)
485 w(i) = w(i) + abs(aspk(k8))
487 rhs(j) = rhs(j) - aspk(k8) * lhs(i)
488 w(j) = w(j) + abs(aspk(k8))
495 rhs(i) = rhs(i) - aspk(k8) * lhs(j)
496 w(i) = w(i) + abs(aspk(k8))
498 rhs(j) = rhs(j) - aspk(k8) * lhs(i)
499 w(j) = w(j) + abs(aspk(k8))
507 & NELT, ELTPTR, LELTVAR, ELTVAR, NA_ELT8, A_ELT,
508 & LHS, WRHS, W, RHS, KEEP,KEEP8 )
510 INTEGER MTYPE, N, NELT, LELTVAR
511 INTEGER(8),
INTENT(IN) :: NA_ELT8
512 INTEGER ELTPTR(NELT+1), ELTVAR(LELTVAR)
514 INTEGER(8) KEEP8(150)
516REAL LHS( N ), WRHS( N ), RHS( N )
519 & lhs, rhs, keep(50), mtype )
522 & nelt, eltptr, leltvar, eltvar, na_elt8, a_elt,
527 & NELT, ELTPTR, LELTVAR, ELTVAR, NA_ELT8, A_ELT,
530 INTEGER MTYPE, N, NELT, LELTVAR
531 INTEGER(8),
INTENT(IN) :: NA_ELT8
532 INTEGER ELTPTR(+1), ELTVAR(LELTVAR)
534 INTEGER(8) KEEP8(150)
538 INTEGER I, J, IEL, SIZEI, IELPTR
541 parameter(dzero = 0.0e0)
545 sizei = eltptr( iel + 1 ) - eltptr( iel )
546 ielptr = eltptr( iel ) - 1
547 IF ( keep(50).EQ.0 )
THEN
551 w( eltvar( ielptr + i) ) =
552 & w( eltvar( ielptr + i) )
559 temp = w( eltvar( ielptr + j ) )
561 temp = temp + abs( a_elt(k8))
564 w(eltvar( ielptr + j )) =
565 & w(eltvar( ielptr + j )) + temp
570 w(eltvar( ielptr + j )) =
571 & w(eltvar( ielptr + j )) + abs(a_elt( k8 ))
574 w(eltvar( ielptr + j )) =
575 & w(eltvar( ielptr + j )) + abs(a_elt( k8 ))
576 w(eltvar( ielptr + i ) ) =
577 & w(eltvar( ielptr + i )) + abs(a_elt( k8 ))
586 & NELT, ELTPTR, LELTVAR, ELTVAR, NA_ELT8, A_ELT,
587 & W, KEEP,KEEP8, COLSCA )
589 INTEGER MTYPE, N, NELT, LELTVAR
590 INTEGER(8),
INTENT(IN) :: NA_ELT8
591 INTEGER ELTPTR(NELT+1), ELTVAR(LELTVAR)
593 INTEGER(8) KEEP8(150)
598 INTEGER I, J, IEL, , IELPTR
601 parameter(dzero = 0.0e0)
605 sizei = eltptr( iel + 1 ) - eltptr( iel )
606 ielptr = eltptr( iel ) - 1
607 IF ( keep(50).EQ.0 )
THEN
610 temp2 = abs(colsca(eltvar( ielptr + j) ))
612 w( eltvar( ielptr + i) ) =
613 & w( eltvar( ielptr + i) )
614 & + abs(a_elt( k8 )) * temp2
620 temp = w( eltvar( ielptr + j ) )
621 temp2= abs(colsca(eltvar( ielptr + j) ))
623 temp = temp + abs(a_elt( k8 )) * temp2
626 w(eltvar( ielptr + j )) =
627 & w(eltvar( ielptr + j )) + temp
632 w(eltvar( ielptr + j )) =
633 & w(eltvar( ielptr + j )) +
634 & abs( a_elt( k8 )*colsca(eltvar
637 w(eltvar( ielptr + j )) =
638 & w(eltvar( ielptr + j )) +
639 & abs(a_elt( k8 )*colsca(eltvar( ielptr + j)))
640 w(eltvar( ielptr + i ) ) =
641 & w(eltvar( ielptr + i )) +
642 & abs(a_elt( k8 )*colsca(eltvar( ielptr + i)))
651 & LELTVAR, ELTVAR, NA_ELT8, A_ELT,
652 & SAVERHS, X, Y, W, K50 )
654 INTEGER N, NELT, K50, MTYPE, LELTVAR
655 INTEGER(8) :: NA_ELT8
656 INTEGER ELTPTR( NELT + 1 ), ELTVAR( LELTVAR )
657 REAL A_ELT( NA_ELT8 ), X( N ), Y( N ),
660 INTEGER IEL, I , J, K, SIZEI, IELPTR
664 parameter( zero = 0.0e0 )
669 sizei = eltptr( iel + 1 ) - eltptr( iel )
670 ielptr = eltptr( iel ) - 1
671 IF ( k50 .eq. 0 )
THEN
672 IF ( mtype .eq. 1 )
THEN
674 temp = x( eltvar( ielptr + j ) )
676 y( eltvar( ielptr + i ) ) =
677 & y( eltvar( ielptr + i ) ) -
679 w( eltvar( ielptr + i ) ) =
680 & w( eltvar( ielptr + i ) ) +
681 & abs( a_elt( k ) * temp )
687 temp = y( eltvar( ielptr + j ) )
688 temp2 = w( eltvar( ielptr + j ) )
691 & a_elt( k ) * x( eltvar( ielptr + i )
693 & a_elt( k ) * x( eltvar( ielptr + i ) ) )
696 y( eltvar( ielptr + j ) ) = temp
697 w( eltvar( ielptr + j ) ) = temp2
702 y( eltvar( ielptr + j ) ) =
703 & y( eltvar( ielptr + j ) ) -
704 & a_elt( k ) * x( eltvar( ielptr + j ) )
705 w( eltvar( ielptr + j ) ) =
706 & w( eltvar( ielptr + j ) ) + abs(
707 & a_elt( k ) * x( eltvar( ielptr + j ) ) )
710 y( eltvar( ielptr + i ) ) =
711 & y( eltvar( ielptr + i ) ) -
712 & a_elt( k ) * x( eltvar( ielptr + j ) )
713 y( eltvar( ielptr + j ) ) =
714 & y( eltvar( ielptr + j ) ) -
715 & a_elt( k ) * x( eltvar( ielptr + i ) )
716 w( eltvar( ielptr + i ) ) =
717 & w( eltvar( ielptr + i ) ) + abs(
718 & a_elt( k ) * x( eltvar( ielptr + j
719 w( eltvar( ielptr + j ) ) =
720 & w( eltvar( ielptr + j ) ) + abs(
721 & a_elt( k ) * x( eltvar( ielptr + i ) ) )
730 & INODE,PTRFAC,KEEP,A,LA,STEP,
731 & KEEP8,N,MUST_BE_PERMUTED,IERR)
734 INTEGER INODE,KEEP(500),N
735 INTEGER(8) KEEP8(150)
737 INTEGER(8) :: PTRFAC(KEEP(28))
742 LOGICAL MUST_BE_PERMUTED
744 & keep(28),a,la,ierr)
755 & a(ptrfac(step(inode))),
767 must_be_permuted=.true.
770 must_be_permuted=.false.
778 TYPE(smumps_struc),
TARGET :: id
779 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: LOCAL_LIST
780 INTEGER :: I,IERR,TMP,NSTEPS,N_LOCAL_LIST
781 INTEGER :: MASTER,TAG_SIZE,TAG_LIST
782 INTEGER :: STATUS(MPI_STATUS_SIZE)
783 LOGICAL :: I_AM_SLAVE
784 parameter(master=0, tag_size=85,tag_list=86)
785 i_am_slave = (id%MYID .NE. master
786 & .OR. ((id%MYID.EQ.master).AND.(id%KEEP(46).EQ.1)))
788 ALLOCATE(local_list(nsteps),stat=ierr)
790 WRITE(*,*)
'Problem in solve: error allocating LOCAL_LIST'
796 IF(id%PTLUST_S(i).NE.0)
THEN
797 n_local_list = n_local_list + 1
798 local_list(n_local_list) = i
801 IF(id%MYID.NE.master)
THEN
803 & mpi_integer, master, tag_size, id%COMM,ierr)
804 CALL mpi_send(local_list, n_local_list,
805 & mpi_integer, master, tag_list, id%COMM,ierr)
806 DEALLOCATE(local_list)
807 ALLOCATE(id%IPTR_WORKING(1),
811 WRITE(*,*)
'Problem in solve: error allocating ',
812 &
'IPTR_WORKING and WORKING'
817 IF(id%MYID.EQ.master)
THEN
818 ALLOCATE(id%IPTR_WORKING(id%NPROCS+1), stat=ierr)
820 WRITE(*,*)
'Problem in solve: error allocating IPTR_WORKING'
824 id%IPTR_WORKING(1) = 1
825 id%IPTR_WORKING(master+2) = n_local_list
827 CALL mpi_recv(tmp, 1, mpi_integer, mpi_any_source,
828 & tag_size, id%COMM, status, ierr)
829 id%IPTR_WORKING(status(mpi_source)+2) = tmp
832 id%IPTR_WORKING(i) = id%IPTR_WORKING(i)
833 & + id%IPTR_WORKING(i-1)
835 ALLOCATE(id%WORKING(id%IPTR_WORKING(id%NPROCS+1)-1),stat=ierr)
837 WRITE(*,*)
'Problem in solve: error allocating LOCAL_LIST'
842 id%WORKING(id%IPTR_WORKING(tmp):id%IPTR_WORKING(tmp+1)-1)
843 & = local_list(1:id%IPTR_WORKING(tmp+1)
844 & -id%IPTR_WORKING(tmp))
847 CALL mpi_recv(local_list, nsteps, mpi_integer,
848 & mpi_any_source, tag_list, id%COMM, status, ierr)
849 tmp = status(mpi_source)+1
850 id%WORKING(id%IPTR_WORKING(tmp):id%IPTR_WORKING(tmp+1)-1)
851 & = local_list(1:id%IPTR_WORKING(tmp+1)-
852 & id%IPTR_WORKING(tmp))
854 DEALLOCATE(local_list)
858 & X, Y, R_W, C_W, IW, IFLAG,
859 & OMEGA, NOITER, TESTConv,
872 INTEGER,
intent(in) :: GRAIN
873 REAL,
PARAMETER :: CGCE=0.2e0
874 REAL,
PARAMETER :: CTAU=1.0e3
879 REAL,
PARAMETER :: ZERO=0.0e0
880 REAL,
PARAMETER :: =1.0e0
881 INTEGER SMUMPS_IXAMAX
884 imax = smumps_ixamax(n, x, 1, grain)
889 tau = (r_w(i, 2) * dxmax + abs(rhs(i))) * real(n) * ctau
890 dd = r_w(i, 1) + abs(rhs(i))
891 IF (dd .GT. tau * epsilon(ctau))
THEN
892 omega(1) =
max(omega(1), abs(y(i)) / dd)
895 IF (tau .GT. zero)
THEN
896 omega(2) =
max(omega(2),
897 & abs(y(i)) / (dd + r_w(i, 2) * dxmax))
903 om2 = omega(1) + omega(2)
904 IF (om2 .LT. arret )
THEN
908 IF (noiter .GE. 1)
THEN
909 IF (om2 .GT. om1 * cgce)
THEN
910 IF (om2 .GT. om1)
THEN
936 & X, Y, D, R_W, C_W, IW, KASE,
940 INTEGER N, KASE, KEEP(500)
941 INTEGER(8) KEEP8(150)
949 REAL COND(2),OMEGA(2)
950 LOGICAL LCOND1, LCOND2
951 INTEGER JUMP, I, IMAX
954 REAL,
PARAMETER :: ZERO = 0.0e0
955 REAL,
PARAMETER :: ONE = 1.0e0
956 INTEGER SMUMPS_IXAMAX
958 SAVE lcond1, lcond2, jump, dximax, dxmax
959 IF (kase .EQ. 0)
THEN
983 imax = smumps_ixamax(n, x, 1, keep(361))
986 IF (iw(i, 1) .EQ. 1)
THEN
987 r_w(i, 1) = r_w(i, 1) + abs(rhs(i))
991 r_w(i, 2) = r_w(i, 2) * dxmax + r_w(i, 1)
999 imax = smumps_ixamax(n, c_w(1), 1, keep(361))
1000 dximax = abs(c_w(imax))
1001 IF (.NOT.lcond1)
GOTO 130
1003 CALL smumps_sol_b(n, kase, y, cond(1), c_w, iw(1, 2), keep(361))
1004 IF (kase .EQ. 0)
GOTO 120
1014 IF (dximax .GT. zero) cond(1) = cond(1) / dximax
1015 erx = omega(1) * cond(1)
1020 CALL smumps_sol_b(n, kase, y, cond(2), c_w, iw(1, 2), keep(361))
1021 IF (kase .EQ. 0)
GOTO 160
1030 160
IF (dximax .GT. zero)
THEN
1031 cond(2) = cond(2) / dximax
1033 erx = erx + omega(2) * cond(2)
1038 & KEEP, RHSCOMP, NRHS, LRHSCOMP, FIRST_ROW_RHSCOMP, W, LD_W,
1040 INTEGER :: JBDEB, JBFIN, NBROWS
1041 INTEGER :: NRHS, LRHSCOMP
1042 INTEGER :: FIRST_ROW_RHSCOMP
1043 INTEGER,
INTENT(IN) :: KEEP(500)
1044 REAL,
INTENT(INOUT) :: RHSCOMP(LRHSCOMP,NRHS)
1045 INTEGER :: LD_W, FIRST_ROW_W
1046 REAL :: W(LD_W*(JBFIN-JBDEB+1))
1047 INTEGER :: , K, ISHIFT
1052 ishift = first_row_w + ld_w * (k-jbdeb)
1054 rhscomp(first_row_rhscomp+jj,k) = w(ishift+jj)
1061 & RHSCOMP, NRHS, LRHSCOMP, W, LD_W, FIRST_ROW_W,
1062 & IW, LIW, KEEP, N, POSINRHSCOMP_BWD )
1063 INTEGER,
INTENT(IN) :: JBDEB, JBFIN, J1, J2
1064 INTEGER,
INTENT(IN) :: NRHS, LRHSCOMP
1065 INTEGER,
INTENT(IN) :: FIRST_ROW_W, LD_W, LIW
1066 INTEGER,
INTENT(IN) :: IW(LIW)
1067 INTEGER,
INTENT(IN) :: KEEP(500)
1068 REAL,
INTENT(INOUT) :: RHSCOMP(LRHSCOMP,NRHS)
1069 REAL :: W(LD_W*(JBFIN-JBDEB+1))
1070 INTEGER,
INTENT(IN) :: N
1071 INTEGER,
INTENT(IN) :: POSINRHSCOMP_BWD(N)
1072 INTEGER :: ISHIFT, JJ, K, IPOSINRHSCOMP
1077 ishift = first_row_w+(k-jbdeb)*ld_w
1079 iposinrhscomp = abs(posinrhscomp_bwd(iw(jj)))
1080 w(ishift+jj-j1)= rhscomp(iposinrhscomp,k)
1087 & LHS, WRHS, W, RES, GIVNORM, ANORM, XNORM, SCLNRM,
1088 & MPRINT, ICNTL, KEEP,KEEP8)
1089 INTEGER MTYPE,N,IFLAG,ICNTL(60), KEEP(500)
1090 INTEGER(8) KEEP8(150)
1094 REAL RESMAX,RESL2,XNORM, SCLNRM
1096 LOGICAL GIVNORM,PROK
1099 INTRINSIC abs,
max, sqrt
1101 prok = (mprint .GT. 0)
1103 IF (.NOT.givnorm) anorm = dzero
1107 resmax =
max(resmax, abs(res(k)))
1108 resl2 = resl2 + abs(res(k)) * abs(res(k))
1109 IF (.NOT.givnorm) anorm =
max(anorm, w(k))
1113 xnorm =
max(xnorm, abs(lhs(k)))
1115 IF ( xnorm .EQ. dzero .OR. (exponent(xnorm) .LT.
1116 & minexponent(xnorm) + keep(122) )
1118 & ( exponent(anorm)+exponent(xnorm) .LT.
1119 & minexponent(xnorm) + keep(122) )
1121 & ( exponent(anorm) + exponent(xnorm) -exponent(resmax)
1122 & .LT. minexponent(xnorm) + keep(122) )
1124 IF (mod(iflag/2,2) .EQ. 0)
THEN
1127 IF ((mp .GT. 0) .AND. (icntl(4) .GE. 2))
WRITE( mp, * )
1128 &
' max-NORM of computed solut. is zero or close to zero. '
1130 IF (resmax .EQ. dzero)
THEN
1133 sclnrm = resmax / (anorm * xnorm)
1136 IF (prok)
WRITE( mprint, 90 ) resmax, resl2, anorm, xnorm,
1138 90
FORMAT (/
' RESIDUAL IS ............ (MAX-NORM) =',1pd9.2/
1139 &
' .. (2-NORM) =',1pd9.2/
1140 &
' RINFOG(4):NORM OF input Matrix (MAX-NORM)=',1pd9.2/
1141 &
' RINFOG(5):NORM OF Computed SOLUT (MAX-NORM)=',1pd9.2/
1142 &
' RINFOG(6):SCALED RESIDUAL ...... (MAX-NORM)=',1pd9.2)
1146 & NRHS_B, WCB, LWCB, LDA_WCB, PPIV_COURANT, MTYPE, KEEP)
1147 INTEGER,
INTENT(IN) :: MTYPE, LDADIAG, NPIV, KEEP(500)
1148 INTEGER,
INTENT(IN) :: NRHS_B, LDA_WCB
1149 INTEGER(8),
INTENT(IN) :: LA, APOS, LWCB, PPIV_COURANT
1150 REAL,
INTENT(IN) :: A(LA)
1151 REAL,
INTENT(INOUT) :: WCB(LWCB)
1153 PARAMETER (ONE = 1.0e0)
1154 IF (keep(50).NE.0 .OR. mtype .eq. 1 )
THEN
1155#
if defined(mumps_use_blas2)
1156 IF ( nrhs_b == 1 )
THEN
1157 CALL strsv(
'U',
'T',
'U', npiv, a(apos), ldadiag,
1158 & wcb(ppiv_courant), 1 )
1161 CALL strsm(
'L',
'U',
'T',
'U', npiv, nrhs_b, one,
1162 & a(apos), ldadiag, wcb(ppiv_courant),
1164#if defined(MUMPS_USE_BLAS2)
1168#if defined(MUMPS_USE_BLAS2)
1169 IF ( nrhs_b == 1 )
THEN
1170 CALL strsv(
'L',
'N',
'N', npiv, a(apos), ldadiag,
1171 & wcb(ppiv_courant), 1 )
1174 CALL strsm(
'L',
'L',
'N',
'N', npiv, nrhs_b, one,
1175 & a(apos), ldadiag, wcb(ppiv_courant),
1177#if defined(MUMPS_USE_BLAS2)
1184 & NRHS_B, WCB, LWCB, LDA_WCB, PPIV_COURANT, MTYPE, KEEP)
1185 INTEGER,
INTENT(IN) :: MTYPE, LDADIAG, NPIV, KEEP(50
1186INTEGER,
INTENT(IN) :: NRHS_B, LDA_WCB
1187 INTEGER(8),
INTENT(IN) :: LA, APOS, LWCB, PPIV_COURANT
1188 REAL,
INTENT(IN) :: A(LA)
1189 REAL,
INTENT(INOUT) :: WCB(LWCB)
1191 PARAMETER (ONE = 1.0e0)
1192 IF (mtype .eq. 1 )
THEN
1193#if defined(MUMPS_USE_BLAS2)
1194 IF ( nrhs_b == 1 )
THEN
1195 CALL strsv(
'L',
'T',
'N', npiv, a(apos), ldadiag,
1196 & wcb(ppiv_courant), 1 )
1199 CALL strsm(
'L',
'L',
'T',
'N', npiv, nrhs_b, one,
1200 & a(apos), ldadiag, wcb(ppiv_courant),
1202#if defined(MUMPS_USE_BLAS2)
1206#if defined(MUMPS_USE_BLAS2)
1207 IF ( nrhs_b == 1 )
THEN
1208 CALL strsv(
'U',
'N',
'U', npiv, a(apos), ldadiag,
1209 & wcb(ppiv_courant), 1 )
1212 CALL strsm(
'L',
'U',
'N',
'U', npiv, nrhs_b, one,
1213 & a(apos), ldadiag, wcb(ppiv_courant),
1215#if defined(MUMPS_USE_BLAS2)
1222 & A, LA, APOS, NPIV, IW,
1223 & NRHS_B, WCB, LWCB, LDA_WCB,
1224 & PPIV_COURANT, MTYPE, KEEP)
1225 INTEGER,
INTENT(IN) :: MTYPE, NPIV, KEEP(500)
1226 INTEGER,
INTENT(IN) :: IW(NPIV)
1227 INTEGER,
INTENT(IN) :: NRHS_B, LDA_WCB
1228 INTEGER(8),
INTENT(IN) :: LA, APOS, LWCB, PPIV_COURANT
1229 REAL,
INTENT(IN) :: A()
1230 REAL,
INTENT(INOUT) :: WCB(LWCB)
1231 INTEGER :: NB_TARGET
1233 INTEGER :: NBROWS_PANEL, NBCOLS_PANEL, ICOL_BEG, ICOL_END
1234 INTEGER(8) :: PANEL_APOS, PPIV_PANEL
1235 REAL,
PARAMETER :: ONE=1.0e0
1236 IF (keep(459) .LE. 1)
THEN
1237 WRITE(*,*)
" Internal error in SMUMPS_SOLVE_FWD_PANELS"
1245 ppiv_panel = ppiv_courant
1246 DO WHILE ( icol_beg .LE. npiv )
1247 nbpanels = nbpanels + 1
1248 icol_end =
min(nb_target * nbpanels, npiv)
1249 IF ( iw(icol_end) .LT. 0 ) icol_end=icol_end+1
1250 nbcols_panel = icol_end - icol_beg + 1
1252 & nbcols_panel, nbcols_panel,
1253 & nrhs_b, wcb, lwcb, lda_wcb, ppiv_panel, mtype, keep)
1254 IF ( nbrows_panel .GT. nbcols_panel )
THEN
1256 & panel_apos + int(nbcols_panel,8) * int(nbcols_panel,8),
1257 & nbcols_panel, nbcols_panel, nbrows_panel-nbcols_panel,
1258 & nrhs_b, wcb, lwcb, ppiv_panel, lda_wcb,
1259 & ppiv_panel+nbcols_panel, lda_wcb,
1260 & mtype, keep, one )
1262 icol_beg = icol_end + 1
1263 panel_apos = panel_apos + int(nbcols_panel,8) *
1264 & int(nbrows_panel,8)
1265 nbrows_panel = nbrows_panel - nbcols_panel
1266 ppiv_panel = ppiv_panel + nbcols_panel
1271 & A, LA, APOS, NPIV, IW,
1272 & NRHS_B, WCB, LWCB, LDA_WCB,
1273 & PPIV_COURANT, MTYPE, KEEP)
1274 INTEGER,
INTENT(IN) :: MTYPE, , KEEP(500)
1275 INTEGER,
INTENT(IN) :: IW(NPIV)
1276 INTEGER,
INTENT(IN) :: NRHS_B, LDA_WCB
1277 INTEGER(8),
INTENT(IN) :: LA, APOS, LWCB, PPIV_COURANT
1278 REAL,
INTENT(IN) :: A(LA)
1279 REAL,
INTENT(INOUT) :: WCB(LWCB)
1280 INTEGER,
PARAMETER :: PANEL_TABSIZE = 20
1281 INTEGER(8) :: PANEL_POS(PANEL_TABSIZE)
1282 INTEGER :: PANEL_COL(PANEL_TABSIZE)
1283 INTEGER :: IPANEL, NBPANELS, NB_TARGET
1284 INTEGER :: NBROWS_PANEL, NBCOLS_PANEL
1285 INTEGER(8) :: PPIV_PANEL
1286 INTEGER :: MTYPE_TEMP
1287 REAL,
PARAMETER :: ONE=1.0e0
1288 IF (keep(459) .LE. 1)
THEN
1289 WRITE(*,*)
" Internal error 1 in SMUMPS_SOLVE_BWD_PANELS"
1292 IF ( keep(459)+1 .GT. panel_tabsize )
THEN
1293 WRITE(*,*)
" Internal error 2 in SMUMPS_SOLVE_BWD_PANELS"
1297 &nb_target, nbpanels, panel_col, panel_pos, panel_tabsize,
1299 DO ipanel = nbpanels, 1, -1
1300 nbcols_panel = panel_col( ipanel+1 ) - panel_col( ipanel )
1301 nbrows_panel = npiv - panel_col( ipanel ) + 1
1302 ppiv_panel = ppiv_courant + panel_col( ipanel ) - 1
1303 IF ( nbrows_panel .GT. nbcols_panel )
THEN
1306 & apos-1_8+panel_pos(ipanel)+
1307 & int(nbcols_panel,8)*int(nbcols_panel,8),
1308 & nbrows_panel-nbcols_panel, nbcols_panel,
1310 & nrhs_b, wcb, lwcb, ppiv_panel+nbcols_panel, lda_wcb,
1311 & ppiv_panel, lda_wcb,
1312 & mtype_temp, keep, one )
1315 & apos+panel_pos(ipanel)-1_8,
1316 & nbcols_panel, nbcols_panel,
1317 & nrhs_b, wcb, lwcb, lda_wcb, ppiv_panel, mtype, keep)
1322 & (a, la, apos1, nx, lda, ny,
1323 & nrhs_b, wcb, lwcb, ptrx, ldx,
1325 & mtype, keep, coef_y )
1326 INTEGER,
INTENT(IN) :: MTYPE, NY, NX, KEEP(500)
1327 INTEGER,
INTENT(IN) :: NRHS_B, LDY, LDA, LDX
1328 INTEGER(8),
INTENT(IN) :: LA, APOS1, LWCB, PTRX,
1330 REAL,
INTENT(IN) :: A(LA)
1331 REAL,
INTENT(INOUT) :: WCB(LWCB)
1332 REAL,
INTENT(IN) :: COEF_Y
1333 REAL ALPHA, ZERO, ONE
1334 PARAMETER (ZERO = 0.0e0, one = 1.0e0, alpha=-1.0e0)
1335 IF ( nx .NE. 0 .AND. ny.NE.0 )
THEN
1336 IF ( mtype .eq. 1 )
THEN
1337#if defined(MUMPS_USE_BLAS2)
1338 IF ( nrhs_b == 1 )
THEN
1339 CALL sgemv(
'T', nx, ny, alpha, a(apos1),
1340 & lda, wcb(ptrx), 1, coef_y,
1344 CALL sgemm(
'T',
'N', ny, nrhs_b, nx, alpha,
1345 & a(apos1), lda, wcb(ptrx), ldx, coef_y,
1347#if defined(MUMPS_USE_BLAS2)
1351#if defined(MUMPS_USE_BLAS2)
1352 IF ( nrhs_b == 1 )
THEN
1353 CALL sgemv(
'N',ny, nx, alpha, a(apos1),
1354 & lda, wcb(ptrx), 1,
1355 & coef_y, wcb(ptry), 1 )
1358 CALL sgemm(
'N',
'N', ny, nrhs_b, nx, alpha,
1359 & a(apos1), lda, wcb(ptrx), ldx,
1360 & coef_y, wcb(ptry), ldy)
1361#if defined(MUMPS_USE_BLAS2)
1369 & INODE, N, NPIV, LIELL, NELIM, NSLAVES,
1373 & WCB, LWCB, LD_WCBPIV,
1374 & RHSCOMP, LRHSCOMP, NRHS,
1375 & POSINRHSCOMP_FWD, JBDEB, JBFIN,
1376 & MTYPE, KEEP, OOCWRITE_COMPATIBLE_WITH_BLR,
1381 INTEGER,
INTENT(IN) :: MTYPE, INODE, N, NPIV, LIELL,
1383 INTEGER,
INTENT(IN) :: LRHSCOMP, NRHS, LIW, JBDEB, JBFIN
1384 INTEGER,
INTENT(IN) :: IW(LIW), IPOS, POSINRHSCOMP_FWD(N)
1385 INTEGER(8),
INTENT(IN) :: LWCB, APOS, LA, PPIV_COURANT
1386 INTEGER,
INTENT(IN) :: LD_WCBPIV
1387 INTEGER,
INTENT(IN) :: KEEP(500)
1388 REAL,
INTENT(IN) :: WCB( LWCB )
1389 REAL,
INTENT(IN) :: A( LA )
1390 REAL,
INTENT(INOUT) :: (LRHSCOMP, NRHS)
1391 LOGICAL,
INTENT(IN) :: OOCWRITE_COMPATIBLE_WITH_BLR
1392 LOGICAL,
INTENT(IN) ::
1394 INTEGER :: IPOSINRHSCOMP, JJ, K, NBK,
1396 INTEGER(8) :: IFR8 , APOS1, APOS2, APOSOFF, IFR_ini8,
1398 REAL :: VALPIV, A11, A22, A12, DETPIV
1399 INTEGER,
PARAMETER :: PANEL_TABSIZE = 20
1400 INTEGER(8) :: PANEL_POS(PANEL_TABSIZE)
1401 INTEGER :: (PANEL_TABSIZE)
1402 INTEGER :: IPANEL, ICOL, NBPANELS, NB_TARGET
1406 PARAMETER (ONE = 1.0e0)
1407 IF ( npiv.EQ. 0 )
RETURN
1408 nrhs_b = jbfin-jbdeb+1
1409 IF ( mtype .EQ. 1 .OR. keep(50) .NE. 0 )
THEN
1413 j1 = ipos + liell + 1
1414 j3 = ipos + liell + npiv
1416 iposinrhscomp = posinrhscomp_fwd(iw(j1))
1417 IF ( keep(50) .eq. 0 )
THEN
1423 DO ifr8 = 0_8, int(npiv-1,8)
1424 rhscomp(iposinrhscomp+ifr8, k) =
1425 & wcb(ppiv_courant+(k-jbdeb)*ld_wcbpiv+ifr8)
1431 DO ifr8 = 0_8, int(npiv-1,8)
1432 rhscomp(iposinrhscomp+ifr8, k) =
1433 & wcb(ppiv_courant+(k-jbdeb)*ld_wcbpiv
1439 & nb_target, nbpanels, panel_col, panel_pos, panel_tabsize,
1441 ifr_ini8 = ppiv_courant
1444!$omp parallel
DO private(jj,ifr8,nbk,apos1,apos2,aposoff,valpiv,
1450 ipanel = (jj-j1)/nb_target + 1
1451 IF ( jj-j1+1 .LT. panel_col(ipanel
1452 icol = jj-j1+1 - panel_col(ipanel) + 1
1453 ldaj = panel_col(ipanel+1) - panel_col(ipanel)
1456 ifr8 = ifr_ini8 + int(k-jbdeb,8)*int(ld_wcbpiv,8) +
1458 IF ( jj .NE. j1 )
THEN
1459 IF ( iw(liell+jj-1) .LT. 0 )
THEN
1468 ELSE IF ( iw(jj+liell) .GT. 0 )
THEN
1469 valpiv = one/a( apos1 )
1470 rhscomp(iposinrhscomp+jj-j1 , k ) =
1471 & wcb( ifr8 ) * valpiv
1472 apos1 = apos1 + int(ldaj + 1,8)
1474 apos2 = apos1+int(ldaj+1,8)
1479 detpiv = a11*a22 - a12**2
1481 a11 = a(apos2)/detpiv
1484 poswcb2 = poswcb1+1_8
1485 rhscomp(iposinrhscomp+jj-j1,k) =
1487 & + wcb(poswcb2)*a12
1488 rhscomp(iposinrhscomp+jj-j1+1,k) =
1490 & + wcb(poswcb2)*a22
1499 & INODE, N, NPIV, LIELL, NELIM, NSLAVES,
1503 & WCB, LWCB, LD_WCBPIV,
1504 & RHSCOMP, LRHSCOMP, NRHS,
1505 & POSINRHSCOMP_FWD, JBDEB, JBFIN,
1506 & MTYPE, KEEP, OOCWRITE_COMPATIBLE_WITH_BLR,
1510 INTEGER,
INTENT(IN) :: MTYPE, INODE, , NPIV, LIELL,
1512 INTEGER,
INTENT(IN) :: LRHSCOMP, NRHS, LIW, JBDEB,
1513INTEGER,
INTENT(IN) :: IW(LIW), IPOS, POSINRHSCOMP_FWD(N)
1514 INTEGER(8),
INTENT(IN) :: LWCB, APOS, LA, PPIV_COURANT
1515 INTEGER,
INTENT(IN) :: LD_WCBPIV
1516 INTEGER,
INTENT(IN) :: KEEP(500)
1517 REAL,
INTENT(IN) :: WCB( LWCB )
1518 REAL,
INTENT(IN) :: A( LA )
1519 REAL,
INTENT(INOUT) :: RHSCOMP(LRHSCOMP, NRHS)
1520 LOGICAL,
INTENT(IN) :: OOCWRITE_COMPATIBLE_WITH_BLR
1521 LOGICAL,
INTENT(IN) :: IGNORE_K459
1522 INTEGER :: TempNROW, J1, J3, PANEL_SIZE, TYPEF
1523 INTEGER :: IPOSINRHSCOMP, JJ, K, NBK, LDAJ,
1524 & ldaj_ini, nbk_ini, ldaj_first_panel, nrhs_b
1525 INTEGER(8) :: IFR8 , APOS1, APOS2, APOSOFF, IFR_ini8,
1527 REAL :: VALPIV, A11, A22, A12, DETPIV
1530 PARAMETER (one = 1.0e0)
1531 nrhs_b = jbfin-jbdeb+1
1532 IF ( mtype .EQ. 1 .OR. keep(50) .NE. 0 )
THEN
1536 j1 = ipos + liell + 1
1537 j3 = ipos + liell + npiv
1539 iposinrhscomp = posinrhscomp_fwd(iw(j1))
1540 IF ( keep(50) .eq. 0 )
THEN
1544 ifr8 = ppiv_courant + (k-jbdeb)*ld_wcbpiv
1545 rhscomp(iposinrhscomp:iposinrhscomp+npiv-1, k) =
1546 & wcb(ifr8:ifr8+int(npiv-1,8))
1550 ifr8 = ppiv_courant - 1_8
1551 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
THEN
1552 IF (mtype.EQ.1)
THEN
1553 IF ((mtype.EQ.1).AND.nslaves.NE.0)
THEN
1554 tempnrow= npiv+nelim
1555 ldaj_first_panel=tempnrow
1558 ldaj_first_panel=tempnrow
1563 ldaj_first_panel=liell
1569 IF ( keep(459) .GT. 1 .AND. keep(50) .NE. 0
1570 & .AND. .NOT. ignore_k459 )
THEN
1578 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
THEN
1581 ifr_ini8 = ppiv_courant - 1_8
1583 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
1585!$ omp_flag = ( jbfin-jbdeb+1.GE.keep
1590 ifr8 = ifr_ini8 + int(k-jbdeb,8)*int(ld_wcbpiv,8)
1596 IF (jj .GT. j3)
EXIT
1598 IF (iw(jj+liell) .GT. 0)
THEN
1599 valpiv = one/a( apos1 )
1600 rhscomp(iposinrhscomp+jj-j1 , k ) =
1601 & wcb( ifr8 ) * valpiv
1602 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
1605 IF (nbk.EQ.panel_size)
THEN
1607 ldaj = ldaj - panel_size
1610 apos1 = apos1 + int(ldaj + 1,8)
1613 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
1617 apos2 = apos1+int(ldaj+1,8)
1618 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
1620 aposoff = apos1+int(ldaj,8)
1629 a11 = a(apos2)/detpiv
1632 poswcb2 = poswcb1+1_8
1633 rhscomp(iposinrhscomp+jj-j1,k) =
1635 & + wcb(poswcb2)*a12
1636 rhscomp(iposinrhscomp+jj-j1+1,k) =
1638 & + wcb(poswcb2)*a22
1639 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
1642 IF (nbk.GE.panel_size)
THEN
1647 apos1 = apos2 + int(ldaj + 1,8)
1658 & COMM, MYID, I_AM_SLAVE, MASTER, NB_BYTES, NB_BYTES_MAX,
1659 & K16_8, LP, LPOK, ICNTL, INFO )
1663 REAL,
dimension(:),
pointer :: SCALING
1664 REAL,
dimension(:),
pointer :: SCALING_LOC
1665 end type scaling_data_t
1666 type (scaling_data_t),
INTENT(INOUT) :: scaling_data
1667 INTEGER,
INTENT(IN) :: N, LILOC, COMM, MYID, MASTER, LP
1668 INTEGER,
INTENT(IN) :: ILOC(LILOC)
1669 INTEGER(8),
INTENT(INOUT) :: NB_BYTES, NB_BYTES_MAX
1670 INTEGER(8),
INTENT(IN) :: K16_8
1671 LOGICAL,
INTENT(IN) :: I_AM_SLAVE, LPOK
1672 INTEGER,
INTENT(INOUT) :: INFO(80)
1673 INTEGER,
INTENT(IN) :: ICNTL(60)
1674 REAL,
POINTER,
DIMENSION(:) :: SCALING
1675 INTEGER :: I, IERR_MPI, allocok
1677 NULLIFY(scaling_data%SCALING_LOC)
1678 IF (i_am_slave)
THEN
1679 ALLOCATE(scaling_data%SCALING_LOC(
max(1,liloc)),
1681 IF (allocok > 0)
THEN
1686 nb_bytes = nb_bytes + int(
max(1,liloc),8)*k16_8
1687 nb_bytes_max =
max(nb_bytes_max,nb_bytes)
1689 IF (myid .NE. master)
THEN
1690 ALLOCATE(scaling(n), stat=allocok)
1691 IF (allocok > 0)
THEN
1693 WRITE(lp,*)
'Error allocating temporary scaling array'
1699 nb_bytes = nb_bytes + int(n,8)*k16_8
1700 nb_bytes_max =
max(nb_bytes_max,nb_bytes)
1702 scaling => scaling_data%SCALING
1707 IF (info(1) .LT. 0)
GOTO 90
1708 CALL mpi_bcast( scaling(1), n, mpi_real,
1709 & master, comm, ierr_mpi)
1710 IF ( i_am_slave )
THEN
1712 IF (iloc(i) .GE. 1 .AND. iloc(i) .LE. n)
THEN
1713 scaling_data%SCALING_LOC(i) = scaling(iloc(i))
1718 IF (myid.NE. master)
THEN
1719 IF (
associated(scaling))
THEN
1721 nb_bytes = nb_bytes - int(n,8)*k16_8
1725 IF (info(1) .LT. 0)
THEN
1726 IF (
associated(scaling_data%SCALING_LOC))
THEN
1727 DEALLOCATE(scaling_data%SCALING_LOC)
1728 NULLIFY(scaling_data%SCALING_LOC)
subroutine mumps_propinfo(icntl, info, comm, id)
subroutine sgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
SGEMV
subroutine strsv(uplo, trans, diag, n, a, lda, x, incx)
STRSV
subroutine strsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
STRSM
subroutine sgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
SGEMM
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
subroutine mpi_send(buf, cnt, datatype, dest, tag, comm, ierr)
subroutine mpi_bcast(buffer, cnt, datatype, root, comm, ierr)
integer ooc_node_not_in_mem
integer function smumps_solve_is_inode_in_mem(inode, ptrfac, nsteps, a, la, ierr)
integer ooc_node_permuted
subroutine smumps_solve_modify_state_node(inode)
subroutine, public smumps_solve_alloc_factor_space(inode, ptrfac, keep, keep8, a, ierr)
subroutine, public smumps_read_ooc(dest, inode, ierr)
integer function, public smumps_ooc_panel_size(nnmax)
subroutine smumps_sol_mulr(n, r, w)
subroutine smumps_sol_ld_and_reload_panel(inode, n, npiv, liell, nelim, nslaves, ppiv_courant, iw, ipos, liw, a, la, apos, wcb, lwcb, ld_wcbpiv, rhscomp, lrhscomp, nrhs, posinrhscomp_fwd, jbdeb, jbfin, mtype, keep, oocwrite_compatible_with_blr, ignore_k459)
subroutine smumps_solve_fwd_trsolve(a, la, apos, npiv, ldadiag, nrhs_b, wcb, lwcb, lda_wcb, ppiv_courant, mtype, keep)
subroutine smumps_sol_x_elt(mtype, n, nelt, eltptr, leltvar, eltvar, na_elt8, a_elt, w, keep, keep8)
subroutine smumps_scal_x(a, nz8, n, irn, icn, z, keep, keep8, colsca, eff_size_schur, sym_perm)
subroutine smumps_compso(n, keep28, iwcb, liww, w, lwc, poswcb, iwposcb, ptricb, ptracb)
subroutine smumps_solve_bwd_panels(a, la, apos, npiv, iw, nrhs_b, wcb, lwcb, lda_wcb, ppiv_courant, mtype, keep)
subroutine smumps_sol_ld_and_reload(inode, n, npiv, liell, nelim, nslaves, ppiv_courant, iw, ipos, liw, a, la, apos, wcb, lwcb, ld_wcbpiv, rhscomp, lrhscomp, nrhs, posinrhscomp_fwd, jbdeb, jbfin, mtype, keep, oocwrite_compatible_with_blr, ignore_k459)
subroutine smumps_solve_bwd_trsolve(a, la, apos, npiv, ldadiag, nrhs_b, wcb, lwcb, lda_wcb, ppiv_courant, mtype, keep)
subroutine smumps_sol_bwd_gthr(jbdeb, jbfin, j1, j2, rhscomp, nrhs, lrhscomp, w, ld_w, first_row_w, iw, liw, keep, n, posinrhscomp_bwd)
subroutine smumps_eltyd(mtype, n, nelt, eltptr, leltvar, eltvar, na_elt8, a_elt, saverhs, x, y, w, k50)
subroutine smumps_freetopso(n, keep28, iwcb, liww, w, lwc, poswcb, iwposcb, ptricb, ptracb)
subroutine smumps_solve_gemm_update(a, la, apos1, nx, lda, ny, nrhs_b, wcb, lwcb, ptrx, ldx, ptry, ldy, mtype, keep, coef_y)
subroutine smumps_sol_omega(n, rhs, x, y, r_w, c_w, iw, iflag, omega, noiter, testconv, lp, arret, grain)
subroutine smumps_solve_get_ooc_node(inode, ptrfac, keep, a, la, step, keep8, n, must_be_permuted, ierr)
subroutine smumps_sol_q(mtype, iflag, n, lhs, wrhs, w, res, givnorm, anorm, xnorm, sclnrm, mprint, icntl, keep, keep8)
subroutine smumps_sol_cpy_fs2rhscomp(jbdeb, jbfin, nbrows, keep, rhscomp, nrhs, lrhscomp, first_row_rhscomp, w, ld_w, first_row_w)
subroutine smumps_sol_x(a, nz8, n, irn, icn, z, keep, keep8, eff_size_schur, sym_perm)
subroutine smumps_sol_y(a, nz8, n, irn, icn, rhs, x, r, w, keep, keep8)
subroutine smumps_solve_fwd_panels(a, la, apos, npiv, iw, nrhs_b, wcb, lwcb, lda_wcb, ppiv_courant, mtype, keep)
subroutine smumps_qd2(mtype, n, nz8, aspk, irn, icn, lhs, wrhs, w, rhs, keep, keep8)
subroutine smumps_eltqd2(mtype, n, nelt, eltptr, leltvar, eltvar, na_elt8, a_elt, lhs, wrhs, w, rhs, keep, keep8)
subroutine smumps_set_scaling_loc(scaling_data, n, iloc, liloc, comm, myid, i_am_slave, master, nb_bytes, nb_bytes_max, k16_8, lp, lpok, icntl, info)
subroutine smumps_sol_b(n, kase, x, est, w, iw, grain)
subroutine smumps_sol_lcond(n, rhs, x, y, d, r_w, c_w, iw, kase, omega, erx, cond, lp, keep, keep8)
subroutine smumps_sol_scalx_elt(mtype, n, nelt, eltptr, leltvar, eltvar, na_elt8, a_elt, w, keep, keep8, colsca)
subroutine smumps_build_mapping_info(id)
subroutine smumps_mv_elt(n, nelt, eltptr, eltvar, a_elt, x, y, k50, mtype)