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)
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 COMPLEX,
INTENT(IN) :: A(NZ8)
93 REAL,
INTENT(OUT) :: Z(N)
94 INTEGER,
INTENT(IN) :: EFF_SIZE_SCHUR, 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 COMPLEX,
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
185 LOGICAL :: SKIP_COLinSchur
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 COMPLEX,
INTENT(IN) :: A(NZ8), RHS(N), X(N)
230 REAL,
INTENT(OUT) :: W(N)
231 COMPLEX,
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 COMPLEX,
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 CMUMPS_IXAMAX
312 EXTERNAL cmumps_ixamax
315 INTEGER , ITER, J, JLAST, JUMP
318 SAVE iter, j, jlast, jump
320 parameter( zero = (0.0e0,0.0e0) )
321 parameter( one = (1.0e0,0.0e0) )
322 REAL,
PARAMETER :: RZERO = 0.0e0
323 REAL,
PARAMETER :: RONE = 1.0e0
324 IF (kase .EQ. 0)
THEN
352 x(i) =
cmplx( sign(rone,real(x
353 iw(i) = nint(real(x(i)))
359 j = cmumps_ixamax(n, x, 1, grain)
374 IF (nint(sign(rone, real(x(i)))) .NE. iw(i))
GOTO 100
379 x(i) =
cmplx( sign(rone, real(x(i))), kind=kind(x) )
380 iw(i) = nint(real(x(i)))
387 j = cmumps_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) =
cmplx(altsgn * (rone + real(i - 1) / real(n - 1)),
409 temp = temp + abs(x(i))
411 temp = 2.0e0 * temp / real(3 * n)
412 IF (temp .GT. est)
THEN
422 & LHS, WRHS, W, RHS, KEEP,KEEP8)
425 INTEGER(8),
INTENT(IN) :: NZ8
426 INTEGER,
INTENT(IN) :: IRN( NZ8 ), ICN( NZ8 )
428 INTEGER(8) KEEP8(150)
429 COMPLEX,
INTENT(IN) :: ASPK( NZ8 )
430 COMPLEX,
INTENT(IN) :: LHS( N ), WRHS( N )
431 COMPLEX,
INTENT(OUT):: RHS( N )
432 REAL,
INTENT(OUT):: W( N )
435 REAL,
PARAMETER :: DZERO = 0.0e0
440 IF ( keep(50) .EQ. 0 )
THEN
441 IF (mtype .EQ. 1)
THEN
442 IF (keep(264).EQ.0)
THEN
446 IF ((i .LE. 0) .OR. (i .GT. n) .OR. (j .LE. 0) .OR.
448 rhs(i) = rhs(i) - aspk(k8) * lhs(j)
449 w(i) = w(i) + abs(aspk(k8))
455 rhs(i) = rhs(i) - aspk(k8) * lhs(j)
456 w(i) = w(i) + abs(aspk(k8))
460 IF (keep(264).EQ.0)
THEN
464 IF ((i .LE. 0) .OR. (i .GT. n) .OR. (j .LE. 0) .OR.
466 rhs(j) = rhs(j) - aspk(k8) * lhs(i)
467 w(j) = w(j) + abs(aspk(k8))
473 rhs(j) = rhs(j) - aspk(k8) * lhs(i)
474 w(j) = w(j) + abs(aspk(k8))
479 IF (keep(264).EQ.0)
THEN
483 IF ((i .LE. 0) .OR. (i .GT. n) .OR. (j .LE. 0) .OR.
485 rhs(i) = rhs(i) - aspk(k8) * lhs(j)
486 w(i) = w(i) + abs(aspk(k8))
488 rhs(j) = rhs(j) - aspk(k8) * lhs(i)
489 w(j) = w(j) + abs(aspk(k8))
496 rhs(i) = rhs(i) - aspk(k8) * lhs(j)
497 w(i) = w(i) + abs(aspk(k8))
499 rhs(j) = rhs(j) - aspk(k8) * lhs(i)
500 w(j) = w(j) + abs(aspk(k8))
508 & NELT, ELTPTR, LELTVAR, ELTVAR, NA_ELT8, A_ELT,
509 & LHS, WRHS, W, RHS, KEEP,KEEP8 )
511 INTEGER MTYPE, N, NELT, LELTVAR
512 INTEGER(8),
INTENT(IN) :: NA_ELT8
513 INTEGER ELTPTR(NELT+1), ELTVAR(LELTVAR)
515 INTEGER(8) KEEP8(150)
516 COMPLEX A_ELT(NA_ELT8)
517 COMPLEX LHS( N ), WRHS( N ), RHS( N )
519 CALL CMUMPS_MV_ELT(N, NELT, ELTPTR, ELTVAR, ,
520 & lhs, rhs, keep(50), mtype )
523 & nelt, eltptr, leltvar, eltvar, na_elt8, a_elt,
528 & NELT, ELTPTR, LELTVAR, ELTVAR, NA_ELT8, A_ELT,
531 INTEGER MTYPE, N, NELT, LELTVAR
532 INTEGER(8),
INTENT(IN) :: NA_ELT8
533 INTEGER ELTPTR(NELT+1), ELTVAR(LELTVAR)
535 INTEGER(8) KEEP8(150)
536 COMPLEX A_ELT(NA_ELT8)
539 INTEGER I, J, IEL, SIZEI, IELPTR
542 parameter(dzero = 0.0e0)
546 sizei = eltptr( iel + 1 ) - eltptr( iel )
547 ielptr = eltptr( iel ) - 1
548 IF ( keep(50).EQ.0 )
THEN
552 w( eltvar( ielptr + i) ) =
553 & w( eltvar( ielptr + i) )
560 temp = w( eltvar( ielptr + j ) )
562 temp = temp + abs( a_elt(k8))
565 w(eltvar( ielptr + j )) =
566 & w(eltvar( ielptr + j )) + temp
571 w(eltvar( ielptr + j )) =
572 & w(eltvar( ielptr + j )) + abs(a_elt( k8 ))
575 w(eltvar( ielptr + j )) =
576 & w(eltvar( ielptr + j )) + abs(a_elt( k8 ))
577 w(eltvar( ielptr + i ) ) =
578 & w(eltvar( ielptr + i )) + abs(a_elt( k8 ))
587 & NELT, ELTPTR, LELTVAR, ELTVAR, NA_ELT8, A_ELT,
588 & W, KEEP,KEEP8, COLSCA )
590 INTEGER MTYPE, N, NELT, LELTVAR
591 INTEGER(8),
INTENT(IN) :: NA_ELT8
592 INTEGER ELTPTR(NELT+1), ELTVAR(LELTVAR)
594 INTEGER(8) KEEP8(150)
596 COMPLEX A_ELT(NA_ELT8)
599 INTEGER I, J, IEL, SIZEI, IELPTR
602 PARAMETER(DZERO = 0.0e0)
606 sizei = eltptr( iel + 1 ) - eltptr( iel )
607 ielptr = eltptr( iel ) - 1
608 IF ( keep(50).EQ.0 )
THEN
611 temp2 = abs(colsca(eltvar( ielptr + j) ))
613 w( eltvar( ielptr + i) ) =
614 & w( eltvar( ielptr + i) )
615 & + abs(a_elt( k8 )) * temp2
621 temp = w( eltvar( ielptr + j ) )
622 temp2= abs(colsca(eltvar( ielptr + j) ))
624 temp = temp + abs(a_elt( k8 )) * temp2
627 w(eltvar( ielptr + j )) =
628 & w(eltvar( ielptr + j )) + temp
633 w(eltvar( ielptr + j )) =
634 & w(eltvar( ielptr + j )) +
635 & abs( a_elt( k8 )*colsca(eltvar( ielptr + j)) )
638 w(eltvar( ielptr + j )) =
639 & w(eltvar( ielptr + j )) +
640 & abs(a_elt( k8 )*colsca(eltvar( ielptr + j)))
641 w(eltvar( ielptr + i ) ) =
642 & w(eltvar( ielptr + i )) +
643 & abs(a_elt( k8 )*colsca(eltvar( ielptr + i)))
652 & LELTVAR, ELTVAR, NA_ELT8, A_ELT,
653 & SAVERHS, X, Y, W, K50 )
655 INTEGER N, NELT, K50, MTYPE, LELTVAR
656 INTEGER(8) :: NA_ELT8
657 INTEGER ELTPTR( NELT + 1 ), ELTVAR( LELTVAR )
658 COMPLEX A_ELT( NA_ELT8 ), X( N ), Y( N ),
661 INTEGER IEL, I , J, K, SIZEI, IELPTR
665 parameter( zero = 0.0e0 )
670 sizei = eltptr( iel + 1 ) - eltptr( iel )
671 ielptr = eltptr( iel ) - 1
672 IF ( k50 .eq. 0 )
THEN
673 IF ( mtype .eq. 1 )
THEN
675 temp = x( eltvar( ielptr + j ) )
677 y( eltvar( ielptr + i ) ) =
678 & y( eltvar( ielptr + i ) ) -
680 w( eltvar( ielptr + i ) ) =
681 & w( eltvar( ielptr + i ) ) +
682 & abs( a_elt( k ) * temp )
688 temp = y( eltvar( ielptr + j ) )
689 temp2 = w( eltvar( ielptr + j ) )
692 & a_elt( k ) * x( eltvar( ielptr + i ) )
694 & a_elt( k ) * x( eltvar( ielptr + i ) ) )
697 y( eltvar( ielptr + j ) ) = temp
698 w( eltvar( ielptr + j ) ) = temp2
703 y( eltvar( ielptr + j ) ) =
704 & y( eltvar( ielptr + j ) ) -
705 & a_elt( k ) * x( eltvar( ielptr + j ) )
706 w( eltvar( ielptr + j ) ) =
707 & w( eltvar( ielptr + j ) ) + abs(
708 & a_elt( k ) * x( eltvar( ielptr + j ) ) )
711 y( eltvar( ielptr + i ) ) =
712 & y( eltvar( ielptr + i ) ) -
713 & a_elt( k ) * x( eltvar( ielptr + j ) )
714 y( eltvar( ielptr + j ) ) =
715 & y( eltvar( ielptr + j ) ) -
716 & a_elt( k ) * x( eltvar( ielptr + i ) )
717 w( eltvar( ielptr + i ) ) =
718 & w( eltvar( ielptr + i ) ) + abs(
719 & a_elt( k ) * x( eltvar( ielptr + j ) ) )
720 w( eltvar( ielptr + j ) ) =
721 & w( eltvar( ielptr + j ) ) + abs(
722 & a_elt( k ) * x( eltvar( ielptr + i ) ) )
731 & INODE,PTRFAC,KEEP,A,LA,STEP,
732 & KEEP8,N,MUST_BE_PERMUTED,IERR)
735 INTEGER INODE,KEEP(500),N
736 INTEGER(8) KEEP8(150)
738 INTEGER(8) :: PTRFAC(KEEP(28))
743 LOGICAL MUST_BE_PERMUTED
745 & keep(28),a,la,ierr)
756 & a(ptrfac(step(inode))),
768 must_be_permuted=.true.
771 must_be_permuted=.false.
779 TYPE(cmumps_struc),
TARGET :: id
780 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: LOCAL_LIST
781 INTEGER :: I,IERR,TMP,NSTEPS,N_LOCAL_LIST
782 INTEGER :: MASTER,TAG_SIZE,TAG_LIST
783 INTEGER :: STATUS(MPI_STATUS_SIZE)
784 LOGICAL :: I_AM_SLAVE
785 parameter(master=0, tag_size=85,tag_list=86)
786 i_am_slave = (id%MYID .NE. master
787 & .OR. ((id%MYID.EQ.master).AND.(id%KEEP(46).EQ.1)))
789 ALLOCATE(local_list(nsteps),stat=ierr)
791 WRITE(*,*)
'Problem in solve: error allocating LOCAL_LIST'
797 IF(id%PTLUST_S(i).NE.0)
THEN
798 n_local_list = n_local_list + 1
799 local_list(n_local_list) = i
802 IF(id%MYID.NE.master)
THEN
804 & mpi_integer, master, tag_size, id%COMM,ierr)
805 CALL mpi_send(local_list, n_local_list,
806 & mpi_integer, master, tag_list, id%COMM,ierr)
807 DEALLOCATE(local_list)
808 ALLOCATE(id%IPTR_WORKING(1),
812 WRITE(*,*)
'Problem in solve: error allocating ',
813 &
'IPTR_WORKING and WORKING'
818 IF(id%MYID.EQ.master)
THEN
819 ALLOCATE(id%IPTR_WORKING(id%NPROCS+1), stat=ierr)
821 WRITE(*,*)
'Problem in solve: error allocating IPTR_WORKING'
825 id%IPTR_WORKING(1) = 1
826 id%IPTR_WORKING(master+2) = n_local_list
828 CALL mpi_recv(tmp, 1, mpi_integer, mpi_any_source,
829 & tag_size, id%COMM, status, ierr)
830 id%IPTR_WORKING(status(mpi_source)+2) = tmp
833 id%IPTR_WORKING(i) = id%IPTR_WORKING(i)
834 & + id%IPTR_WORKING(i-1)
836 ALLOCATE(id%WORKING(id%IPTR_WORKING(id%NPROCS+1)-1),stat=ierr)
838 WRITE(*,*)
'Problem in solve: error allocating LOCAL_LIST'
843 id%WORKING(id%IPTR_WORKING(tmp):id%IPTR_WORKING(tmp+1)-1)
844 & = local_list(1:id%IPTR_WORKING(tmp+1)
845 & -id%IPTR_WORKING(tmp))
848 CALL mpi_recv(local_list, nsteps, mpi_integer,
849 & mpi_any_source, tag_list, id%COMM, status, ierr)
850 tmp = status(mpi_source)+1
851 id%WORKING(id%IPTR_WORKING(tmp):id%IPTR_WORKING(tmp+1)-1)
852 & = local_list(1:id%IPTR_WORKING(tmp+1)-
853 & id%IPTR_WORKING(tmp))
855 DEALLOCATE(local_list)
859 & X, Y, R_W, C_W, IW, IFLAG,
860 & OMEGA, NOITER, TESTConv,
873 INTEGER,
intent(in) :: GRAIN
874 REAL,
PARAMETER :: CGCE=0.2e0
875 REAL,
PARAMETER :: CTAU=1.0e3
880 REAL,
PARAMETER :: ZERO=0.0e0
881 REAL,
PARAMETER :: ONE=1.0e0
882 INTEGER CMUMPS_IXAMAX
885 imax = cmumps_ixamax(n, x, 1, grain)
890 tau = (r_w(i, 2) * dxmax + abs(rhs(i))) * real(n) * ctau
891 dd = r_w(i, 1) + abs(rhs(i))
892 IF (dd .GT. tau * epsilon(ctau))
THEN
893 omega(1) =
max(omega(1), abs(y(i)) / dd)
896 IF (tau .GT. zero)
THEN
897 omega(2) =
max(omega(2),
898 & abs(y(i)) / (dd + r_w(i, 2) * dxmax))
904 om2 = omega(1) + omega(2)
905 IF (om2 .LT. arret )
THEN
909 IF (noiter .GE. 1)
THEN
910 IF (om2 .GT. om1 * cgce)
THEN
911 IF (om2 .GT. om1)
THEN
937 & X, Y, D, R_W, C_W, IW, KASE,
941 INTEGER N, KASE, KEEP(500)
942 INTEGER(8) KEEP8(150)
950 REAL COND(2),OMEGA(2)
951 LOGICAL LCOND1, LCOND2
952 INTEGER JUMP, I, IMAX
955 REAL,
PARAMETER :: ZERO = 0.0e0
956 REAL,
PARAMETER :: ONE = 1.0e0
957 INTEGER CMUMPS_IXAMAX
959 SAVE lcond1, lcond2, jump, dximax, dxmax
960 IF (kase .EQ. 0)
THEN
984 imax = cmumps_ixamax(n, x, 1, keep(361))
987 IF (iw(i, 1) .EQ. 1)
THEN
988 r_w(i, 1) = r_w(i, 1) + abs(rhs(i))
992 r_w(i, 2) = r_w(i, 2) * dxmax + r_w(i, 1)
1000 imax = cmumps_ixamax(n, c_w(1), 1, keep(361))
1001 dximax = abs(c_w(imax))
1002 IF (.NOT.lcond1)
GOTO 130
1004 CALL cmumps_sol_b(n, kase, y, cond(1), c_w, iw(1, 2), keep(361))
1005 IF (kase .EQ. 0)
GOTO 120
1015 IF (dximax .GT. zero) cond(1) = cond(1) / dximax
1016 erx = omega(1) * cond(1)
1018 IF (.NOT.lcond2)
GOTO 170
1021 CALL cmumps_sol_b(n, kase, y, cond(2), c_w, iw(1, 2), keep(361))
1022 IF (kase .EQ. 0)
GOTO 160
1031 160
IF (dximax .GT. zero)
THEN
1032 cond(2) = cond(2) / dximax
1034 erx = erx + omega(2) * cond
1039 & KEEP, RHSCOMP, NRHS, LRHSCOMP, FIRST_ROW_RHSCOMP, W, LD_W,
1041 INTEGER :: JBDEB, JBFIN, NBROWS
1042 INTEGER :: NRHS, LRHSCOMP
1043 INTEGER :: FIRST_ROW_RHSCOMP
1044 INTEGER,
INTENT(IN) :: KEEP(500)
1045 COMPLEX,
INTENT(INOUT) :: RHSCOMP(LRHSCOMP,NRHS)
1046 INTEGER :: LD_W, FIRST_ROW_W
1047 COMPLEX :: W(LD_W*(JBFIN-JBDEB+1))
1048 INTEGER :: JJ, K, ISHIFT
1053 ishift = first_row_w + ld_w * (k-jbdeb)
1055 rhscomp(first_row_rhscomp+jj,k) = w(ishift+jj)
1062 & RHSCOMP, NRHS, LRHSCOMP, W, LD_W, FIRST_ROW_W,
1063 & IW, LIW, KEEP, N, POSINRHSCOMP_BWD )
1064 INTEGER,
INTENT(IN) :: JBDEB, JBFIN, J1, J2
1065 INTEGER,
INTENT(IN) :: NRHS, LRHSCOMP
1066 INTEGER,
INTENT(IN) :: FIRST_ROW_W, LD_W, LIW
1067 INTEGER,
INTENT(IN) :: IW(LIW)
1068 INTEGER,
INTENT(IN) :: KEEP(500)
1069 COMPLEX,
INTENT(INOUT) :: RHSCOMP(LRHSCOMP,NRHS)
1070 COMPLEX :: W(LD_W*(JBFIN-JBDEB+1))
1071 INTEGER,
INTENT(IN) :: N
1072 INTEGER,
INTENT(IN) :: POSINRHSCOMP_BWD(N)
1073 INTEGER :: ISHIFT, JJ, K, IPOSINRHSCOMP
1078 ishift = first_row_w+(k-jbdeb)*ld_w
1079 DO jj = j1, j2-keep(253)
1080 iposinrhscomp = abs(posinrhscomp_bwd(iw(jj)))
1081 w(ishift+jj-j1)= rhscomp(iposinrhscomp,k)
1088 & LHS, WRHS, W, RES, GIVNORM, ANORM, XNORM, SCLNRM,
1089 & MPRINT, ICNTL, KEEP,KEEP8)
1090 INTEGER MTYPE,N,IFLAG,ICNTL(60), KEEP(500)
1091 INTEGER(8) KEEP8(150)
1092 COMPLEX RES(N),LHS(N)
1095 REAL RESMAX,RESL2,XNORM, SCLNRM
1097 LOGICAL GIVNORM,PROK
1100 INTRINSIC abs,
max, sqrt
1102 prok = (mprint .GT. 0)
1104 IF (.NOT.givnorm) anorm = dzero
1108 resmax =
max(resmax, abs(res(k)))
1109 resl2 = resl2 + abs(res(k)) * abs(res(k))
1110 IF (.NOT.givnorm) anorm =
max(anorm, w(k))
1114 xnorm =
max(xnorm, abs(lhs(k)))
1116 IF ( xnorm .EQ. dzero .OR. (exponent(xnorm) .LT.
1117 & minexponent(xnorm) + keep(122) )
1119 & ( exponent(anorm)+exponent(xnorm) .LT.
1120 & minexponent(xnorm) + keep(122) )
1122 & ( exponent(anorm) + exponent(xnorm) -exponent(resmax)
1123 & .LT. minexponent(xnorm) + keep(122) )
1125 IF (mod(iflag/2,2) .EQ. 0)
THEN
1128 IF ((mp .GT. 0) .AND. (icntl(4) .GE. 2))
WRITE( mp, * )
1129 &
' max-NORM of computed solut. is zero or close to zero. '
1131 IF (resmax .EQ. dzero)
THEN
1134 sclnrm = resmax / (anorm * xnorm)
1137 IF (prok)
WRITE( mprint, 90 ) resmax, resl2, anorm, xnorm,
1139 90
FORMAT (/
' RESIDUAL IS ............ (MAX-NORM) =',1pd9.2/
1140 &
' .. (2-NORM) =',1pd9.2/
1141 &
' RINFOG(4):NORM OF input Matrix (MAX-NORM)=',1pd9.2/
1142 &
' RINFOG(5):NORM OF Computed SOLUT (MAX-NORM)=',1pd9.2/
1143 &
' RINFOG(6):SCALED RESIDUAL ...... (MAX-NORM)=',1pd9.2)
1147 & NRHS_B, WCB, LWCB, LDA_WCB, PPIV_COURANT, MTYPE, KEEP)
1148 INTEGER,
INTENT(IN) :: MTYPE, , NPIV, KEEP(500)
1149 INTEGER,
INTENT(IN) :: NRHS_B, LDA_WCB
1150 INTEGER(8),
INTENT(IN) :: LA, APOS, LWCB, PPIV_COURANT
1151 COMPLEX,
INTENT(IN) :: A(LA)
1152 COMPLEX,
INTENT(INOUT) :: WCB(LWCB)
1154 PARAMETER ( ONE=(1.0e0,0.0e0) )
1155 IF (keep(50).NE.0 .OR. mtype .eq. 1 )
THEN
1156#if defined(MUMPS_USE_BLAS2)
1157 IF ( nrhs_b == 1 )
THEN
1158 CALL ctrsv(
'U',
'T',
'U', npiv, a(apos), ldadiag,
1159 & wcb(ppiv_courant), 1 )
1162 CALL ctrsm(
'L',
'U',
'T',
'U', npiv, nrhs_b, one,
1163 & a(apos), ldadiag, wcb(ppiv_courant),
1165#if defined(MUMPS_USE_BLAS2)
1169#if defined(MUMPS_USE_BLAS2)
1170 IF ( nrhs_b == 1 )
THEN
1171 CALL ctrsv(
'L',
'N',
'N', npiv, a(apos), ldadiag,
1172 & wcb(ppiv_courant), 1 )
1175 CALL ctrsm(
'L',
'L',
'N',
'N', npiv, nrhs_b, one,
1176 & a(apos), ldadiag, wcb(ppiv_courant),
1178#if defined(MUMPS_USE_BLAS2)
1185 & NRHS_B, WCB, LWCB, LDA_WCB, PPIV_COURANT, MTYPE, KEEP)
1186 INTEGER,
INTENT(IN) :: MTYPE, LDADIAG, NPIV, KEEP(500)
1187 INTEGER,
INTENT(IN) :: NRHS_B, LDA_WCB
1188 INTEGER(8),
INTENT(IN) :: LA, , LWCB, PPIV_COURANT
1189 COMPLEX,
INTENT(IN) :: A(LA)
1190 COMPLEX,
INTENT(INOUT) :: WCB(LWCB)
1192 parameter( one=(1.0e0,0.0e0) )
1193 IF (mtype .eq. 1 )
THEN
1194#
if defined(mumps_use_blas2)
1195 IF ( nrhs_b == 1 )
THEN
1196 CALL ctrsv(
'L',
'T',
'N', npiv, a(apos), ldadiag,
1197 & wcb(ppiv_courant), 1 )
1200 CALL ctrsm(
'L',
'L',
'T',
'N', npiv, nrhs_b, one,
1201 & a(apos), ldadiag, wcb(ppiv_courant),
1203#if defined(MUMPS_USE_BLAS2)
1207#if defined(MUMPS_USE_BLAS2)
1208 IF ( nrhs_b == 1 )
THEN
1209 CALL ctrsv(
'U',
'N',
'U', npiv, a(apos), ldadiag,
1210 & wcb(ppiv_courant), 1 )
1213 CALL ctrsm(
'L',
'U',
'N',
'U', npiv, nrhs_b, one,
1214 & a(apos), ldadiag, wcb(ppiv_courant),
1216#if defined(MUMPS_USE_BLAS2)
1223 & A, LA, APOS, NPIV, IW,
1224 & NRHS_B, WCB, LWCB, LDA_WCB,
1225 & PPIV_COURANT, MTYPE, KEEP)
1226 INTEGER,
INTENT(IN) :: MTYPE, NPIV, KEEP(500)
1227 INTEGER,
INTENT(IN) :: IW(NPIV)
1228 INTEGER,
INTENT(IN) :: NRHS_B, LDA_WCB
1229 INTEGER(8),
INTENT(IN) :: LA, APOS, , PPIV_COURANT
1230 COMPLEX,
INTENT(IN) :: A(LA)
1231 COMPLEX,
INTENT(INOUT) :: WCB(LWCB)
1232 INTEGER :: NB_TARGET
1234 INTEGER :: NBROWS_PANEL, NBCOLS_PANEL, ICOL_BEG,
1235 INTEGER(8) :: PANEL_APOS, PPIV_PANEL
1236 COMPLEX,
PARAMETER :: ONE=(1.0e0,0.0e0)
1237 IF (keep(459) .LE. 1)
THEN
1238 WRITE(*,*)
" Internal error in CMUMPS_SOLVE_FWD_PANELS"
1246 ppiv_panel = ppiv_courant
1247 DO WHILE ( icol_beg .LE. npiv )
1248 nbpanels = nbpanels + 1
1249 icol_end =
min(nb_target * nbpanels, npiv)
1250 IF ( iw(icol_end) .LT. 0 ) icol_end=icol_end
1251 nbcols_panel = icol_end - icol_beg + 1
1253 & nbcols_panel, nbcols_panel,
1254 & nrhs_b, wcb, lwcb, lda_wcb, ppiv_panel, mtype, keep)
1255 IF ( nbrows_panel .GT. nbcols_panel )
THEN
1257 & panel_apos + int(nbcols_panel,8) * int(nbcols_panel,8),
1258 & nbcols_panel, nbcols_panel, nbrows_panel-nbcols_panel,
1259 & nrhs_b, wcb, lwcb, ppiv_panel, lda_wcb,
1260 & ppiv_panel+nbcols_panel, lda_wcb,
1261 & mtype, keep, one )
1263 icol_beg = icol_end + 1
1264 panel_apos = panel_apos + int(nbcols_panel,8) *
1265 & int(nbrows_panel,8)
1266 nbrows_panel = nbrows_panel - nbcols_panel
1267 ppiv_panel = ppiv_panel + nbcols_panel
1272 & A, LA, APOS, NPIV, IW,
1273 & NRHS_B, WCB, LWCB, LDA_WCB,
1274 & PPIV_COURANT, MTYPE, KEEP)
1275 INTEGER,
INTENT(IN) :: , NPIV, KEEP(500)
1276 INTEGER,
INTENT(IN) :: IW(NPIV)
1277 INTEGER,
INTENT(IN) :: NRHS_B, LDA_WCB
1278 INTEGER(8),
INTENT(IN) :: LA, APOS, LWCB,
1279 COMPLEX,
INTENT(IN) :: A(LA)
1280 COMPLEX,
INTENT(INOUT) :: WCB(LWCB)
1281 INTEGER,
PARAMETER :: PANEL_TABSIZE = 20
1282 INTEGER(8) :: PANEL_POS(PANEL_TABSIZE)
1283 INTEGER :: PANEL_COL(PANEL_TABSIZE)
1284 INTEGER :: IPANEL, NBPANELS, NB_TARGET
1285 INTEGER :: NBROWS_PANEL, NBCOLS_PANEL
1286 INTEGER(8) :: PPIV_PANEL
1287 INTEGER :: MTYPE_TEMP
1288 COMPLEX,
PARAMETER :: ONE=(1.0e0,0.0e0)
1289 IF (keep(459) .LE. 1)
THEN
1290 WRITE(*,*)
" Internal error 1 in CMUMPS_SOLVE_BWD_PANELS"
1293 IF ( keep(459)+1 .GT. panel_tabsize )
THEN
1294 WRITE(*,*)
" Internal error 2 in CMUMPS_SOLVE_BWD_PANELS"
1298 &nb_target, nbpanels, panel_col, panel_pos, panel_tabsize,
1300 DO ipanel = nbpanels, 1, -1
1301 nbcols_panel = panel_col( ipanel+1 ) - panel_col( ipanel )
1302 nbrows_panel = npiv - panel_col( ipanel ) + 1
1303 ppiv_panel = ppiv_courant + panel_col( ipanel ) - 1
1304 IF ( nbrows_panel .GT. nbcols_panel )
THEN
1307 & apos-1_8+panel_pos(ipanel)+
1308 & int(nbcols_panel,8)*int(nbcols_panel,8),
1309 & nbrows_panel-nbcols_panel, nbcols_panel,
1311 & nrhs_b, wcb, lwcb, ppiv_panel+nbcols_panel, lda_wcb,
1312 & ppiv_panel, lda_wcb,
1313 & mtype_temp, keep, one )
1316 & apos+panel_pos(ipanel)-1_8,
1317 & nbcols_panel, nbcols_panel,
1318 & nrhs_b, wcb, lwcb, lda_wcb, ppiv_panel, mtype, keep)
1323 & (a, la, apos1, nx, lda, ny,
1324 & nrhs_b, wcb, lwcb, ptrx, ldx,
1326 & mtype, keep, coef_y )
1327 INTEGER,
INTENT(IN) :: MTYPE, NY, NX, KEEP(500)
1328 INTEGER,
INTENT(IN) :: NRHS_B, LDY, LDA, LDX
1329 INTEGER(8),
INTENT(IN) :: LA, APOS1, LWCB, PTRX,
1331 COMPLEX,
INTENT(IN) :: A(LA)
1332 COMPLEX,
INTENT(INOUT) :: WCB(LWCB)
1333 COMPLEX,
INTENT(IN) :: COEF_Y
1334 COMPLEX ALPHA, ZERO, ONE
1335 PARAMETER (zero=(0.0e0,0.0e0), one=(1.0e0,0.0e0),
1336 & alpha=(-1.0e0,0.0e0))
1337 IF ( nx .NE. 0 .AND. ny.NE.0 )
THEN
1338 IF ( mtype .eq. 1 )
THEN
1339#if defined(MUMPS_USE_BLAS2)
1340 IF ( nrhs_b == 1 )
THEN
1341 CALL cgemv(
'T', nx, ny, alpha, a(apos1),
1342 & lda, wcb(ptrx), 1, coef_y,
1346 CALL cgemm(
'T',
'N', ny, nrhs_b, nx, alpha,
1347 & a(apos1), lda, wcb(ptrx), ldx, coef_y,
1349#if defined(MUMPS_USE_BLAS2)
1353#if defined(MUMPS_USE_BLAS2)
1354 IF ( nrhs_b == 1 )
THEN
1355 CALL cgemv(
'N',ny, nx, alpha
1356 & lda, wcb(ptrx), 1,
1357 & coef_y, wcb(ptry), 1 )
1360 CALL cgemm(
'N',
'N', ny, nrhs_b, nx, alpha,
1361 & a(apos1), lda, wcb(ptrx), ldx,
1362 & coef_y, wcb(ptry), ldy)
1363#if defined(MUMPS_USE_BLAS2)
1371 & INODE, N, NPIV, LIELL, NELIM, NSLAVES,
1375 & WCB, LWCB, LD_WCBPIV,
1376 & RHSCOMP, LRHSCOMP, NRHS,
1377 & POSINRHSCOMP_FWD, JBDEB, JBFIN,
1378 & MTYPE, KEEP, OOCWRITE_COMPATIBLE_WITH_BLR,
1383 INTEGER,
INTENT(IN) :: MTYPE, INODE, N, NPIV, LIELL,
1385 INTEGER,
INTENT(IN) :: LRHSCOMP, NRHS, LIW, JBDEB, JBFIN
1386 INTEGER,
INTENT(IN) :: IW(LIW), IPOS, POSINRHSCOMP_FWD(N)
1387 INTEGER(8),
INTENT(IN) :: LWCB, APOS, LA, PPIV_COURANT
1388 INTEGER,
INTENT(IN) :: LD_WCBPIV
1389 INTEGER,
INTENT(IN) :: KEEP(500)
1390 COMPLEX,
INTENT(IN) :: WCB( LWCB )
1391 COMPLEX,
INTENT(IN) :: A( LA )
1392 COMPLEX,
INTENT(INOUT) :: RHSCOMP(LRHSCOMP, NRHS)
1393 LOGICAL,
INTENT(IN) :: OOCWRITE_COMPATIBLE_WITH_BLR
1394 LOGICAL,
INTENT(IN) :: IGNORE_K459
1396 INTEGER :: IPOSINRHSCOMP, JJ, K, NBK,
1398 INTEGER(8) :: IFR8 , APOS1, APOS2, APOSOFF, IFR_ini8,
1400 COMPLEX :: VALPIV, A11, A22, A12, DETPIV
1401 INTEGER,
PARAMETER :: PANEL_TABSIZE = 20
1402 INTEGER(8) :: PANEL_POS(PANEL_TABSIZE)
1403 INTEGER :: PANEL_COL(PANEL_TABSIZE)
1404 INTEGER :: IPANEL, ICOL, NBPANELS, NB_TARGET
1408 parameter( one=(1.0e0,0.0e0) )
1409 IF ( npiv.EQ. 0 )
RETURN
1410 nrhs_b = jbfin-jbdeb+1
1411 IF ( mtype .EQ. 1 .OR. keep(50) .NE. 0 )
THEN
1415 j1 = ipos + liell + 1
1416 j3 = ipos + liell + npiv
1418 iposinrhscomp = posinrhscomp_fwd(iw(j1))
1419 IF ( keep(50) .eq. 0 )
THEN
1425 DO ifr8 = 0_8, int(npiv-1,8)
1426 rhscomp(iposinrhscomp+ifr8, k) =
1427 & wcb(ppiv_courant+(k-jbdeb)*ld_wcbpiv
1433 DO ifr8 = 0_8, int(npiv-1,8)
1434 rhscomp(iposinrhscomp+ifr8, k) =
1435 & wcb(ppiv_courant+(k-jbdeb)*ld_wcbpiv+ifr8)
1441 & nb_target, nbpanels, panel_col, panel_pos, panel_tabsize,
1443 ifr_ini8 = ppiv_courant
1452 ipanel = (jj-j1)/nb_target + 1
1453 IF ( jj-j1+1 .LT. panel_col(ipanel) ) ipanel = ipanel -1
1454 icol = jj-j1+1 - panel_col(ipanel) + 1
1455 ldaj = panel_col(ipanel+1) - panel_col(ipanel)
1456 apos1 = apos-1_8+panel_pos( ipanel ) + int(icol-1,8) *
1458 ifr8 = ifr_ini8 + int(k-jbdeb,8)*int(ld_wcbpiv,8) +
1460 IF ( jj .NE. j1 )
THEN
1461 IF ( iw(liell+jj-1) .LT. 0 )
THEN
1470 ELSE IF ( iw(jj+liell) .GT. 0 )
THEN
1471 valpiv = one/a( apos1 )
1472 rhscomp(iposinrhscomp+jj-j1 , k ) =
1473 & wcb( ifr8 ) * valpiv
1474 apos1 = apos1 + int(ldaj + 1,8)
1476 apos2 = apos1+int(ldaj+1,8)
1481 detpiv = a11*a22 - a12**2
1483 a11 = a(apos2)/detpiv
1486 poswcb2 = poswcb1+1_8
1487 rhscomp(iposinrhscomp+jj-j1,k) =
1489 & + wcb(poswcb2)*a12
1490 rhscomp(iposinrhscomp+jj-j1+1,k) =
1492 & + wcb(poswcb2)*a22
1501 & INODE, N, NPIV, LIELL, NELIM, NSLAVES,
1505 & WCB, LWCB, LD_WCBPIV,
1506 & RHSCOMP, LRHSCOMP, NRHS,
1507 & POSINRHSCOMP_FWD, JBDEB, JBFIN,
1508 & MTYPE, KEEP, OOCWRITE_COMPATIBLE_WITH_BLR,
1512 INTEGER,
INTENT(IN) :: MTYPE, INODE, , NPIV, LIELL,
1514 INTEGER,
INTENT(IN) :: LRHSCOMP, NRHS, LIW, JBDEB, JBFIN
1515 INTEGER,
INTENT(IN) :: IW(LIW), IPOS, POSINRHSCOMP_FWD(N)
1516 INTEGER(8),
INTENT(IN) :: LWCB, APOS, LA, PPIV_COURANT
1517 INTEGER,
INTENT(IN) :: LD_WCBPIV
1518 INTEGER,
INTENT(IN) :: KEEP(500)
1519 COMPLEX,
INTENT(IN) :: WCB( LWCB )
1520 COMPLEX,
INTENT(IN) :: A( LA )
1521 COMPLEX,
INTENT(INOUT) :: RHSCOMP(LRHSCOMP, NRHS)
1522 LOGICAL,
INTENT(IN) :: OOCWRITE_COMPATIBLE_WITH_BLR
1523 LOGICAL,
INTENT(IN) :: IGNORE_K459
1524 INTEGER :: TempNROW, J1, J3, PANEL_SIZE, TYPEF
1525 INTEGER :: IPOSINRHSCOMP, JJ, K, NBK, LDAJ,
1526 & ldaj_ini, nbk_ini, ldaj_first_panel, nrhs_b
1527 INTEGER(8) :: IFR8 , APOS1, , APOSOFF, IFR_ini8,
1529 COMPLEX :: VALPIV, A11, A22, A12, DETPIV
1532 parameter( one=(1.0e0,0.0e0) )
1533 nrhs_b = jbfin-jbdeb+1
1534 IF ( mtype .EQ. 1 .OR. keep(50) .NE. 0 )
THEN
1538 j1 = ipos + liell + 1
1539 j3 = ipos + liell + npiv
1541 iposinrhscomp = posinrhscomp_fwd(iw(j1))
1542 IF ( keep(50) .eq. 0 )
THEN
1546 ifr8 = ppiv_courant + (k-jbdeb)*ld_wcbpiv
1547 rhscomp(iposinrhscomp:iposinrhscomp+npiv-1, k) =
1548 & wcb(ifr8:ifr8+int(npiv-1,8))
1552 ifr8 = ppiv_courant - 1_8
1553 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
THEN
1554 IF (mtype.EQ.1)
THEN
1555 IF ((mtype.EQ.1).AND.nslaves.NE.0)
THEN
1556 tempnrow= npiv+nelim
1557 ldaj_first_panel=tempnrow
1560 ldaj_first_panel=tempnrow
1565 ldaj_first_panel=liell
1571 IF ( keep(459) .GT. 1 .AND. keep(50) .NE. 0
1572 & .AND. .NOT. ignore_k459 )
THEN
1580 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
THEN
1583 ifr_ini8 = ppiv_courant - 1_8
1585 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
1592 ifr8 = ifr_ini8 + int(k-jbdeb,8)*int(ld_wcbpiv,8)
1598 IF (jj .GT. j3)
EXIT
1600 IF (iw(jj+liell) .GT. 0)
THEN
1601 valpiv = one/a( apos1 )
1602 rhscomp(iposinrhscomp+jj-j1 , k ) =
1603 & wcb( ifr8 ) * valpiv
1604 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
1607 IF (nbk.EQ.panel_size)
THEN
1609 ldaj = ldaj - panel_size
1612 apos1 = apos1 + int(ldaj
1615 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
1619 apos2 = apos1+int(ldaj+1,8)
1620 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
1622 aposoff = apos1+int(ldaj,8)
1631 a11 = a(apos2)/detpiv
1634 poswcb2 = poswcb1+1_8
1635 rhscomp(iposinrhscomp+jj-j1,k) =
1637 & + wcb(poswcb2)*a12
1638 rhscomp(iposinrhscomp+jj-j1+1,k) =
1640 & + wcb(poswcb2)*a22
1641 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
1644 IF (nbk.GE.panel_size)
THEN
1649 apos1 = apos2 + int(ldaj + 1,8)
1660 & COMM, MYID, I_AM_SLAVE, MASTER, NB_BYTES, NB_BYTES_MAX,
1661 & K16_8, LP, LPOK, ICNTL, INFO )
1665 REAL,
dimension(:),
pointer :: SCALING
1666 REAL,
dimension(:),
pointer ::
1667 end type scaling_data_t
1668 type (scaling_data_t),
INTENT(INOUT) :: scaling_data
1669 INTEGER,
INTENT(IN) :: N, LILOC, COMM, MYID, MASTER, LP
1670 INTEGER,
INTENT(IN) :: ILOC(LILOC)
1671 INTEGER(8),
INTENT(INOUT) :: NB_BYTES, NB_BYTES_MAX
1672 INTEGER(8),
INTENT(IN) :: K16_8
1673 LOGICAL,
INTENT(IN) :: I_AM_SLAVE, LPOK
1674 INTEGER,
INTENT(INOUT) :: INFO(80)
1675 INTEGER,
INTENT(IN) :: ICNTL(60)
1676 REAL,
POINTER,
DIMENSION(:) ::
1677 INTEGER :: I, IERR_MPI, allocok
1679 NULLIFY(scaling_data%SCALING_LOC)
1680 IF (i_am_slave)
THEN
1681 ALLOCATE(scaling_data%SCALING_LOC(
max(1,liloc)),
1683 IF (allocok > 0)
THEN
1685 info(2)=
max(1,liloc)
1688 nb_bytes = nb_bytes + int(
max(1,liloc),8)*k16_8
1689 nb_bytes_max =
max(nb_bytes_max,nb_bytes)
1691 IF (myid .NE. master)
THEN
1692 ALLOCATE(scaling(n), stat=allocok)
1693 IF (allocok > 0)
THEN
1695 WRITE(lp,*)
'Error allocating temporary scaling array'
1701 nb_bytes = nb_bytes + int(n,8)*k16_8
1702 nb_bytes_max =
max(nb_bytes_max,nb_bytes)
1704 scaling => scaling_data%SCALING
1709 IF (info(1) .LT. 0)
GOTO 90
1710 CALL mpi_bcast( scaling(1), n, mpi_real,
1711 & master, comm, ierr_mpi)
1712 IF ( i_am_slave )
THEN
1714 IF (iloc(i) .GE. 1 .AND. iloc(i) .LE. n)
THEN
1715 scaling_data%SCALING_LOC(i) = scaling(iloc(i))
1720 IF (myid.NE. master)
THEN
1721 IF (
associated(scaling))
THEN
1723 nb_bytes = nb_bytes - int(n,8)*k16_8
1727 IF (info(1) .LT. 0)
THEN
1728 IF (
associated(scaling_data%SCALING_LOC))
THEN
1729 DEALLOCATE(scaling_data%SCALING_LOC)
1730 NULLIFY(scaling_data%SCALING_LOC)
subroutine mumps_propinfo(icntl, info, comm, id)
subroutine cmumps_sol_scalx_elt(mtype, n, nelt, eltptr, leltvar, eltvar, na_elt8, a_elt, w, keep, keep8, colsca)
subroutine cmumps_solve_gemm_update(a, la, apos1, nx, lda, ny, nrhs_b, wcb, lwcb, ptrx, ldx, ptry, ldy, mtype, keep, coef_y)
subroutine cmumps_solve_bwd_panels(a, la, apos, npiv, iw, nrhs_b, wcb, lwcb, lda_wcb, ppiv_courant, mtype, keep)
subroutine cmumps_solve_fwd_trsolve(a, la, apos, npiv, ldadiag, nrhs_b, wcb, lwcb, lda_wcb, ppiv_courant, mtype, keep)
subroutine cmumps_compso(n, keep28, iwcb, liww, w, lwc, poswcb, iwposcb, ptricb, ptracb)
subroutine cmumps_freetopso(n, keep28, iwcb, liww, w, lwc, poswcb, iwposcb, ptricb, ptracb)
subroutine cmumps_eltyd(mtype, n, nelt, eltptr, leltvar, eltvar, na_elt8, a_elt, saverhs, x, y, w, k50)
subroutine cmumps_sol_x(a, nz8, n, irn, icn, z, keep, keep8, eff_size_schur, sym_perm)
subroutine cmumps_sol_lcond(n, rhs, x, y, d, r_w, c_w, iw, kase, omega, erx, cond, lp, keep, keep8)
subroutine cmumps_sol_cpy_fs2rhscomp(jbdeb, jbfin, nbrows, keep, rhscomp, nrhs, lrhscomp, first_row_rhscomp, w, ld_w, first_row_w)
subroutine cmumps_solve_fwd_panels(a, la, apos, npiv, iw, nrhs_b, wcb, lwcb, lda_wcb, ppiv_courant, mtype, keep)
subroutine cmumps_scal_x(a, nz8, n, irn, icn, z, keep, keep8, colsca, eff_size_schur, sym_perm)
subroutine cmumps_sol_mulr(n, r, w)
subroutine cmumps_build_mapping_info(id)
subroutine cmumps_sol_y(a, nz8, n, irn, icn, rhs, x, r, w, keep, keep8)
subroutine cmumps_sol_q(mtype, iflag, n, lhs, wrhs, w, res, givnorm, anorm, xnorm, sclnrm, mprint, icntl, keep, keep8)
subroutine cmumps_solve_bwd_trsolve(a, la, apos, npiv, ldadiag, nrhs_b, wcb, lwcb, lda_wcb, ppiv_courant, mtype, keep)
subroutine cmumps_eltqd2(mtype, n, nelt, eltptr, leltvar, eltvar, na_elt8, a_elt, lhs, wrhs, w, rhs, keep, keep8)
subroutine cmumps_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 cmumps_sol_bwd_gthr(jbdeb, jbfin, j1, j2, rhscomp, nrhs, lrhscomp, w, ld_w, first_row_w, iw, liw, keep, n, posinrhscomp_bwd)
subroutine cmumps_sol_b(n, kase, x, est, w, iw, grain)
subroutine cmumps_sol_x_elt(mtype, n, nelt, eltptr, leltvar, eltvar, na_elt8, a_elt, w, keep, keep8)
subroutine cmumps_qd2(mtype, n, nz8, aspk, irn, icn, lhs, wrhs, w, rhs, keep, keep8)
subroutine cmumps_solve_get_ooc_node(inode, ptrfac, keep, a, la, step, keep8, n, must_be_permuted, ierr)
subroutine cmumps_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 cmumps_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 cmumps_sol_omega(n, rhs, x, y, r_w, c_w, iw, iflag, omega, noiter, testconv, lp, arret, grain)
subroutine cgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
CGEMV
subroutine ctrsv(uplo, trans, diag, n, a, lda, x, incx)
CTRSV
subroutine ctrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
CTRSM
subroutine cgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
CGEMM
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)
subroutine cmumps_solve_modify_state_node(inode)
integer function cmumps_solve_is_inode_in_mem(inode, ptrfac, nsteps, a, la, ierr)
subroutine, public cmumps_solve_alloc_factor_space(inode, ptrfac, keep, keep8, a, ierr)
subroutine, public cmumps_read_ooc(dest, inode, ierr)
integer ooc_node_not_in_mem
integer function, public cmumps_ooc_panel_size(nnmax)
integer ooc_node_permuted