357 &(idrhs, idinfo, idn, idnrhs, idlrhs)
358 REAL,
DIMENSION(:),
POINTER :: idRHS
359 INTEGER,
intent(in) :: idN, idNRHS, idLRHS
360 INTEGER,
intent(inout) :: idINFO(:)
364 TYPE (SMUMPS_STRUC),
TARGET :: id
368 TYPE (SMUMPS_STRUC),
TARGET :: id
372 TYPE (SMUMPS_STRUC),
TARGET :: id
376 TYPE (SMUMPS_STRUC),
TARGET,
INTENT(IN) :: id
384 parameter( master = 0 )
390 TYPE (SMUMPS_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
590 LOGICAL UNS_PERM_DONE,I_AM_SLAVE
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) :: FILE_SIZE,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 SMUMPS 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 SMUMPS ',
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 SMUMPS ',
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 SMUMPS ',
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 SMUMPS ',
850 & trim(adjustl(id%VERSION_NUMBER)),
851 & trim(from_c_interface_string),
852 &
' driver with JOB, N, NELT =', job,id%N,id%NELT
856!$
WRITE(mpg,
'(A,I6,A,I6)')
' executing #MPI = ',
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
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)
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 )
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
THEN
1281 ELSE IF ( .not.
associated( id%JCN ) )
THEN
1284#if defined(MUMPS_F2003)
1285 ELSE IF (
size( id%JCN, kind=8 ) < id%KEEP8
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.
1516 & id%SIZE_SCHUR * id%SIZE_SCHUR )
THEN
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 IF ( id%KEEP(50) .NE. 0 )
THEN
1683 IF ( id%KEEP(52).ne. 1 .and.
1684 & id%KEEP(52).ne. -1 .and.
1685 & id%KEEP(52).ne. 0 .and.
1686 & id%KEEP(52).ne. 7 .and.
1687 & id%KEEP(52).ne. 8 .and.
1688 & id%KEEP(52).ne. -2 .and.
1689 & id%KEEP(52).ne. 77)
THEN
1690 IF ( mpg .GT. 0 )
THEN
1692 &
' ** Warning: scaling option n.a. for symmetric matrix'
1701 IF (id%KEEP(55) .NE. 0 .AND.
1702 & ( id%KEEP(52) .gt. 0 ) )
THEN
1704 IF ( mpg .GT. 0 )
THEN
1705 WRITE(mpg,
'(A)')
' ** Warning: scaling not applied.'
1707 &
' ** (only user scaling av. for elt. entry)'
1713 IF ( id%KEEP(52) .eq. -1 )
THEN
1714 IF ( .not.
associated( id%ROWSCA ) )
THEN
1717 ELSE IF (
size( id%ROWSCA ) < id%N )
THEN
1720 ELSE IF ( .not.
associated( id%COLSCA ) )
THEN
1723 ELSE IF (
size( id%COLSCA ) < id%N )
THEN
1740 IF (id%KEEP(52).GT.0 .AND.
1741 & id%KEEP(52) .LE.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 IF (ierr .GT.0)
THEN
1751 ALLOCATE( id%ROWSCA(id%N), stat=ierr)
1752 IF (ierr .GT.0)
THEN
1762 IF (.NOT.
associated(id%COLSCA))
THEN
1763 ALLOCATE( id%COLSCA(1), stat=ierr)
1765 IF (ierr .GT.0)
THEN
1769 IF (.NOT.
associated(id%ROWSCA))
1770 &
ALLOCATE( id%ROWSCA(1), stat=ierr)
1771 IF (ierr .GT.0)
THEN
1774 IF ( lpok )
WRITE(lp,
'(A)')
1775 &
'Problems in allocations before facto'
1778 IF (id%KEEP(252) .EQ. 1)
THEN
1780 & (id%RHS,id%INFO,id%N,id%NRHS,id%LRHS)
1792 i_am_slave = ( id%MYID .ne. master .OR.
1793 & ( id%MYID .eq. master .AND.
1794 & id%KEEP(46) .eq. 1 ) )
1795 IF (i_am_slave .AND.
1796 & id%KEEP(54).NE.0 .AND. id%KEEP8(29).GT.0_8)
THEN
1797 IF ( .not.
associated( id%IRN_loc ) )
THEN
1800#if defined(MUMPS_F2003)
1801 ELSE IF (
size( id%IRN_loc, kind=8 ) < id%KEEP8(29) )
THEN
1807 ELSE IF ( id%KEEP8(29) .LE. int(huge(id%NZ_loc),8) .AND.
1808 &
size(id%IRN_loc) < int(id%KEEP8(29)) )
THEN
1812 ELSE IF ( .not.
associated( id%JCN_loc ) )
THEN
1815#if defined(MUMPS_F2003)
1816 ELSE IF (
size( id%JCN_loc, kind=8 ) < id%KEEP8(29) )
THEN
1819 ELSE IF ( id%KEEP8(29) .LE. int(huge(id%NZ_loc),8) .AND.
1820 &
size(id%JCN_loc) < int(id%KEEP8(29)) )
THEN
1824 ELSEIF ( .not.
associated( id%A_loc ) )
THEN
1827#if defined(MUMPS_F2003)
1828 ELSE IF (
size( id%A_loc, kind=8 ) < id%KEEP8(29) )
THEN
1831 ELSE IF ( id%KEEP8(29) .LE. int(huge(id%NZ_loc),8) .AND.
1832 &
size( id%A_loc ) < int(id%KEEP8(29)) )
THEN
1842 IF (id%KEEP(60).EQ.2.OR.id%KEEP(60).EQ.3)
THEN
1843 IF ( id%root%yes )
THEN
1844 IF (
associated( id%SCHUR_CINTERFACE ))
THEN
1854 & int(id%SCHUR_LLD,8)*int(id%root%SCHUR_NLOC-1,8)+
1855 & int(id%root%SCHUR_MLOC,8))
1857 NULLIFY(id%SCHUR_CINTERFACE)
1860 IF (id%SCHUR_LLD < id%root%SCHUR_MLOC)
THEN
1861 IF (lp.GT.0)
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 ELSE IF ( .NOT.
associated (id%SCHUR))
THEN
1868 IF (lp.GT.0)
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
2127 id%KEEP8(55)=file_size
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)
2142!$
CALL omp_set_num_threads(previous_omp_threads_num)
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 SMUMPS, INFOG(1)=',
2153 WRITE(mpg,
'(A,I16)')
' On return from SMUMPS, INFOG(2)=',
216399995
FORMAT (
' ** ERROR RETURN ** FROM SMUMPS INFO(1)=', i5)
216499994
FORMAT (
' ** INFO(2)=', i16)
216599993
FORMAT (
' ** Allocation error: could not permute JCN.')
2404 TYPE (SMUMPS_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
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)