357 &(idrhs, idinfo, idn, idnrhs, idlrhs)
358 COMPLEX,
DIMENSION(:),
POINTER :: idRHS
359 INTEGER,
intent(in) :: idN, idNRHS, idLRHS
360 INTEGER,
intent(inout) :: idINFO(:)
364 TYPE (CMUMPS_STRUC),
TARGET :: id
368 TYPE (CMUMPS_STRUC),
TARGET :: id
372 TYPE (CMUMPS_STRUC),
TARGET :: id
376 TYPE (CMUMPS_STRUC),
TARGET,
INTENT(IN) :: id
384 parameter( master = 0 )
390 TYPE (CMUMPS_STRUC) :: id
583 INTEGER JOBMIN, JOBMAX, OLDJOB
585 INTEGER I, J, MP, LP, MPG, KEEP235SAVE, KEEP242SAVE,
586 & KEEP243SAVE, KEEP495SAVE, KEEP497SAVE
588 LOGICAL LANA, LFACTO, LSOLVE, PROK, LPOK, FLAG, PROKG
589 LOGICAL NOERRORBEFOREPERM
595 CHARACTER(LEN=20) :: FROM_C_INTERFACE_STRING
596 INTEGER,
PARAMETER :: ICNTL18DIST_MIN = 1
597 INTEGER,
PARAMETER :: ICNTL18DIST_MAX = 3
598 INTEGER,
DIMENSION(:),
ALLOCATABLE :: UNS_PERM_INV
600 DOUBLE PRECISION TIMEG, TIMETOTAL
601 INTEGER(8) :: ,STRUC_SIZE
602 INTEGER:: ICNTL16_LOC
604 IF (id%JOB .EQ. -200)
THEN
619 noerrorbeforeperm = .false.
620 uns_perm_done = .false.
633 IF ( .NOT. flag )
THEN
637 990
FORMAT(
' Unrecoverable Error in CMUMPS initialization: ',
638 &
' MPI is not running.')
665 IF ( jobmin .NE. jobmax )
THEN
673 IF ((job.LT.-3.OR.job.EQ.0.OR.job.GT.8)
685 oldjob = id%KEEP( 40 ) + 456789
686 IF (oldjob.NE.-1.AND.oldjob.NE.-2.AND.
687 & oldjob.NE.1.AND.oldjob.NE.2.AND.
696 IF((job.GT.-2).AND.(id%KEEP(140).EQ.1))
then
710 IF ((job.EQ.1).OR.(job.EQ.4).OR.
711 & (job.EQ.6)) lana = .true.
712 IF ((job.EQ.2).OR.(job.EQ.4).OR.
713 & (job.EQ.5).OR.(job.EQ.6)) lfacto = .true.
714 IF ((job.EQ.3).OR.(job.EQ.5).OR.
715 & (job.EQ.6)) lsolve = .true.
716 IF ( lana .OR. lfacto .OR. lsolve)
THEN
719 CALL mpi_bcast( id%KEEP(370), 2, mpi_integer, master, id%COMM,
722 CALL mpi_bcast( id%KEEP(198), 1, mpi_integer, master,
724 IF (id%KEEP(370) .EQ. 1)
THEN
730 IF (id%KEEP(371) .EQ. 1)
THEN
732 IF (id%KEEP(50) .EQ. 0 .AND. id%NSLAVES .GE. 32)
THEN
745 IF (id%KEEP(198).NE.0)
THEN
749 IF ((id%KEEP(50).EQ.0) .AND. (id%NSLAVES.GT.1))
THEN
752 IF (id%KEEP(198).EQ.2)
THEN
767 IF (lana .OR. lfacto)
THEN
774 IF (job.EQ.-2.OR.job.EQ.1.OR.job.EQ.2.OR.job.EQ.3.OR.
775 & job.EQ.4.OR.job.EQ.5.OR.job.EQ.6
776 & .OR.job.EQ.7.OR.job.EQ.8.OR.job.EQ.-3
784 lpok = ((lp.GT.0).AND.(id%ICNTL(4).GE.1))
785 prok = ((mp.GT.0).AND.(id%ICNTL(4).GE.2))
786 prokg = ( mpg .GT. 0 .and. id%MYID .eq. master )
787 prokg = (prokg.AND.(id%ICNTL(4).GE.2))
788 IF (id%KEEP(500).EQ.1)
THEN
789 from_c_interface_string=
" from C interface"
791 from_c_interface_string=
" "
796 icntl16_loc = id%ICNTL(16)
797 CALL mpi_bcast( icntl16_loc, 1, mpi_integer, master, id%COMM,
801#
if defined(workaroundintelilp64openmplimitation)
825 WRITE(mpg,
'(/A,A,A,A,I4)')
826 &
'Entering CMUMPS ',
827 & trim(adjustl(id%VERSION_NUMBER)),
828 & trim(from_c_interface_string),
830 ELSE IF (id%ICNTL(5) .NE. 1)
THEN
832 IF (id%ICNTL(18) .EQ. 0
834 WRITE(mpg,
'(/A,A,A,A,I4,I12,I15)')
835 &
'Entering CMUMPS ',
836 & trim(adjustl(id%VERSION_NUMBER)),
837 & trim(from_c_interface_string),
838 &
' with JOB, N, NNZ =', job,id%N,id%KEEP8(28)
840 WRITE(mpg,
'(/A,A,A,A,I4,I12)')
841 &
'Entering CMUMPS ',
842 & trim(adjustl(id%VERSION_NUMBER)),
843 & trim(from_c_interface_string),
844 &
' with JOB, N =', job,id%N
848 WRITE(mpg,
'(/A,A,A,A,I4,I12,I15)')
849 &
'Entering CMUMPS ',
850 & trim(adjustl(id%VERSION_NUMBER)),
851 & trim(from_c_interface_string),
852 &
' driver with JOB, N, NELT =', job,id%N,id%NELT
864 WRITE(mpg,
'(A,I6,A)')
' executing #MPI = ',
865 & id%NPROCS,
', without OMP'
867 IF (job.GE.1 .AND. job.LE.6)
THEN
868 IF ( id%KEEP(370).EQ.1.OR.id%KEEP(371).EQ.1)
THEN
869 WRITE(mpg, 99996) id%KEEP(370), id%KEEP(371)
87199996
FORMAT(/
'Advanced settings:'/
872 &
' KEEP(370) Static mapping =',i4/
873 &
' KEEP(371) Advanced optimizations =',i4)
874 IF (id%KEEP(401) .EQ.1)
THEN
875 WRITE(mpg, 99997) id%KEEP(401)
87799997
FORMAT(
'L0 thread based multithreading setting:'/
878 &
' KEEP(401) (0=OFF, 1=ON) =',i4)
892 IF ( job .EQ. -1 )
THEN
901 oldjob = id%KEEP( 40 ) + 456789
902 IF ( oldjob .EQ. 1 .OR.
904 & oldjob .EQ. 3 )
THEN
918 IF ( id%INFO(1) .LT. 0 )
THEN
932 IF (id%KEEP(201).GT.0)
THEN
946 IF ( id%INFO(1) .LT. 0 )
GOTO 499
949 IF ( job .EQ. -2 )
THEN
953 id%KEEP(40)= -2 - 456789
961 IF (id%MYID.EQ.master)
THEN
973 IF ( job .EQ. 7 .OR. job .EQ. 8 )
THEN
974 IF( job.EQ.8 .AND. oldjob.NE.-1)
THEN
979 IF (id%MYID.EQ.master)
THEN
984 IF ( (id%KEEP(46).EQ.0).AND.(id%NPROCS.LE.1) )
987 id%INFO(2) = id%NPROCS
993 IF ( id%INFO(1) .LT. 0 )
GOTO 499
994 IF ( job .EQ. 7 )
THEN
995 IF (id%MYID.EQ.master)
THEN
999 IF (id%MYID.EQ.master)
THEN
1002 WRITE( mpg,
'(/A,F12.4)')
1003 &
' Elapsed time in save structure driver= ', timeg
1007 IF (id%MYID.EQ.master)
THEN
1011 IF (id%MYID.EQ.master)
THEN
1014 WRITE( mpg,
'(/A,F12.4)')
1015 &
' Elapsed time in restore structure driver= '
1020 IF ( id%INFO(1) .LT. 0 )
GOTO 499
1030 IF (job .EQ. -3)
THEN
1032 IF ( id%INFO(1) .LT. 0 )
GOTO 499
1037 IF ( oldjob .LT. 2 )
THEN
1043 IF ( id%INFO(1) .LT. 0 )
GOTO 499
1054 IF (id%MYID.EQ.master)
THEN
1059 IF ( (id%KEEP(46).EQ.0).AND.(id%NPROCS.LE.1) )
1062 id%INFO(2) = id%NPROCS
1069 & id%COMM, id%MYID )
1070 IF ( id%INFO(1) .LT. 0 )
GOTO 499
1081 IF ( prokg .AND. oldjob .EQ. -1 )
THEN
1089 IF ( oldjob .EQ. 0 .OR. oldjob .GT. 3 .OR. oldjob .LT. -1 )
THEN
1094 IF ( oldjob .GE. 2 )
THEN
1100 IF (
associated(id%IS))
THEN
1104 IF (
associated(id%S))
THEN
1115 IF ( oldjob .LT. 1 .and. .NOT. lana )
THEN
1126 IF ( oldjob .LT. 2 .AND. .NOT. lfacto )
THEN
1138#if ! defined (LARGEMATRICES)
1139 noerrorbeforeperm =.true.
1140 uns_perm_done=.false.
1141 IF (id%MYID .eq. master .AND. id%KEEP(23) .NE. 0)
THEN
1142 IF ( id%JOB .EQ. 2 .OR. id%JOB .EQ. 5 .OR.
1143 & (id%JOB .EQ. 3 .AND. (id%ICNTL(10) .NE.0 .OR.
1144 & id%ICNTL(11).NE. 0)))
THEN
1145 uns_perm_done = .true.
1146 ALLOCATE(uns_perm_inv(id%N),stat=ierr)
1147 IF (ierr .GT. 0)
THEN
1157 IF (lpok)
WRITE(lp,99993)
1161 uns_perm_inv(id%UNS_PERM(i))=i
1163 DO i8 = 1_8, id%KEEP8(28)
1166 IF (j.LE.0.OR.j.GT.id%N) cycle
1167 id%JCN(i8)=uns_perm_inv(j)
1169 DEALLOCATE(uns_perm_inv)
1177 & id%COMM, id%MYID )
1178 IF ( id%INFO( 1 ) .LT. 0 )
GO TO 499
1211 id%KEEP(40)=-1 -456789
1213 IF (id%MYID.EQ.master)
THEN
1215 IF ((id%N.LE.0).OR.((id%N+id%N+id%N)/3.NE.id%N))
THEN
1220 IF (id%ICNTL(5).NE.1)
THEN
1222 IF (id%ICNTL(18) .LT. 1 .OR. id%ICNTL(18) .GT. 3)
THEN
1224 IF (id%KEEP8(28) .LE. 0_8)
THEN
1232 IF (id%NELT .LE. 0)
THEN
1234 id%INFO(2) = id%NELT
1246 IF ( id%ICNTL(5) .EQ. 1 )
THEN
1247 IF (
associated( id%ELTPROC ) )
1248 &
DEALLOCATE( id%ELTPROC )
1249 ALLOCATE( id%ELTPROC(id%NELT), stat=ierr )
1252 id%INFO(2) = id%NELT
1253 IF ( lpok )
WRITE(lp,
'(A)')
1254 &
'Problem in allocating work array ELTPROC'
1263 IF ( id%ICNTL(5) .NE. 1 )
THEN
1265 IF ( id%ICNTL(18) .LT. icntl18dist_min
1266 & .OR. id%ICNTL(18) .GT. icntl18dist_max )
THEN
1267 IF ( .not.
associated( id%IRN ) )
THEN
1270#if defined(MUMPS_F2003)
1271 ELSE IF (
size( id%IRN, kind=8 ) < id%KEEP8(28) )
THEN
1276 ELSE IF ( id%KEEP8(28) .LE. int(huge(id%NZ),8) .AND.
1277 &
size(id%IRN) < int(id%KEEP8(28)) )
THEN
1281 ELSE IF ( .not.
associated( id%JCN ) )
THEN
1284#if defined(MUMPS_F2003)
1285 ELSE IF (
size( id%JCN, kind=8 ) < id%KEEP8(28) )
THEN
1288 ELSE IF ( id%KEEP8(28) .LE. int(huge(id%NZ),8) .AND.
1289 &
size(id%JCN) < int(id%KEEP8(28)) )
THEN
1295 IF ( id%INFO( 1 ) .eq. -22 )
THEN
1296 IF ( lpok )
WRITE(lp,
'(A)')
1297 &
'Error in analysis: IRN/JCN badly allocated.'
1300 IF ( .not.
associated( id%ELTPTR ) )
THEN
1303 ELSE IF (
size( id%ELTPTR ) < id%NELT+1 )
THEN
1306 ELSE IF ( .not.
associated( id%ELTVAR ) )
THEN
1310 id%LELTVAR = id%ELTPTR( id%NELT+1 ) - 1
1311 IF (
size( id%ELTVAR ) < id%LELTVAR )
THEN
1319 IF ( id%KEEP(50) .EQ. 0 )
THEN
1322 j = id%ELTPTR(i+1) - id%ELTPTR(i)
1323 id%KEEP8(30) = id%KEEP8(30) + int(j,8) * int(j,8)
1328 j = id%ELTPTR(i+1) - id%ELTPTR(i)
1329 id%KEEP8(30) = id%KEEP8(30) +
1330 & (int(j,8) *int(j+1,8))/2_8
1335 IF ( id%INFO( 1 ) .eq. -22 )
THEN
1336 IF ( lpok )
WRITE(lp,
'(A)')
1337 &
'Error in analysis: ELTPTR/ELTVAR badly allocated.'
1346 & id%COMM, id%MYID )
1347 IF ( id%INFO( 1 ) .LT. 0 )
GO TO 499
1351 IF (id%MYID .eq. master)
THEN
1359 IF (id%MYID.EQ.master)
THEN
1361 id%KEEP(52) = id%ICNTL(8)
1363 IF ( id%KEEP(52) .GT. 8 .OR. id%KEEP(52).LT.-2)
1365 IF ( id%KEEP(52) .EQ. 2 .OR. id%KEEP(52).EQ.5
1366 & .OR. id%KEEP(52) .EQ. 6 )
1368 IF ((id%KEEP(52).EQ.77).AND.(id%KEEP(50).EQ.1))
THEN
1372 IF ( id%KEEP(52).EQ.77 .OR. id%KEEP(52).LE.-2)
THEN
1375 IF (.not.
associated(id%A)) id%KEEP(52) = 0
1378 IF(id%KEEP(52) .EQ. -1) id%KEEP(52) = 0
1382 IF (id%ICNTL(6).EQ.0) id%KEEP(52) = 0
1384 IF (id%KEEP(50).EQ.1) id%KEEP(52) = 0
1386 IF (id%KEEP(52).EQ.-2)
THEN
1394 IF (
associated(id%COLSCA))
THEN
1395 DEALLOCATE( id%COLSCA )
1398 IF (
associated(id%ROWSCA))
THEN
1399 DEALLOCATE( id%ROWSCA )
1411 IF (id%MYID .eq. master)
THEN
1413 IF (id%KEEP(52).EQ.0) id%INFOG(33)=id%ICNTL(8)
1414 IF (id%KEEP(52).EQ.-2)
THEN
1416 IF (.not.
associated(id%COLSCA).OR.
1417 & .not.
associated(id%ROWSCA)
1424 IF ( mpg .GT. 0 )
THEN
1426 &
' Warning; scaling was not computed during analysis'
1428 IF (
associated(id%COLSCA))
THEN
1429 DEALLOCATE( id%COLSCA )
1432 IF (
associated(id%ROWSCA))
THEN
1433 DEALLOCATE( id%ROWSCA )
1438 IF (id%KEEP(52) .NE. 0)
THEN
1439 id%INFOG(33)=id%KEEP(52)
1445 IF (id%MYID .eq. master) id%INFOG(24)=id%KEEP(95)
1447 IF (id%MYID .eq. master)
THEN
1449 id%DKEEP(71) = real(timeg)
1452 WRITE( mpg,
'(/A,F12.4)')
1453 &
' Elapsed time in analysis driver= ', timeg
1458 IF ( id%INFO( 1 ) .LT. 0 )
GO TO 499
1459 id%KEEP(40) = 1 -456789
1470 IF (id%MYID .eq. master)
THEN
1478 id%KEEP(40) = 1 - 456789
1488 CALL mpi_bcast( id%KEEP(125), 1, mpi_integer, master, id%COMM,
1490 IF ( id%MYID .EQ. master )
THEN
1495 IF (id%KEEP(60).EQ.1)
THEN
1496 IF (
associated( id%SCHUR_CINTERFACE))
THEN
1505 & int(id%SIZE_SCHUR,8)*int(id%SIZE_SCHUR,8))
1507 NULLIFY(id%SCHUR_CINTERFACE)
1509 IF ( .NOT.
associated (id%SCHUR))
THEN
1512 &
' SCHUR not associated'
1515 ELSE IF (
size(id%SCHUR) .LT.
1519 &
' SCHUR allocated but too small'
1528 IF ( id%KEEP(54) .EQ. 0 )
THEN
1529 IF ( id%KEEP(55).eq.0 )
THEN
1531 IF ( .not.
associated( id%IRN ) )
THEN
1534#
if defined(mumps_f2003)
1535 ELSE IF (
size( id%IRN, kind=8 ) < id%KEEP8(28) )
THEN
1541 ELSE IF ( id%KEEP8(28) .LE. int(huge(id%NZ),8) .AND.
1542 &
size(id%IRN) < int(id%KEEP8(28)) )
THEN
1546 ELSE IF ( .not.
associated( id%JCN ) )
THEN
1549#if defined(MUMPS_F2003)
1550 ELSE IF (
size( id%JCN, kind=8 ) < id%KEEP8(28) )
THEN
1553 ELSE IF ( id%KEEP8(28) .LE. int(huge(id%NZ),8) .AND.
1554 &
size(id%JCN) < int(id%KEEP8(28)) )
THEN
1558 ELSEIF ( .not.
associated( id%A ) )
THEN
1561#if defined(MUMPS_F2003)
1562 ELSE IF (
size( id%A, kind=8 ) < id%KEEP8(28) )
THEN
1565 ELSE IF ( id%KEEP8(28) .LE. int(huge(id%NZ),8) .AND.
1566 &
size( id%A ) < int(id%KEEP8(28)) )
THEN
1573 IF ( .not.
associated( id%ELTPTR ) )
THEN
1576 ELSE IF (
size( id%ELTPTR ) < id%NELT+1 )
THEN
1579 ELSE IF ( .not.
associated( id%ELTVAR ) )
THEN
1582 ELSEIF (
size( id%ELTVAR ) < id%LELTVAR )
THEN
1585 ELSEIF ( .not.
associated( id%A_ELT ) )
THEN
1589#if defined(MUMPS_F2003)
1590 IF (
size( id%A_ELT, kind=8 ) < id%KEEP8(30) )
THEN
1592 IF ( id%KEEP8(30) < int(huge(id%NZ),8) .AND.
1593 &
size( id%A_ELT ) < int(id%KEEP8(30)) )
THEN
1605 & id%KEEP(50),id%KEEP(54),id%ICNTL(6),id%ICNTL(8))
1616 IF (.NOT. ((id%KEEP(52).EQ.-2).AND.(id%ICNTL(8).EQ.77)) )
1620 id%KEEP(52)=id%ICNTL(8)
1622 IF ( id%KEEP(52) .GT. 8 .OR. id%KEEP(52).LT.-2)
1624 IF ( id%KEEP(52) .EQ. 2 .OR. id%KEEP(52).EQ.5
1625 & .OR. id%KEEP(52) .EQ. 6 )
1627 IF (id%KEEP(52).EQ.77)
THEN
1628 IF (id%KEEP(50).EQ.1)
THEN
1636 IF (id%KEEP(23) .NE. 0 .AND. id%ICNTL(8) .EQ. -1)
THEN
1637 IF ( mpg .GT. 0 )
THEN
1638 WRITE(mpg,
'(A)')
' ** WARNING : SCALING'
1640 &
' ** column permutation applied:'
1642 &
' ** column scaling has to be permuted'
1649 IF (id%KEEP(125).EQ.0)
THEN
1653 IF ( id%KEEP(60) .ne. 0 .and. id%KEEP(52) .ne. 0 )
THEN
1655 IF ( mpg .GT. 0 .AND. id%ICNTL(8) .NE. 0 )
THEN
1656 WRITE(mpg,
'(A)')
' ** Warning: scaling not applied.'
1657 WRITE(mpg,
'(A)')
' ** (disabled with Schur)'
1666 IF (id%KEEP(54) .NE. 0 .AND.
1667 & id%KEEP(52).NE.7 .AND. id%KEEP(52).NE.8 .AND.
1668 & id%KEEP(52) .NE. 0 )
THEN
1670 IF ( mpg .GT. 0 .and. id%ICNTL(8) .ne. 0 )
THEN
1672 & ' ** warning: requested scaling option not available
'
1673 WRITE(MPG,'(a)
') ' **
for distributed matrix entry
'
1682.NE.
IF ( id%KEEP(50) 0 ) THEN
1683.ne..and.
IF ( id%KEEP(52) 1
1684.ne..and.
& id%KEEP(52) -1
1685.ne..and.
& id%KEEP(52) 0
1686.ne..and.
& id%KEEP(52) 7
1687.ne..and.
& id%KEEP(52) 8
1688.ne..and.
& id%KEEP(52) -2
1689.ne.
& id%KEEP(52) 77) THEN
1690.GT.
IF ( MPG 0 ) THEN
1692 & ' ** warning: scaling option n.a.
for symmetric matrix
'
1701.NE..AND.
IF (id%KEEP(55) 0
1702.gt.
& ( id%KEEP(52) 0 ) ) THEN
1704.GT.
IF ( MPG 0 ) THEN
1705 WRITE(MPG,'(a)
') ' ** warning: scaling not applied.
'
1707 & ' ** (only user scaling av.
for elt. entry)
'
1713.eq.
IF ( id%KEEP(52) -1 ) THEN
1714.not.
IF ( associated( id%ROWSCA ) ) THEN
1717 ELSE IF ( size( id%ROWSCA ) < id%N ) THEN
1720.not.
ELSE IF ( associated( id%COLSCA ) ) THEN
1723 ELSE IF ( size( id%COLSCA ) < id%N ) THEN
1740.GT..AND.
IF (id%KEEP(52)0
1741.LE.
& id%KEEP(52) 8) THEN
1742 IF ( associated(id%COLSCA))
1743 & DEALLOCATE( id%COLSCA )
1744 IF ( associated(id%ROWSCA))
1745 & DEALLOCATE( id%ROWSCA )
1746 ALLOCATE( id%COLSCA(id%N), stat=IERR)
1747.GT.
IF (IERR 0) THEN
1751 ALLOCATE( id%ROWSCA(id%N), stat=IERR)
1752.GT.
IF (IERR 0) THEN
1762.NOT.
IF ( associated(id%COLSCA)) THEN
1763 ALLOCATE( id%COLSCA(1), stat=IERR)
1765.GT.
IF (IERR 0) THEN
1769.NOT.
IF ( associated(id%ROWSCA))
1770 & ALLOCATE( id%ROWSCA(1), stat=IERR)
1771.GT.
IF (IERR 0) THEN
1774 IF ( LPOK ) WRITE(LP,'(a)
')
1775 & 'problems in allocations before facto
'
1778.EQ.
IF (id%KEEP(252) 1) THEN
1779 CALL CMUMPS_CHECK_DENSE_RHS
1780 & (id%RHS,id%INFO,id%N,id%NRHS,id%LRHS)
1782 CALL CMUMPS_SET_K221(id)
1783 CALL CMUMPS_CHECK_REDRHS(id)
1786.eq.
END IF ! End of IF (MYID MASTER)
1788 CALL MPI_BCAST( id%KEEP(221), 1, MPI_INTEGER, MASTER, id%COMM,
1792.ne..OR.
I_AM_SLAVE = ( id%MYID MASTER
1793.eq..AND.
& ( id%MYID MASTER
1794.eq.
& id%KEEP(46) 1 ) )
1796.NE..AND..GT.
& id%KEEP(54)0 id%KEEP8(29)0_8) THEN
1797.not.
IF ( associated( id%IRN_loc ) ) THEN
1800#if defined(MUMPS_F2003)
1801 ELSE IF ( size( id%IRN_loc, KIND=8 ) < id%KEEP8(29) ) THEN
1807.LE..AND.
ELSE IF ( id%KEEP8(29) int(huge(id%NZ_loc),8)
1808 & size(id%IRN_loc) < int(id%KEEP8(29)) ) THEN
1812.not.
ELSE IF ( associated( id%JCN_loc ) ) THEN
1815#if defined(MUMPS_F2003)
1816 ELSE IF ( size( id%JCN_loc, KIND=8 ) < id%KEEP8(29) ) THEN
1819.LE..AND.
ELSE IF ( id%KEEP8(29) int(huge(id%NZ_loc),8)
1820 & size(id%JCN_loc) < int(id%KEEP8(29)) ) THEN
1824.not.
ELSEIF ( associated( id%A_loc ) ) THEN
1827#if defined(MUMPS_F2003)
1828 ELSE IF ( size( id%A_loc, KIND=8 ) < id%KEEP8(29) ) THEN
1831.LE..AND.
ELSE IF ( id%KEEP8(29) int(huge(id%NZ_loc),8)
1832 & size( id%A_loc ) < int(id%KEEP8(29)) ) THEN
1842.EQ..OR..EQ.
IF (id%KEEP(60)2id%KEEP(60)3) THEN
1843 IF ( id%root%yes ) THEN
1844 IF ( associated( id%SCHUR_CINTERFACE )) THEN
1853 CALL CMUMPS_SET_TMP_PTR(id%SCHUR_CINTERFACE(1),
1854 & int(id%SCHUR_LLD,8)*int(id%root%SCHUR_NLOC-1,8)+
1855 & int(id%root%SCHUR_MLOC,8))
1856 CALL CMUMPS_GET_TMP_PTR(id%SCHUR)
1857 NULLIFY(id%SCHUR_CINTERFACE)
1860 IF (id%SCHUR_LLD < id%root%SCHUR_MLOC) THEN
1861.GT.
IF (LP0) write(LP,*)
1862 & ' schur leading dimension schur_lld
',
1863 & id%SCHUR_LLD, 'too small with respect to
',
1864 & id%root%SCHUR_MLOC
1866 id%INFO(2)=id%SCHUR_LLD
1867.NOT.
ELSE IF ( associated (id%SCHUR)) THEN
1868.GT.
IF (LP0) write(LP,'(a)
')
1869 & ' schur not associated
'
1872 ELSE IF (size(id%SCHUR) <
1873 & id%SCHUR_LLD*(id%root%SCHUR_NLOC-1)+
1874 & id%root%SCHUR_MLOC) THEN
1877 & ' schur
allocated but too small'
1878 write(lp,*) id%MYID,
' : Size Schur=',
1880 &
' SCHUR_LLD= ', id%SCHUR_LLD,
1881 &
' SCHUR_MLOC=', id%root%SCHUR_NLOC,
1882 &
' SCHUR_NLOC=', id%root%SCHUR_NLOC
1889 id%root%SCHUR_LLD=id%SCHUR_LLD
1890 IF (id%root%SCHUR_NLOC==0)
THEN
1891 ALLOCATE(id%root%SCHUR_POINTER(1), stat=ierr)
1892 IF (ierr .GT.0)
THEN
1897 &
'Problems in allocations before facto'
1901 id%root%SCHUR_POINTER=>id%SCHUR
1911 & id%COMM, id%MYID )
1912 IF ( id%INFO(1) .LT. 0 )
GO TO 499
1918 IF (id%MYID .eq. master) id%INFOG(33)=id%KEEP(52)
1923 IF (id%KEEP(60).EQ.2.OR.id%KEEP(60).EQ.3)
THEN
1924 IF (id%root%yes)
THEN
1925 IF (id%root%SCHUR_NLOC==0)
THEN
1926 DEALLOCATE(id%root%SCHUR_POINTER)
1927 NULLIFY(id%root%SCHUR_POINTER)
1929 NULLIFY(id%root%SCHUR_POINTER)
1935 IF (
associated(id%root%RG2L_ROW))
THEN
1936 DEALLOCATE(id%root%RG2L_ROW)
1937 NULLIFY(id%root%RG2L_ROW)
1939 IF (
associated(id%root%RG2L_COL))
THEN
1940 DEALLOCATE(id%root%RG2L_COL)
1941 NULLIFY(id%root%RG2L_COL)
1943 IF (id%MYID .eq. master)
THEN
1945 id%DKEEP(91) = real(timeg)
1948 WRITE( mpg,
'(/A,F12.4)')
1949 &
' Elapsed time in factorization driver= ', timeg
1954 IF(id%INFO(1).LT.0)
THEN
1956 if (
associated(id%S))
then
1965 id%KEEP(40) = 2 - 456789
1975 IF (id%MYID .eq. master)
THEN
1984 id%KEEP(40) = 2 -456789
1988 IF (id%MYID .eq. master)
THEN
1989 keep235save = id%KEEP(235)
1990 keep242save = id%KEEP(242)
1991 keep243save = id%KEEP(243)
1992 keep495save = id%KEEP(495)
1993 keep497save = id%KEEP(497)
2000 IF (id%KEEP(242).EQ.0) id%KEEP(243)=0
2006 IF ( id%KEEP(52) .ne. 0)
THEN
2007 IF ( .not.
associated( id%ROWSCA ) )
THEN
2010 ELSE IF (
size( id%ROWSCA ) < id%N )
THEN
2013 ELSE IF ( .not.
associated( id%COLSCA ) )
THEN
2016 ELSE IF (
size( id%COLSCA ) < id%N
THEN
2027 & id%COMM, id%MYID )
2028 IF ( id%INFO(1) .LT. 0 )
GO TO 499
2030 IF (id%MYID .eq. master)
THEN
2032 id%DKEEP(111) = real(timeg)
2035 WRITE( mpg,
'(/A,F12.4)')
2036 &
' Elapsed time in solve driver= ', timeg
2038 IF (id%MYID .eq. master)
THEN
2039 id%KEEP(235) = keep235save
2040 id%KEEP(242) = keep242save
2041 id%KEEP(243) = keep243save
2042 id%KEEP(495) = keep495save
2043 id%KEEP(497) = keep497save
2045 IF (id%INFO(1).LT.0)
GOTO 499
2049 id%KEEP(40) = 3 -456789
2062 IF (lpok)
WRITE (lp,99995) id%INFO(1)
2063 IF (lpok)
WRITE (lp,99994) id%INFO(2)
2066#if ! defined(LARGEMATRICES)
2071 IF (id%MYID .eq. master .AND. id%KEEP(23) .NE. 0
2072 & .AND. noerrorbeforeperm)
THEN
2079 IF (id%JOB .NE. 3 .OR. uns_perm_done)
THEN
2080 IF (.not.
associated(id%UNS_PERM))
THEN
2092 DO i8 = 1_8, id%KEEP8(28)
2095 IF (j.LE.0.OR.j.GT.id%N) cycle
2096 id%JCN(i8)=id%UNS_PERM(j)
2113 CALL mpi_bcast( id%RINFOG(1), 40, mpi_real, master,
2115 IF (id%INFOG(1).GE.0 .AND. job.NE.-1
2116 & .AND. job.NE.-2 )
THEN
2117 IF (id%MYID .eq. master)
THEN
2119 id%DKEEP(70) = real(timetotal)
2125 IF (id%INFOG(1).GE.0)
THEN
2129 & mpi_integer8, mpi_sum,id%COMM,ierr)
2130 id%KEEP8(56)=struc_size
2132 & mpi_integer8, mpi_sum,id%COMM,ierr)
2133 id%RINFO(7)=real(id%KEEP8(55))/1e6
2134 id%RINFO(8)=real(id%KEEP8(56))/1e6
2135 id%RINFOG(17)=real(id%KEEP8(57))/1e6
2136 id%RINFOG(18)=real(id%KEEP8(58))/1e6
2139#
if defined(workaroundintelilp64openmplimitation)
2149 IF (id%MYID.EQ.master.and.mpg.GT.0.and.
2150 & id%INFOG(1).lt.0)
THEN
2151 WRITE(mpg,
'(A,I16)')
' On return from CMUMPS, INFOG(1)=',
2153 WRITE(mpg,
'(A,I16)')
' On return from CMUMPS, INFOG(2)=',
216399995
FORMAT (
' ** ERROR RETURN ** FROM CMUMPS INFO(1)=', i5)
216499994
FORMAT (
' ** INFO(2)=', i16)
216599993
FORMAT (
' ** Allocation error: could not permute JCN.')
2240 TYPE (CMUMPS_STRUC),
TARGET,
INTENT(IN) :: id
2243 INTEGER,
POINTER :: JOB
2244 INTEGER,
DIMENSION(:),
POINTER:
2245 REAL,
DIMENSION(:),
POINTER::CNTL
2247 parameter( master = 0 )
2252 IF (id%MYID.EQ.master)
THEN
2256 WRITE (lp,990) icntl(1),icntl(2),icntl(3),icntl(4)
2257 IF (id%SYM.EQ.2)
THEN
2258 WRITE (lp,991) icntl(5),icntl(6),icntl(7),icntl(12),
2261 & icntl(18),icntl(19),icntl(22),icntl(58)
2263 WRITE (lp,891) icntl(5),icntl(6),icntl(7),
2266 & icntl(18),icntl(19),icntl(22),icntl(58)
2268 IF ((icntl(6).EQ.5).OR.(icntl(6).EQ.6).OR.
2269 & (icntl(12).NE.1) )
THEN
2270 WRITE (lp,992) icntl(8)
2272 IF (id%ICNTL(19).NE.0)
2273 &
WRITE(lp,998) id%SIZE_SCHUR
2274 WRITE (lp,993) icntl(14)
2277 WRITE (lp,981) cntl(1), cntl(3), cntl(4), cntl(5), cntl(7)
2278 WRITE (lp,990) icntl(1),icntl(2),icntl(3),icntl(4)
2279 WRITE (lp,992) icntl(8)
2280 WRITE (lp,993) icntl(14)
2281 WRITE (lp,923) icntl(24), icntl(31), icntl(32), icntl(33),
2282 & icntl(35), icntl(36)
2285 WRITE (lp,990) icntl(1),icntl(2),icntl(3),icntl(4)
2287 & icntl(9),icntl(10),icntl(11),icntl(20),icntl(21)
2290 WRITE (lp,981) cntl(1), cntl(3), cntl(4), cntl(5), cntl(7
2291 WRITE (lp,990) icntl(1),icntl(2),icntl(3),icntl(4)
2292 WRITE (lp,992) icntl(8)
2293 IF (id%ICNTL(19).NE.0)
2294 &
WRITE(lp,998) id%SIZE_SCHUR
2295 WRITE (lp,993) icntl(14)
2296 WRITE (lp,923) icntl(24), icntl(31), icntl(32), icntl(33),
2297 & icntl(35), icntl(36)
2300 WRITE (lp,981) cntl(1), cntl(3), cntl(4), cntl(5), cntl(7)
2301 WRITE (lp,990) icntl(1),icntl(2),icntl(3),icntl(4)
2302 IF (id%SYM.EQ.2)
THEN
2303 WRITE (lp,991) icntl(5),icntl(6),icntl(7),icntl(12),
2306 & icntl(18),icntl(19),icntl(22),icntl(58)
2308 WRITE (lp,891) icntl(5),icntl(6),icntl(7),
2311 & icntl(18),icntl(19),icntl(22),icntl(58)
2313 WRITE (lp,992) icntl(8)
2314 WRITE (lp,993) icntl(14)
2316 & icntl(9),icntl(10),icntl(11),icntl(20),icntl(21)
2317 WRITE (lp,923) icntl(24), icntl(31), icntl(32), icntl(33),
2318 & icntl(35), icntl(36)
2321 WRITE (lp,981) cntl(1), cntl(3), cntl(4), cntl(5), cntl(7)
2322 WRITE (lp,990) icntl(1),icntl(2),icntl(3),icntl(4)
2323 IF (id%SYM.EQ.2)
THEN
2324 WRITE (lp,991) icntl(5),icntl(6),icntl(7),icntl(12),
2327 & icntl(18),icntl(19),icntl(22),icntl(58)
2329 WRITE (lp,891) icntl(5),icntl(6),icntl(7),
2332 & icntl(18),icntl(19),icntl(22),icntl(58)
2334 IF (id%ICNTL(19).NE.0)
2335 &
WRITE(lp,998) id%SIZE_SCHUR
2336 WRITE (lp,992) icntl(8)
2338 & icntl(9),icntl(10),icntl(11),icntl(20),icntl(21)
2339 WRITE (lp,993) icntl(14)
2340 WRITE (lp,923) icntl(24), icntl(31), icntl(32), icntl(33),
2341 & icntl(35), icntl(36)
2344 980
FORMAT (/
'***********CONTROL PARAMETERS (ICNTL)**************'/)
2346 &
' CNTL(1) Threshold for numerical pivoting =',d16.4/
2347 &
' CNTL(3) Null pivot detection threshold =',d16.4/
2348 &
' CNTL(4) Threshold for static pivoting =',d16.4/
2349 &
' CNTL(5) Fixation for null pivots =',d16.4/
2350 &
' CNTL(7) Dropping threshold for BLR compression =',d16.4)
2352 &
'ICNTL(1) Output stream for error messages =',i10/
2353 &
'ICNTL(2) Output stream for diagnostic messages =',i10/
2354 &
'ICNTL(3) Output stream for global information =',i10/
2355 &
'ICNTL(4) Level of printing =',i10)
2357 &
'ICNTL(5) Matrix format ( keep(55) ) =',i10/
2358 &
'ICNTL(6) Maximum transversal ( keep(23) ) =',i10/
2359 &
'ICNTL(7) Ordering =',i10/
2360 &
'ICNTL(12) LDLT ordering strat ( keep(95) ) ='
2361 &
'ICNTL(13) Parallel root (0=on, 1=off) =',i10/
2362 &
'ICNTL(15) Analysis by block =',i10/
2363 &
'ICNTL(18) Distributed matrix ( keep(54) ) =',i10/
2364 &
'ICNTL(19) Schur option ( keep(60) 0=off,else=on ) =',i10/
2365 &
'ICNTL(22) Out-of-core option (0=off, >0=on) =',i10/
2366 &
'ICNTL(58) Symbolic factorization option =',i10)
2368 &
'ICNTL(5) Matrix format ( keep(55) ) =',i10/
2369 &
'ICNTL(6) Maximum transversal ( keep(23) ) =',i10/
2370 &
'ICNTL(7) Ordering =',i10/
2371 &
'ICNTL(13) Parallel root (0=on, 1=off) =',i10/
2372 &
'ICNTL(15) Analysis by block =',i10/
2373 &
'ICNTL(18) Distributed matrix ( keep(54) ) =',i10/
2374 &
'ICNTL(19) Schur option ( keep(60) 0=off,else=on ) =',i10/
2375 &
'ICNTL(22) Out-of-core option (0=off, >0=on) =',i10/
2376 &
'ICNTL(58) Symbolic factorization option =',i10)
2378 &
'ICNTL(8) Scaling strategy =',i10)
2380 &
'ICNTL(24) Null pivot detection (0=off) =',i10/
2381 &
'ICNTL(31) Discard factors (0=off, else=on) =',i10/
2382 &
'ICNTL(32) Forward elimination during facto (0=off)=',i10/
2383 &
'ICNTL(33) Compute determinant (0=off) =',i10/
2384 &
'ICNTL(35) Block Low Rank (BLR, 0=off >0=on) =',i10/
2385 &
'ICNTL(36) BLR variant =',i10)
2387 &
'ICNTL(14) Percent of memory increase =',i10)
2389 &
'ICNTL(9) Solve A x=b (1) or A''x = b (else) =',i10/
2390 &
'ICNTL(10) Max steps iterative refinement =',i10/
2391 &
'ICNTL(11) Error analysis (1=all,2=some,else=off) =',i10/
2392 &
'ICNTL(20) Den.(0)/sparse(1,2,3)/dist.(10,11) RHS =',i10/
2393 &
'ICNTL(21) Gathered (0) or distributed(1) solution =',i10)
2395 &
' Size of SCHUR matrix (SIZE_SCHUR) =',i10)
2404 TYPE (CMUMPS_STRUC),
TARGET,
INTENT(IN) :: id
2407 INTEGER,
POINTER :: JOB
2408 INTEGER,
DIMENSION(:),
POINTER::ICNTL, KEEP
2410 parameter( master = 0 )
2415 IF (id%MYID.EQ.master)
THEN
2419 WRITE (lp,990) icntl(1),icntl(2),icntl(3),icntl(4)
2420 WRITE (lp,991) keep(55),keep(23),icntl(7),keep(95),
2421 & icntl(13),keep(54),keep(60),icntl(22)
2422 IF ((keep(23).EQ.5).OR.(keep(23).EQ.6))
THEN
2423 WRITE (lp,992) keep(52)
2425 WRITE (lp,993) keep(12)
2428 WRITE (lp,990) icntl(1),icntl(2),icntl(3),icntl(4)
2429 IF (keep(23).EQ.0)
THEN
2430 WRITE (lp,992) keep(52)
2432 WRITE (lp,993) keep(12)
2435 WRITE (lp,990) icntl(1),icntl(2),icntl(3),icntl(4)
2437 & icntl(9),icntl(10),icntl(11),icntl(20),icntl(21)
2440 WRITE (lp,990) icntl(1),icntl(2),icntl(3),icntl(4)
2441 IF (keep(23).NE.0)
THEN
2442 WRITE (lp,992) keep(52)
2444 WRITE (lp,991) keep(55),keep(23),icntl(7),keep(95),
2445 & icntl(13),keep(54),keep(60),icntl(22)
2447 & icntl(9),icntl(10),icntl(11),icntl(20),icntl(21)
2448 WRITE (lp,993) keep(12)
2451 WRITE (lp,990) icntl(1),icntl(2),icntl(3),icntl(4)
2452 WRITE (lp,991) keep(55),keep(23),icntl(7),keep(95),
2453 & icntl(13),keep(54),keep(60),icntl(22)
2454 IF ((keep(23).EQ.5).OR.(keep(23).EQ.6)
2455 & .OR. (keep(23).EQ.7))
THEN
2456 WRITE (lp,992) keep(52)
2458 IF (keep(23).EQ.0)
THEN
2459 WRITE (lp,992) keep(52)
2461 WRITE (lp,993) keep(12)
2464 WRITE (lp,990) icntl(1),icntl(2),icntl(3),icntl(4)
2465 WRITE (lp,991) keep(55),keep(23),icntl(7),keep(95
2466 & icntl(13),keep(54),keep(60),icntl(22)
2467 IF ((keep(23).EQ.5).OR.(keep(23).EQ.6)
2468 & .OR. (keep(23).EQ.7))
THEN
2469 WRITE (lp,992) keep(52)
2471 IF (keep(23).EQ.0)
THEN
2472 WRITE (lp,992) keep(52)
2475 & icntl(9),icntl(10),icntl(11),keep(248),icntl(21)
2476 WRITE (lp,993) keep(12)
2479 980
FORMAT (/
'******INTERNAL VALUE OF PARAMETERS (ICNTL/KEEP)****'/)
2481 &
'ICNTL(1) Output stream for error messages =',i10/
2482 &
'ICNTL(2) Output stream for diagnostic messages =',i10/
2483 &
'ICNTL(3) Output stream for global information =',i10/
2484 &
'ICNTL(4) Level of printing =',i10)
2486 &
'ICNTL(5) Matrix format ( keep(55) ) =',i10/
2487 &
'ICNTL(6) Maximum transversal ( keep(23) ) =',i10/
2488 &
'ICNTL(7) Ordering =',i10/
2489 &
'ICNTL(12) LDLT ordering strat ( keep(95) ) =',i10/
2490 &
'ICNTL(13) Parallel root (0=on, 1=off) =',i10/
2491 &
'ICNTL(18) Distributed matrix ( keep(54) ) =',i10/
2492 & 'icntl(19) schur option( keep(60) 0=off,else=on ) =
',I10/
2493 & 'icntl(22) out-of-core option(0=off, >0=on) =
',I10)
2495 & 'icntl(8) scaling strategy( keep(52) ) =
',I10)
2497 & 'icntl(14) percent of memory increase( keep(12) ) =
',I10)
2499 & 'icntl(9) solve a x=b(1) or a
''x = b(else) =
',I10/
2500 & 'icntl(10)
max steps iterative refinement =
',I10/
2501 & 'icntl(11) error analysis( 0= off, else=on) =
',I10/
2502 & 'icntl(20) den.(0)/sparse(1,2,3)/dist.(10,11) rhs =
',I10/
2503 & 'icntl(21) gathered(0) or distributed(1) solution =
',I10)