26#if ! defined(NO_FDM_DESCBAND)
29#if ! defined(NO_FDM_MAPROW)
48 TYPE (SMUMPS_STRUC),
TARGET :: id
49 REAL,
INTENT(OUT) :: ANORMINF
50 LOGICAL,
INTENT(IN) :: LSCAL
51 INTEGER,
INTENT(IN) :: EFF_SIZE_SCHUR
54 & id_BLRARRAY_ENCODING, KEEP8, K34)
55# if defined(MUMPS_F2003)
56 CHARACTER,
DIMENSION(:),
POINTER,
intent(inout) ::
57 & id_blrarray_encoding
58 CHARACTER,
DIMENSION(:),
POINTER,
intent(inout) ::
61 CHARACTER,
DIMENSION(:),
POINTER :: id_BLRARRAY_ENCODING
62 CHARACTER,
DIMENSION(:),
POINTER :: id_FDM_F_ENCODING
64 INTEGER(8),
intent(inout) :: KEEP8(150)
65 INTEGER,
intent(in) ::
72 TYPE(smumps_struc),
TARGET :: id
78 include
'mumps_tags.h'
79 INTEGER :: STATUS(MPI_STATUS_SIZE)
81 INTEGER,
PARAMETER :: MASTER = 0
86 include
'mumps_headers.h'
87 INTEGER(8) :: NSEND8, NSEND_TOT8
88 INTEGER(8) :: NLOCAL8, NLOCAL_TOT8
90 INTEGER :: LDPTRAR, NELT_arg, NBRECORDS
92 INTEGER :: KEEP464COPY, KEEP465COPY
94 INTEGER(8) :: KEEP826_SAVE
95 INTEGER(8) :: K67, K68, K70, K74, K75
97 INTEGER MUMPS_PROCNODE
98 EXTERNAL mumps_procnode
99 INTEGER MP, LP, MPG, allocok
100 LOGICAL PROK, PROKG, LSCAL, LPOK, COMPUTE_ANORMINF
102 INTEGER :: SMUMPS_LBUFR, SMUMPS_LBUFR_BYTES
103 INTEGER(8) :: SMUMPS_LBUFR_BYTES8
104 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: BUFR
106 INTEGER :: SMUMPS_LBUF, SMUMPS_LBUF_INT
107 INTEGER(8) :: SMUMPS_LBUF8
109 INTEGER PTRIST, PTRWB, MAXELT_SIZE,
110 & itloc, ipool, k28, lpool
111 INTEGER IRANK, ID_ROOT
113 INTEGER(8) :: NZ_locMAX8
114 INTEGER(8) MEMORY_MD_ARG
115 INTEGER(8) MAXS_BASE8, MAXS_BASE_RELAXED8
116 REAL CNTL4, AVG_FLOPS
117 INTEGER MIN_PERLU, MAXIS_ESTIM
118 INTEGER SUM_INFO22_THIS_NODE, MAX_SUM_INFO22_THIS_NODE
120 TYPE (S_IS_POINTERS_T) :: S_IS_POINTERS
125 REAL,
TARGET :: S_DUMMY_ARG(1)
126 REAL,
POINTER,
DIMENSION(:) :: S_PTR_ARG
128DOUBLE PRECISION TIMEAVG, TIMEMAX,
130 REAL TMPTIME, TMPFLOP
131 INTEGER NPIV_CRITICAL_PATH, EFF_SIZE_SCHUR
132 DOUBLE PRECISION TIME, TIMEET
134 parameter( zero = 0.0e0, one = 1.0e0, mone = -1.0e0)
136 parameter( czero = 0.0e0 )
137 INTEGER PERLU, TOTAL_MBYTES, K231, K232, K233, BLR_STRAT
138 INTEGER,
PARAMETER :: IDUMMY = -9999
139 LOGICAL,
PARAMETER :: BDUMMY =.false.
140 INTEGER,
PARAMETER :: PANEL_TABSIZE = 20
141 INTEGER COLOUR, COMM_FOR_SCALING
142 INTEGER LIWK, LWK_REAL
146 LOGICAL I_AM_SLAVE, PERLU_ON, WK_USER_PROVIDED, EARLYT3ROOTINS
147 LOGICAL PRINT_MAXAVG, PRINT_NODEINFO
148 REAL :: ANORMINF, SEUIL, SEUIL_LDLT_NIV2, Thresh_Seuil
149 REAL :: CNTL1, CNTL3, CNTL5, CNTL6, EPS
150 INTEGER N, LPN_LIST,POSBUF
151 INTEGER,
DIMENSION (:),
ALLOCATABLE :: ITMP2
157 DOUBLE PRECISION :: TMP_MRY_LU_FR
158 DOUBLE PRECISION :: TMP_MRY_LU_LRGAIN
159 DOUBLE PRECISION :: TMP_MRY_CB_FR
160 DOUBLE PRECISION :: TMP_MRY_CB_LRGAIN
161 DOUBLE PRECISION :: TMP_FLOP_LRGAIN
162 DOUBLE PRECISION :: TMP_FLOP_TRSM
163 DOUBLE PRECISION :: TMP_FLOP_PANEL
164 DOUBLE PRECISION :: TMP_FLOP_FRFRONTS
165 DOUBLE PRECISION :: TMP_FLOP_TRSM_FR
166 DOUBLE PRECISION :: TMP_FLOP_TRSM_LR
167 DOUBLE PRECISION :: TMP_FLOP_UPDATE_FR
168 DOUBLE PRECISION :: TMP_FLOP_UPDATE_LR
169 DOUBLE PRECISION :: TMP_FLOP_UPDATE_LRLR3
170 DOUBLE PRECISION :: TMP_FLOP_COMPRESS
171 DOUBLE PRECISION :: TMP_FLOP_DECOMPRESS
172 DOUBLE PRECISION :: TMP_FLOP_MIDBLK_COMPRESS
173 DOUBLE PRECISION :: TMP_FLOP_FRSWAP_COMPRESS
174 DOUBLE PRECISION :: TMP_FLOP_ACCUM_COMPRESS
175 DOUBLE PRECISION :: TMP_FLOP_CB_COMPRESS
176 DOUBLE PRECISION :: TMP_FLOP_CB_DECOMPRESS
177 DOUBLE PRECISION :: TMP_FLOP_FACTO_FR
178 INTEGER :: TMP_CNT_NODES
179 DOUBLE PRECISION :: TMP_TIME_UPDATE
180 DOUBLE PRECISION :: TMP_TIME_UPDATE_LRLR1
181 DOUBLE PRECISION :: TMP_TIME_UPDATE_LRLR2
183 DOUBLE PRECISION :: TMP_TIME_UPDATE_FRLR
184 DOUBLE PRECISION :: TMP_TIME_UPDATE_FRFR
185 DOUBLE PRECISION :: TMP_TIME_COMPRESS
186 DOUBLE PRECISION :: TMP_TIME_MIDBLK_COMPRESS
187 DOUBLE PRECISION :: TMP_TIME_FRSWAP_COMPRESS
188 DOUBLE PRECISION :: TMP_TIME_CB_COMPRESS
189 DOUBLE PRECISION :: TMP_TIME_PANEL
190 DOUBLE PRECISION :: TMP_TIME_FAC_I
191 DOUBLE PRECISION :: TMP_TIME_FAC_MQ
192 DOUBLE PRECISION :: TMP_TIME_FAC_SQ
193 DOUBLE PRECISION :: TMP_TIME_LRTRSM
194 DOUBLE PRECISION :: TMP_TIME_FRTRSM
195 DOUBLE PRECISION :: TMP_TIME_FRFRONTS
196 DOUBLE PRECISION :: TMP_TIME_LR_MODULE
197 DOUBLE PRECISION :: TMP_TIME_DIAGCOPY
198 DOUBLE PRECISION :: TMP_TIME_DECOMP
199 DOUBLE PRECISION :: TMP_TIME_DECOMP_UCFS
200 DOUBLE PRECISION :: TMP_TIME_DECOMP_ASM1
201 DOUBLE PRECISION :: TMP_TIME_DECOMP_LOCASM2
202 DOUBLE PRECISION :: TMP_TIME_DECOMP_MAPLIG1
203 DOUBLE PRECISION :: TMP_TIME_DECOMP_ASMS2S
204 DOUBLE PRECISION :: TMP_TIME_DECOMP_ASMS2M
208 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IWK
209 REAL,
DIMENSION(:)ALLOCATABLE
210 REAL,
DIMENSION(:),
ALLOCATABLE :: WK_REAL
211 INTEGER(8),
DIMENSION(:),
ALLOCATABLE :: IWK8
212 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BURP
213 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BUCP
214 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BURS
215 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BUCS
216 INTEGER BUREGISTRE(12)
217 INTEGER BUINTSZ, BURESZ, BUJOB
218 INTEGER BUMAXMN, M, SCMYID, SCNPROCS
219 REAL SCONEERR, SCINFERR
224 INTEGER,
POINTER :: JOB
226 REAL,
DIMENSION(:),
POINTER::RINFO, RINFOG
227 REAL,
DIMENSION(:),
POINTER:: CNTL
228 INTEGER,
DIMENSION(:),
POINTER:: INFOG, KEEP
229 INTEGER,
DIMENSION(:),
POINTER :: MYIRN_loc, MYJCN_loc
230 REAL,
DIMENSION(:),
POINTER :: MYA_loc
231 INTEGER,
TARGET :: DUMMYIRN_loc(1), DUMMYJCN_loc(1)
232 REAL,
TARGET :: DUMMYA_loc(1)
233 INTEGER,
DIMENSION(:),
POINTER::ICNTL
235 INTEGER MUMPS_GET_POOL_LENGTH
236 INTEGER(8) :: TOTAL_BYTES
237 INTEGER(8) :: I8TMP, LWK_USER_SUM8
244 LOGICAL:: MEM_EFF_ALLOCATED
245 INTEGER :: TOTAL_MBYTES_UNDER_L0
246 INTEGER(8):: TOTAL_BYTES_UNDER_L0
248 REAL,
DIMENSION(:),
POINTER :: RHS_MUMPS
249 LOGICAL :: RHS_MUMPS_ALLOCATED
250 INTEGER :: NB_ACTIVE_FRONTS_ESTIM
251 INTEGER :: NB_FRONTS_F_ESTIM
261 IF (id%KEEP8(29) .NE. 0)
THEN
262 myirn_loc=>id%IRN_loc
263 myjcn_loc=>id%JCN_loc
266 myirn_loc=>dummyirn_loc
267 myjcn_loc=>dummyjcn_loc
271 eps = epsilon( zero )
283 id%DKEEP(19)=huge(0.0e0)
284 id%DKEEP(20)=huge(0.0e0)
291 print_maxavg = .NOT.(id%NSLAVES.EQ.1 .AND. keep(46).EQ.1)
294 print_nodeinfo = print_maxavg .AND. id%NPROCS .NE. id%KEEP(412)
299 IF (id%KEEP8(24).EQ.0_8)
THEN
301 IF (
associated(id%S))
THEN
307 IF (
associated(id%IS))
THEN
313 & id%BLRARRAY_ENCODING, id%KEEP8(1), id%KEEP(34))
314 IF (
associated(id%root%RG2L_ROW))
THEN
315 DEALLOCATE(id%root%RG2L_ROW)
316 NULLIFY(id%root%RG2L_ROW)
318 IF (
associated(id%root%RG2L_COL))
THEN
319 DEALLOCATE(id%root%RG2L_COL)
320 NULLIFY(id%root%RG2L_COL)
322 IF (
associated( id%PTLUST_S ))
THEN
323 DEALLOCATE(id%PTLUST_S)
326 IF (
associated(id%PTRFAC))
THEN
327 DEALLOCATE(id%PTRFAC)
330 IF (
associated(id%RHSCOMP))
THEN
331 DEALLOCATE(id%RHSCOMP)
335 IF (
associated(id%POSINRHSCOMP_ROW))
THEN
336 DEALLOCATE(id%POSINRHSCOMP_ROW)
337 NULLIFY(id%POSINRHSCOMP_ROW)
339 IF (id%POSINRHSCOMP_COL_ALLOC)
THEN
340 DEALLOCATE(id%POSINRHSCOMP_COL)
341 NULLIFY(id%POSINRHSCOMP_COL)
342 id%POSINRHSCOMP_COL_ALLOC = .false.
349 rhs_mumps_allocated = .false.
355 IF (id%KEEP8(24).GT.0_8)
THEN
362 wk_user_provided = (id%LWK_USER.NE.0)
363 IF (wk_user_provided)
THEN
364 IF (id%LWK_USER.GT.0)
THEN
365 id%KEEP8(24) = int(id%LWK_USER,8)
367 id%KEEP8(24) = -int(id%LWK_USER,8)* 1000000_8
374 CALL mpi_reduce ( id%KEEP8(24), lwk_user_sum8, 1, mpi_integer8,
375 & mpi_sum, master, id%COMM, ierr )
383 keep826_save = id%KEEP8(26)
392 IF (
associated(id%IPTR_WORKING))
THEN
393 DEALLOCATE(id%IPTR_WORKING)
394 NULLIFY(id%IPTR_WORKING)
396 IF (
associated(id%WORKING))
THEN
397 DEALLOCATE(id%WORKING)
408 lpok = ((lp.GT.0).AND.(id%ICNTL(4).GE.1))
409 prok = ((mp.GT.0).AND.(id%ICNTL(4).GE.2))
410 prokg = ( mpg .GT. 0 .and. id%MYID .eq. master )
411 prokg = (prokg.AND.(id%ICNTL(4).GE.2))
412 IF ( prok )
WRITE( mp, 130 )
413 IF ( prokg )
WRITE( mpg, 130 )
419 i_am_slave = ( id%MYID .ne. master .OR.
420 & ( id%MYID .eq. master .AND.
421 & keep(46) .eq. 1 ) )
425 IF (id%MYID .EQ. master .AND. keep(201) .NE. -1)
THEN
433 keep(201)=id%ICNTL(22)
434 IF (keep(201) .NE. 0)
THEN
435# if defined(OLD_OOC_NOPANEL)
446 CALL mpi_bcast( keep(12), 1, mpi_integer,
447 & master, id%COMM, ierr )
448 CALL mpi_bcast( keep(19), 1, mpi_integer,
449 & master, id%COMM, ierr )
450 CALL mpi_bcast( keep(21), 1, mpi_integer,
451 & master, id%COMM, ierr )
452 CALL mpi_bcast( keep(201), 1, mpi_integer,
453 & master, id%COMM, ierr )
454 CALL mpi_bcast( keep(459), 1, mpi_integer,
455 & master, id%COMM, ierr )
456 CALL mpi_bcast( keep(460), 1, mpi_integer,
457 & master, id%COMM, ierr )
458 IF ( keep(459) .GE. panel_tabsize )
THEN
460 WRITE(lp,
'(A,I4,A,I3)')
" ** WARNING ** KEEP(459)=",keep(459),
461 &
" too large, resetting to",panel_tabsize-1
463 keep(459) = panel_tabsize - 1
466 IF (id%MYID.EQ.master)
THEN
482 IF ( keep(50) .eq. 1 )
THEN
483 IF (cntl1 .ne. zero )
THEN
486 &
'** Warning : SPD solver called, resetting CNTL(1) to 0.0E0'
493 IF (cntl1.GT.one) cntl1=one
494 IF (cntl1.LT.zero) cntl1=zero
495 IF (keep(50).NE.0.AND.cntl1.GT.0.5e0)
THEN
498 parpiv_t1 = id%KEEP(268)
499 IF (parpiv_t1.EQ.77)
THEN
505 IF (parpiv_t1.EQ.-3)
THEN
508 IF ((parpiv_t1.LT.-3).OR.(parpiv_t1.GT.1))
THEN
513 IF (cntl1.EQ.0.0.OR.(keep(50).eq.1)) parpiv_t1 = 0
515 IF (parpiv_t1.EQ.-2)
THEN
516 IF (keep(19).NE.0)
THEN
522 id%KEEP(269) = parpiv_t1
525 & master, id%COMM, ierr)
526 CALL mpi_bcast( keep(269), 1, mpi_integer,
527 & master, id%COMM, ierr )
528 IF (id%MYID.EQ.master)
THEN
537 id%KEEP(486) = id%ICNTL(35)
538 IF (id%KEEP(486).EQ.1)
THEN
542 IF ( id%KEEP(486).EQ.4) id%KEEP(486)=0
543 IF ((id%KEEP(486).LT.0).OR.(id%KEEP(486).GT.4))
THEN
547 IF ((keep(486).NE.0).AND.(keep(494).EQ.0))
THEN
552 &
" *** Error with BLR setting "
553 WRITE(lp,
'(A)')
" *** BLR was not activated during ",
554 &
" analysis but is requested during factorization."
560 keep464copy = id%ICNTL(38)
561 IF (keep464copy.LT.0.OR.keep464copy.GT.1000)
THEN
565 IF (id%KEEP(461).LT.1)
THEN
569 IF (id%ICNTL(36).EQ.1.OR.id%ICNTL(36).EQ.3)
THEN
570 IF (cntl1.EQ.zero .OR. keep(468).LE.1)
THEN
572 ELSE IF ( (keep(269).GT.0).OR. (keep(269).EQ.-2))
THEN
574 ELSE IF (keep(468).EQ.2)
THEN
583 IF (id%ICNTL(36).LT.0 .OR. id%ICNTL(36).GE.2)
THEN
588 IF (id%ICNTL(37).EQ.0.OR.id%ICNTL(37).EQ.1)
THEN
589 keep(489) = id%ICNTL(37)
594 IF (keep(79).GE.1)
THEN
600 IF ((id%KEEP(476).GT.100).OR.(id%KEEP(476).LT.1))
THEN
604 IF ((id%KEEP(477).GT.100).OR.(id%KEEP(477).LT.1))
THEN
608 IF ((id%KEEP(483).GT.100).OR.(id%KEEP(483).LT.1))
THEN
612 IF ((id%KEEP(484).GT.100).OR.(id%KEEP(484).LT.1))
THEN
616 IF ((id%KEEP(480).GT.6).OR.(id%KEEP(480).LT.0)
617 & .OR.(id%KEEP(480).EQ.1))
THEN
621 IF ((id%KEEP(473).NE.0).AND.(id%KEEP(473).NE.1))
THEN
625 IF ((id%KEEP(474).GT.3).OR.(id%KEEP(474).LT.0))
THEN
629 IF (id%KEEP(479).LE.0)
THEN
632 IF (id%KEEP(474).NE.0.AND.id%KEEP(480).EQ.0)
THEN
635 IF (id%KEEP(478).NE.0.AND.id%KEEP(480).LT.4)
THEN
638 IF (id%KEEP(480).GE.5 .OR.
639 & (id%KEEP(480).NE.0.AND.id%KEEP(474).EQ.3))
THEN
640 IF (id%KEEP(475).LT.2)
THEN
642 id%KEEP(480) = id%KEEP(480) - 2
643 write(*,*)
' Resetting KEEP(480) to ', id%KEEP(480)
651 IF (id%INFO(1).LT.0)
GOTO 530
652 CALL mpi_bcast( keep(473), 14, mpi_integer,
653 & master, id%COMM, ierr )
654 IF (keep(486).NE.0)
THEN
655 CALL mpi_bcast( keep(489), 1, mpi_integer,
656 & master, id%COMM, ierr )
657 CALL mpi_bcast( keep464copy, 1, mpi_integer,
658 & master, id%COMM, ierr )
659 CALL mpi_bcast( keep465copy, 1, mpi_integer,
660 & master, id%COMM, ierr )
662 IF (id%MYID.EQ.master)
THEN
663 IF (keep(217).GT.2.OR.keep(217).LT.0)
THEN
667 IF (keep(214).EQ.0)
THEN
668 IF (keep(201).NE.0)
THEN
673 IF (keep(486).EQ.2)
THEN
678 CALL mpi_bcast( keep(214), 1, mpi_integer,
679 & master, id%COMM, ierr )
680 IF (keep(201).NE.0)
THEN
682 CALL mpi_bcast( keep(99), 1, mpi_integer,
683 & master, id%COMM, ierr )
684 CALL mpi_bcast( keep(205), 1, mpi_integer,
685 & master, id%COMM, ierr )
686 CALL mpi_bcast( keep(211), 1, mpi_integer,
687 & master, id%COMM, ierr )
691 IF (id%KEEP(252).EQ.1 .AND. id%MYID.EQ.master)
THEN
692 IF (id%ICNTL(20).EQ.1)
THEN
698 IF (lpok)
WRITE(lp,
'(A)')
699 &
' ERROR: Sparse RHS is incompatible with forward',
700 &
' performed during factorization (ICNTL(32)=1)'
701 ELSE IF (id%ICNTL(30).NE.0)
THEN
704 IF (lpok)
WRITE(lp,
'(A)')
705 &
' ERROR: A-1 functionality incompatible with forward',
706 &
' performed during factorization (ICNTL(32)=1)'
707 ELSE IF (id%ICNTL(9) .NE. 1)
THEN
710 IF (lpok)
WRITE(lp,
'(A)')
711 & ' error: transpose system(icntl
',
712 & ' compatible with forward performed during
',
713 & ' factorization(icntl(32)=1)
'
716 CALL MUMPS_PROPINFO( id%ICNTL(1), id%INFO(1),
719.LT.
IF (id%INFO(1)0) GOTO 530
725.GT.
IF ( ICNTL(23) 0 ) THEN
730 CALL MPI_ALLREDUCE( ITMP, JTMP, 1, MPI_INTEGER,
731 & MPI_SUM, id%COMM, IERR)
732.EQ.
IF ( id%MYIDMASTER ) THEN
734 ITMP = max(ICNTL(23),0)
736 CALL MPI_BCAST( ITMP, 1, MPI_INTEGER,
737 & MASTER, id%COMM, IERR )
740.GT..AND..EQ.
IF ( ITMP 0 JTMP 1 ) THEN
749 id%KEEP8(4) = ITMP8 * 1000000_8 ! convert to nb of bytes
751 CALL MPI_REDUCE( id%KEEP8(4), ITMP8, 1, MPI_INTEGER8,
752 & MPI_SUM, MASTER, id%COMM, IERR )
753 ITMP8 = ITMP8 / 1000000_8 ! Use to print \sum_{ICNTL(23)}
755 NWORKING = id%NSLAVES
756 WRITE( MPG, 172 ) NWORKING, id%ICNTL(22), KEEP(486),
758 & id%KEEP8(111), KEEP(126), KEEP(127), KEEP(28),
759 & id%KEEP8(4)/1000000_8, ITMP8, LWK_USER_SUM8, CNTL1
761 & WRITE(MPG,173) KEEP(253)
763 & WRITE(MPG,174) KEEP(269)
765.LE.
IF (KEEP(201)0) THEN
768.EQ.
ELSE IF (KEEP(201)2) THEN
770 KEEP(IXSZ)=XSIZE_OOC_NOPANEL
771.EQ.
ELSE IF (KEEP(201)1) THEN
773.EQ.
IF (KEEP(50)0) THEN
774 KEEP(IXSZ)=XSIZE_OOC_UNSYM
776 KEEP(IXSZ)=XSIZE_OOC_SYM
779.NE.
IF ( KEEP(486) 0 ) THEN !LR is activated
781 CALL INIT_STATS_GLOBAL(id)
788.EQ.
IF (id%MYIDMASTER) KEEP(258)=ICNTL(33)
789 CALL MPI_BCAST(KEEP(258), 1, MPI_INTEGER,
790 & MASTER, id%COMM, IERR)
791.NE.
IF (KEEP(258) 0) THEN
792 KEEP(259) = 0 ! Initial exponent of the local determinant
793 KEEP(260) = 1 ! Number of permutations
794 id%DKEEP(6) = 1.0E0 ! real part of the local determinant
814 CALL MPI_BCAST(KEEP(52), 1, MPI_INTEGER,
815 & MASTER, id%COMM, IERR)
816.GT..AND..LE.
LSCAL = ((KEEP(52) 0) (KEEP(52) 8))
819.EQ.
IF ( id%MYIDMASTER ) THEN
820 CALL MUMPS_SECDEB(TIMEET)
826.EQ.
IF (KEEP(52) 7) THEN
831.EQ.
ELSEIF (KEEP(52) 8) THEN
837 CALL MPI_BCAST(id%DKEEP(3),1,MPI_REAL,MASTER,
840.EQ..OR..EQ..AND.
IF ( ((KEEP(52)7)(KEEP(52)8))
841.NE.
& KEEP(54)0 ) THEN
848.NE.
IF ( id%MYID MASTER ) THEN
849 IF ( associated(id%COLSCA))
850 & DEALLOCATE( id%COLSCA )
851 IF ( associated(id%ROWSCA))
852 & DEALLOCATE( id%ROWSCA )
853 ALLOCATE( id%COLSCA(N), stat=IERR)
858 ALLOCATE( id%ROWSCA(N), stat=IERR)
866 IF(N > BUMAXMN) BUMAXMN = N
868 ALLOCATE (IWK(LIWK),BURP(M),BUCP(N),
869 & BURS(2* (id%NPROCS)),BUCS(2* (id%NPROCS)),
871 IF (allocok > 0) THEN
873 id%INFO(2)=LIWK+M+N+4* (id%NPROCS)
876 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
878.LT.
IF (id%INFO(1)0) GOTO 517
883 ALLOCATE(WK_REAL(LWK_REAL),
885 IF (allocok > 0) THEN
890 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
892.LT.
IF (id%INFO(1)0) GOTO 517
893 CALL SMUMPS_SIMSCALEABS(
894 & MYIRN_loc(1), MYJCN_loc(1), MYA_loc(1),
896 & M, N, id%NPROCS, id%MYID, id%COMM,
898 & BURS, BUCS, BUREGISTRE,
900 & BUINTSZ, BURESZ, BUJOB,
901 & id%ROWSCA(1), id%COLSCA(1), WK_REAL, LWK_REAL,
905 & SCONEERR, SCINFERR)
906 IF(LIWK < BUINTSZ) THEN
909 ALLOCATE(IWK(LIWK), stat=allocok)
910 IF (allocok > 0) THEN
917 ALLOCATE (WK_REAL(LWK_REAL), stat=allocok)
918 IF (allocok > 0) THEN
923 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
925.LT.
IF (id%INFO(1)0) GOTO 517
928 CALL SMUMPS_SIMSCALEABS(
929 & MYIRN_loc(1), MYJCN_loc(1), MYA_loc(1),
931 & M, N, id%NPROCS, id%MYID, id%COMM,
933 & BURS, BUCS, BUREGISTRE,
935 & BUINTSZ, BURESZ, BUJOB,
936 & id%ROWSCA(1), id%COLSCA(1), WK_REAL, LWK_REAL,
940 & SCONEERR, SCINFERR)
941 id%DKEEP(4) = SCONEERR
942 id%DKEEP(5) = SCINFERR
944 DEALLOCATE(IWK, WK_REAL,BURP,BUCP,BURS, BUCS)
945.EQ.
ELSE IF ( KEEP(54) 0 ) THEN
949.EQ..OR..EQ.
IF ((KEEP(52)7)(KEEP(52)8)) THEN
953.EQ.
IF (id%MYIDMASTER) THEN
956 COLOUR = MPI_UNDEFINED
958 CALL MPI_COMM_SPLIT( id%COMM, COLOUR, 0,
959 & COMM_FOR_SCALING, IERR )
960.EQ.
IF (id%MYIDMASTER) THEN
963 IF(N > BUMAXMN) BUMAXMN = N
965 ALLOCATE(IWK(LIWK),BURP(1),BUCP(1),
968 IF (allocok > 0) THEN
970 id%INFO(2)=LIWK+1+1+1+1
974 ALLOCATE (WK_REAL(LWK_REAL), stat=allocok)
975 IF (allocok > 0) THEN
980 CALL MPI_COMM_RANK(COMM_FOR_SCALING, SCMYID, IERR)
981 CALL MPI_COMM_SIZE(COMM_FOR_SCALING, SCNPROCS, IERR)
983 CALL SMUMPS_SIMSCALEABS(
984 & id%IRN(1), id%JCN(1), id%A(1),
986 & M, N, SCNPROCS, SCMYID, COMM_FOR_SCALING,
988 & BURS, BUCS, BUREGISTRE,
990 & BUINTSZ, BURESZ, BUJOB,
991 & id%ROWSCA(1), id%COLSCA(1), WK_REAL, LWK_REAL,
995 & SCONEERR, SCINFERR)
996 IF(LWK_REAL < BURESZ) THEN
1001 CALL SMUMPS_SIMSCALEABS(id%IRN(1),
1002 & id%JCN(1), id%A(1),
1004 & M, N, SCNPROCS, SCMYID, COMM_FOR_SCALING,
1006 & BURS, BUCS, BUREGISTRE,
1008 & BUINTSZ, BURESZ, BUJOB,
1009 & id%ROWSCA(1), id%COLSCA(1), WK_REAL, LWK_REAL,
1013 & SCONEERR, SCINFERR)
1014 id%DKEEP(4) = SCONEERR
1015 id%DKEEP(5) = SCINFERR
1017 IF (allocated(WK_REAL)) DEALLOCATE(WK_REAL)
1018 IF (allocated(IWK)) DEALLOCATE(IWK)
1019 IF (allocated(BURP)) DEALLOCATE(BURP)
1020 IF (allocated(BUCP)) DEALLOCATE(BUCP)
1021 IF (allocated(BURS)) DEALLOCATE(BURS)
1022 IF (allocated(BUCS)) DEALLOCATE(BUCS)
1025 CALL MPI_BCAST( id%DKEEP(4),2,MPI_REAL,
1026 & MASTER, id%COMM, IERR )
1027.EQ.
IF (id%MYIDMASTER) THEN
1030 CALL MPI_COMM_FREE(COMM_FOR_SCALING, IERR)
1032 CALL MUMPS_PROPINFO(ICNTL(1), id%INFO(1),
1034.LT.
IF (id%INFO(1)0) GOTO 517
1035.EQ.
ELSE IF (id%MYIDMASTER) THEN
1039.GT..AND..LE.
IF (KEEP(52)0 KEEP(52)6) THEN
1044.eq..or.
IF ( KEEP(52) 5
1045.eq.
& KEEP(52) 6 ) THEN
1055 ALLOCATE( WK_REAL( LWK_REAL ), stat = IERR )
1056.GT.
IF ( IERR 0 ) THEN
1058 id%INFO(2) = LWK_REAL
1061 ALLOCATE( WK( LWK ), stat = IERR )
1062.GT.
IF ( IERR 0 ) THEN
1064 CALL MUMPS_SET_IERROR(LWK, id%INFO(2))
1067 CALL SMUMPS_FAC_A(N, id%KEEP8(28), KEEP(52), id%A(1),
1068 & id%IRN(1), id%JCN(1),
1069 & id%COLSCA(1), id%ROWSCA(1),
1070 & WK, LWK, WK_REAL, LWK_REAL, ICNTL(1), id%INFO(1) )
1071 DEALLOCATE( WK_REAL )
1075 ENDIF ! Scaling distributed matrices or centralized
1076.NE.
IF (KEEP(125)0) THEN
1082.GT..and..GT.
IF ((KEEP(60)0) (KEEP(116)0)) THEN
1084.EQ..OR..EQ..AND.
IF ( ((KEEP(52)7)(KEEP(52)8))
1085.NE.
& KEEP(54)0 ) THEN
1088.GT.
IF (id%SYM_PERM(I)id%N-KEEP(116)) THEN
1093.EQ.
ELSE IF ( id%MYID MASTER) THEN
1096.GT.
IF (id%SYM_PERM(I)id%N-KEEP(116)) THEN
1104.EQ.
IF (id%MYIDMASTER) THEN
1105 CALL MUMPS_SECFIN(TIMEET)
1106 id%DKEEP(92)=real(TIMEET)
1110.AND..EQ..OR..EQ.
IF (PROKG(KEEP(52)7KEEP(52)8)
1111.AND..GT.
& (K233+K231+K232)0) THEN
1112.GT.
IF (K2320) WRITE(MPG, 166) id%DKEEP(4)
1118.OR..EQ..OR..EQ.
LSCAL = (LSCAL (KEEP(52) -1) KEEP(52) -2)
1119.AND..NE..AND..EQ.
IF (LSCAL KEEP(258)0 id%MYID MASTER) THEN
1121 CALL SMUMPS_UPDATEDETER_SCALING(id%ROWSCA(I),
1122 & id%DKEEP(6), ! determinant
1123 & KEEP(259)) ! exponent of the determinant
1125.EQ.
IF (KEEP(50) 0) THEN ! unsymmetric
1127 CALL SMUMPS_UPDATEDETER_SCALING(id%COLSCA(I),
1128 & id%DKEEP(6), ! determinant
1129 & KEEP(259)) ! exponent of the determinant
1138 CALL SMUMPS_DETER_SQUARE(id%DKEEP(6), KEEP(259))
1142 CALL SMUMPS_DETER_SCALING_INVERSE(id%DKEEP(6), KEEP(259))
1164 IF (associated(id%root%RHS_CNTR_MASTER_ROOT)) THEN
1165 DEALLOCATE (id%root%RHS_CNTR_MASTER_ROOT)
1166 NULLIFY (id%root%RHS_CNTR_MASTER_ROOT)
1169.EQ..AND..EQ..AND.
IF ( id%MYIDMASTER KEEP(252)1
1170.NE.
& id%NRHS id%KEEP(253) ) THEN
1174 id%INFO(2)=id%KEEP(253)
1178.EQ.
IF (id%KEEP(252) 1) THEN
1179.NE.
IF ( id%MYIDMASTER ) THEN
1180 id%KEEP(254) = N ! Leading dimension
1181 id%KEEP(255) = N*id%KEEP(253) ! Tot size
1182 ALLOCATE(RHS_MUMPS(id%KEEP(255)),stat=IERR)
1185 id%INFO(2)=id%KEEP(255)
1187 & WRITE(LP,*) 'error
while allocating rhs on a slave
'
1190 RHS_MUMPS_ALLOCATED = .TRUE.
1193 id%KEEP(254)=id%LRHS ! Leading dimension
1194 id%KEEP(255)=id%LRHS*(id%KEEP(253)-1)+id%N ! Tot size
1196 RHS_MUMPS_ALLOCATED = .FALSE.
1201 DO K=1, id%KEEP(253)
1203 RHS_MUMPS( id%KEEP(254) * (K-1) + I )
1204 & = RHS_MUMPS( id%KEEP(254) * (K-1) + I )
1212 ALLOCATE(RHS_MUMPS(1),stat=IERR)
1217 & WRITE(LP,*) 'erreur
while allocating rhs on a slave
'
1220 RHS_MUMPS_ALLOCATED = .TRUE.
1222 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
1223 & id%COMM, id%MYID )
1224.lt.
IF ( id%INFO(1)0 ) GOTO 517
1225.EQ.
IF (KEEP(252) 1) THEN
1231 DO I= 1, id%KEEP(253)
1232 CALL MPI_BCAST(RHS_MUMPS((I-1)*id%KEEP(254)+1), N,
1233 & MPI_REAL, MASTER,id%COMM,IERR)
1238 KEEP(110)=id%ICNTL(24)
1239 CALL MPI_BCAST(KEEP(110), 1, MPI_INTEGER,
1240 & MASTER, id%COMM, IERR)
1242.NE.
IF (KEEP(110)1) KEEP(110)=0
1243.NE.
IF (KEEP(219)0) THEN
1244 CALL SMUMPS_BUF_MAX_ARRAY_MINSIZE(max(KEEP(108),1),IERR)
1245.NE.
IF (IERR 0) THEN
1250 id%INFO(2) = max(KEEP(108),1)
1266.EQ.
IF (id%MYID MASTER) CNTL3 = id%CNTL(3)
1267 CALL MPI_BCAST(CNTL3, 1, MPI_REAL,
1268 & MASTER, id%COMM, IERR)
1269.EQ.
IF (id%MYID MASTER) CNTL5 = id%CNTL(5)
1270 CALL MPI_BCAST(CNTL5, 1, MPI_REAL,
1271 & MASTER, id%COMM, IERR)
1272.EQ.
IF (id%MYID MASTER) CNTL6 = id%CNTL(6)
1273 CALL MPI_BCAST(CNTL6, 1, MPI_REAL,
1274 & MASTER, id%COMM, IERR)
1275.EQ.
IF (id%MYID MASTER) id%DKEEP(8) = id%CNTL(7)
1276 CALL MPI_BCAST(id%DKEEP(8), 1, MPI_REAL,
1277 & MASTER, id%COMM, IERR)
1278 id%DKEEP(11) = id%DKEEP(8)/id%KEEP(461)
1279 id%DKEEP(12) = id%DKEEP(8)/id%KEEP(462)
1280.EQ.
IF (KEEP(486)0) id%DKEEP(8) = ZERO
1281 COMPUTE_ANORMINF = .FALSE.
1282.NE..AND..LT.
IF ( (KEEP(486) 0) (id%DKEEP(8)ZERO)) THEN
1283 COMPUTE_ANORMINF = .TRUE.
1285.NE.
IF (KEEP(19)0) THEN
1287 COMPUTE_ANORMINF = .TRUE.
1289.NE.
IF (KEEP(110)0) THEN
1291 COMPUTE_ANORMINF = .TRUE.
1293.LT.
IF (id%DKEEP(8)ZERO) THEN
1295 IF (COMPUTE_ANORMINF) THEN
1297 CALL SMUMPS_ANORMINF( id , ANORMINF, LSCAL, EFF_SIZE_SCHUR )
1302 id%DKEEP(8) = abs(id%DKEEP(8))*ANORMINF
1304.GT..AND..GT.
IF ((KEEP(60)0)KEEP(116)0) ANORMINF=ZERO
1310 IF (COMPUTE_ANORMINF) THEN
1312.GT.
IF (KEEP(60)0) EFF_SIZE_SCHUR = KEEP(116)
1313 CALL SMUMPS_ANORMINF( id , ANORMINF, LSCAL, EFF_SIZE_SCHUR )
1318.NE..OR..NE.
IF ((KEEP(19)0)(KEEP(110)0)) THEN
1320.NE.
IF (KEEP(19)0) THEN
1321 WRITE(MPG,'(a,1pd16.4)
')
1322 & ' cntl(3)
for null pivot rows/singularities =
',CNTL3
1324 WRITE(MPG,'(a,1pd16.4)
')
1325 & ' cntl(3)
for null pivot row detection =
',CNTL3
1329.EQ.
IF (KEEP(19)0) THEN
1340.LT.
IF (CNTL3 ZERO) THEN
1341 id%DKEEP(9) = abs(CNTL(3))
1342.GT.
ELSE IF (CNTL3 ZERO) THEN
1343 id%DKEEP(9) = CNTL3*ANORMINF
1344.EQ.
ELSE ! (CNTL(3) ZERO) THEN
1347 WRITE(MPG, '(a,i16)
')
1348 & ' icntl(56) rank revealing effective
value =
',KEEP(19)
1349 WRITE(MPG,'(a,1pd16.4)
')
1350 & ' ...threshold
for singularities on
the root =
',id%DKEEP(9)
1356 Thresh_Seuil = id%DKEEP(13)
1357.LT.
IF (id%DKEEP(13)1) Thresh_Seuil = 10
1358 SEUIL = id%DKEEP(9)*Thresh_Seuil
1359 IF (PROKG) WRITE(MPG,'(a,1pd16.4)
')
1360 & ' ...threshold
for postponing =
',SEUIL
1362 SEUIL_LDLT_NIV2 = SEUIL
1366.EQ.
IF (KEEP(110)0) THEN
1372 id%DKEEP(1) = -1.0E0
1376.NE.
IF (KEEP(19)0) THEN
1381.LE..OR..GT.
IF ((id%DKEEP(10)0)(id%DKEEP(10)1)) THEN
1383 id%DKEEP(1) = id%DKEEP(9)*1E-1
1385 id%DKEEP(1) = id%DKEEP(9)*id%DKEEP(10)
1391.LT.
IF (CNTL3 ZERO) THEN
1392 id%DKEEP(1) = abs(CNTL(3))
1393.GT.
ELSE IF (CNTL3 ZERO) THEN
1394 id%DKEEP(1) = CNTL3*ANORMINF
1395.EQ.
ELSE ! (CNTL(3) ZERO) THEN
1397 CALL MUMPS_NPIV_CRITICAL_PATH(
1398 & N, KEEP(28), id%STEP(1), id%FRERE_STEPS(1), id%FILS(1),
1399 & id%NA(1), id%LNA, id%NE_STEPS(1), NPIV_CRITICAL_PATH )
1400 id%DKEEP(1) = sqrt(REAL(NPIV_CRITICAL_PATH))*EPS*ANORMINF
1402 ENDIF ! fin rank revealing
1403.NE..AND.
IF ((KEEP(110)0)(PROKG)) THEN
1404 WRITE(MPG, '(a,i16)
')
1405 & ' icntl(24) null pivot rows detection =
',KEEP(110)
1406 WRITE(MPG,'(a,1pd16.4)
')
1407 & ' ...zero pivot detection threshold =
',id%DKEEP(1)
1409.GT.
IF (CNTL5ZERO) THEN
1410 id%DKEEP(2) = CNTL5 * ANORMINF
1411 IF (PROKG) WRITE(MPG,'(a,1pd10.3)
')
1412 & ' ...fixation
for null pivots =
',id%DKEEP(2)
1414 IF (PROKG) WRITE(MPG,*) '...infinite fixation
'
1415.EQ.
IF (id%KEEP(50)0) THEN
1417 ! the user let us choose a fixation. set in NEGATIVE
1418 ! to detect during facto when to set row to zero !
1419 id%DKEEP(2) = -max(1.0E10*ANORMINF,
1420 & sqrt(huge(ANORMINF))/1.0E8)
1426 ENDIF ! fin null pivot detection.
1428.NE.
IF (KEEP(53)0) THEN
1429 ID_ROOT =MUMPS_PROCNODE(id%PROCNODE_STEPS(id%STEP(KEEP(20))),
1431.NE.
IF ( KEEP( 46 ) 1 ) THEN
1432 ID_ROOT = ID_ROOT + 1
1438 IF ( associated( id%PIVNUL_LIST) ) DEALLOCATE(id%PIVNUL_LIST)
1439.EQ.
IF(KEEP(110) 1) THEN
1442.NE..AND.
IF (KEEP(19)0
1443.EQ..OR..EQ.
& (ID_ROOTid%MYID id%MYIDMASTER)) THEN
1446 ALLOCATE( id%PIVNUL_LIST(LPN_LIST),stat = IERR )
1447.GT.
IF ( IERR 0 ) THEN
1451 id%PIVNUL_LIST(1:LPN_LIST) = 0
1454 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
1455 & id%COMM, id%MYID )
1456.lt.
IF ( id%INFO(1)0 ) GOTO 517
1462.EQ..AND..EQ.
IF ((KEEP(19)0)(KEEP(110)0)) THEN
1463.EQ.
IF (id%MYID MASTER) CNTL4 = id%CNTL(4)
1464 CALL MPI_BCAST( CNTL4, 1, MPI_REAL,
1465 & MASTER, id%COMM, IERR )
1467.GE.
IF ( CNTL4 ZERO ) THEN
1469.EQ.
IF ( CNTL4 ZERO ) THEN
1471.EQ.
IF(ANORMINF ZERO) THEN
1473.GT.
IF (KEEP(60)0) EFF_SIZE_SCHUR = KEEP(116)
1474 CALL SMUMPS_ANORMINF( id , ANORMINF, LSCAL,
1477 SEUIL = sqrt(EPS) * ANORMINF
1481 SEUIL_LDLT_NIV2 = SEUIL
1507 CALL SMUMPS_SET_BLRSTRAT_AND_MAXS_K8 (
1508 & MAXS_BASE8, MAXS_BASE_RELAXED8,
1510 & id%KEEP(1), id%KEEP8(1))
1512 MAXS = MAXS_BASE_RELAXED8
1513 IF (WK_USER_PROVIDED) THEN
1517 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
1518 & id%COMM, id%MYID )
1519.LT.
IF (id%INFO(1) 0) THEN
1523 id%KEEP8(75) = huge(id%KEEP8(75))
1524 id%KEEP8(76) = huge(id%KEEP8(76))
1525 IF (I_AM_SLAVE) THEN
1527.NE.
IF (id%KEEP8(4) 0_8) THEN
1529.NOT.
IF ( WK_USER_PROVIDED ) THEN
1531 CALL SMUMPS_MEM_ALLOWED_SET_MAXS (
1533 & BLR_STRAT, id%KEEP(201), MAXS_BASE_RELAXED8,
1534 & id%KEEP(1), id%KEEP8(1), id%MYID, id%N, id%NELT,
1535 & id%NA(1), id%LNA, id%NSLAVES,
1536 & KEEP464COPY, KEEP465COPY,
1537 & id%INFO(1), id%INFO(2)
1538 & , id%I8_L0_OMP(1,1), size(id%I8_L0_OMP,1),
1539 & size(id%I8_L0_OMP,2)
1544 CALL SMUMPS_MEM_ALLOWED_SET_K75 (
1546 & .FALSE., ! UNDER_L0_OMP
1547 & N, id%NELT, id%NA(1), id%LNA, id%NSLAVES,
1548 & BLR_STRAT, id%KEEP(201),
1549 & id%KEEP, id%KEEP8, id%INFO(1), id%INFO(2)
1550 & , id%I8_L0_OMP(1,1), size(id%I8_L0_OMP,1),
1551 & size(id%I8_L0_OMP,2)
1555 CALL SMUMPS_MEM_ALLOWED_SET_K75 (
1557 & .FALSE., ! UNDER_L0_OMP
1558 & N, id%NELT, id%NA(1), id%LNA, id%NSLAVES,
1559 & BLR_STRAT, id%KEEP(201),
1560 & id%KEEP, id%KEEP8, id%INFO(1), id%INFO(2)
1561 & , id%I8_L0_OMP(1,1), size(id%I8_L0_OMP,1),
1562 & size(id%I8_L0_OMP,2)
1565.GT.
IF (KEEP(400) 0) THEN
1571 id%KEEP8(76) = id%KEEP8(75)
1572 CALL SMUMPS_MEM_ALLOWED_SET_K75 (
1575 & .TRUE., ! UNDER_L0_OMP
1576 & id%N, id%NELT, id%NA(1), id%LNA, id%NSLAVES,
1577 & BLR_STRAT, id%KEEP(201),
1578 & id%KEEP, id%KEEP8, id%INFO(1), id%INFO(2)
1579 & , id%I8_L0_OMP(1,1), size(id%I8_L0_OMP,1),
1580 & size(id%I8_L0_OMP,2)
1589 ENDIF ! I_AM_SLAVE THEN
1591 IF (I_AM_SLAVE) THEN
1592.GT..AND..EQ.
IF ( (KEEP(400)0) (KEEP(406)2) ) THEN
1595 CALL SMUMPS_L0_COMPUTE_PEAK_ALLOWED(
1597 & id%NELT, id%NA(1), id%LNA, id%NSLAVES,
1598 & BLR_STRAT, id%KEEP(201),
1599 & id%KEEP(1), id%KEEP8(1), id%INFO(1), id%INFO(2)
1600 & , id%I8_L0_OMP(1,1), size(id%I8_L0_OMP,1),
1601 & size(id%I8_L0_OMP,2)
1606 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
1607 & id%COMM, id%MYID )
1608.LT.
IF (id%INFO(1) 0) THEN
1611 CALL MUMPS_SETI8TOI4(MAXS, id%INFO(39))
1612 CALL SMUMPS_AVGMAX_STAT8(PROKG, MPG, MAXS, id%NSLAVES,
1614 & id%COMM, " Effective size of S (based on INFO(39))= ")
1616 IF ( I_AM_SLAVE ) THEN
1620 CALL SMUMPS_LOAD_SET_INICOST( dble(id%COST_SUBTREES),
1621 & KEEP(64), id%DKEEP(15), KEEP(375), MAXS )
1623 MEMORY_MD_ARG = min(int(PERLU,8) * ( MAXS_BASE8 / 100_8 + 1_8 ),
1627 & max(0_8, MAXS-MAXS_BASE8))
1628 CALL SMUMPS_LOAD_INIT( id, MEMORY_MD_ARG, MAXS )
1634 CALL SMUMPS_CLEAN_OOC_DATA(id, IERR)
1640.GT.
IF (KEEP(201) 0) THEN
1644.EQ.
IF (KEEP(201)1 !PANEL Version
1645.AND..EQ.
& KEEP(50)0 ! Unsymmetric
1646.AND..NE.
& KEEP(251)2 ! Store L to disk
1648 id%OOC_NB_FILE_TYPE=2 ! declared in MUMPS_OOC_COMMON
1650 id%OOC_NB_FILE_TYPE=1 ! declared in MUMPS_OOC_COMMON
1655.GT.
IF (KEEP(205) 0) THEN
1656 KEEP(100) = KEEP(205)
1658.EQ.
IF (KEEP(201)1) THEN ! PANEL version
1659 I8TMP = int(id%OOC_NB_FILE_TYPE,8) *
1660 & 2_8 * int(KEEP(226),8)
1662 I8TMP = 2_8 * id%KEEP8(119)
1664 I8TMP = I8TMP + int(max(KEEP(12),0),8) *
1668 I8TMP = min(I8TMP, 12000000_8)
1669 KEEP(100)=int(I8TMP)
1671.EQ.
IF (KEEP(201)1) THEN
1673 IF ( KEEP(99) < 3 ) THEN
1674 KEEP(99) = KEEP(99) + 3
1681.LT.
IF (KEEP(99) 3) KEEP(100)=0
1682.GT.
IF((dble(KEEP(100))*dble(KEEP(35))/dble(2))
1683 & (dble(1999999999)))THEN
1685 WRITE(MPG,*)id%MYID,': warning: dim_buf_io might be
1686 & too big
for filesystem
'
1689 ALLOCATE (id%OOC_INODE_SEQUENCE(KEEP(28),
1690 & id%OOC_NB_FILE_TYPE),
1692.GT.
IF ( IERR 0 ) THEN
1694 id%INFO(2) = id%OOC_NB_FILE_TYPE*KEEP(28)
1695 NULLIFY(id%OOC_INODE_SEQUENCE)
1698 ALLOCATE (id%OOC_TOTAL_NB_NODES(id%OOC_NB_FILE_TYPE),
1700.GT.
IF ( IERR 0 ) THEN
1702 id%INFO(2) = id%OOC_NB_FILE_TYPE
1703 NULLIFY(id%OOC_TOTAL_NB_NODES)
1706 ALLOCATE (id%OOC_SIZE_OF_BLOCK(KEEP(28),
1707 & id%OOC_NB_FILE_TYPE),
1709.GT.
IF ( IERR 0 ) THEN
1711 id%INFO(2) = id%OOC_NB_FILE_TYPE*KEEP(28)
1712 NULLIFY(id%OOC_SIZE_OF_BLOCK)
1715 ALLOCATE (id%OOC_VADDR(KEEP(28),id%OOC_NB_FILE_TYPE),
1717.GT.
IF ( IERR 0 ) THEN
1719 id%INFO(2) = id%OOC_NB_FILE_TYPE*KEEP(28)
1720 NULLIFY(id%OOC_VADDR)
1725 112 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
1726 & id%COMM, id%MYID )
1727 IF (id%INFO(1) < 0) THEN
1731 IF (I_AM_SLAVE) THEN
1732.GT.
IF (KEEP(201) 0) THEN
1733.EQ..OR..EQ.
IF ((KEEP(201)1)(KEEP(201)2)) THEN
1734 CALL SMUMPS_OOC_INIT_FACTO(id,MAXS)
1736 WRITE(*,*) "Internal error in SMUMPS_FAC_DRIVER"
1739.LT.
IF(id%INFO(1)0)THEN
1746 CALL SMUMPS_LOAD_UPDATE(0,.FALSE.,dble(id%COST_SUBTREES),
1747 & id%KEEP(1),id%KEEP8(1))
1748.LT.
IF (id%INFO(1)0) GOTO 111
1753.EQ.
EARLYT3ROOTINS = KEEP(200) 0
1754.OR..LT..AND..EQ.
& ( KEEP(200) 0 KEEP(400) 0 )
1755#if defined (LARGEMATRICES)
1756.ne.
IF ( id%MYID MASTER ) THEN
1758.NOT.
IF (WK_USER_PROVIDED) THEN
1759 IF ( EARLYT3ROOTINS ) THEN
1761 ALLOCATE (id%S(MAXS),stat=IERR)
1763.GT.
IF ( IERR 0 ) THEN
1765 CALL MUMPS_SET_IERROR(MAXS, id%INFO(2))
1774 id%S => id%WK_USER(1:id%KEEP8(24))
1777#if defined (LARGEMATRICES)
1781 111 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
1782 & id%COMM, id%MYID )
1783.LT.
IF ( id%INFO(1)0 ) GOTO 514
1788 NB_ACTIVE_FRONTS_ESTIM = 3
1790!$ NB_THREADS = OMP_GET_MAX_THREADS()
1792 NB_ACTIVE_FRONTS_ESTIM = 3*NB_THREADS
1793 IF (I_AM_SLAVE) THEN
1795 CALL MUMPS_FDM_INIT('a
',NB_ACTIVE_FRONTS_ESTIM, id%INFO)
1797.EQ.
IF ( (KEEP(486)2)
1798.OR..NE..AND..GT.
& ((KEEP(489)0)(KEEP(400)1))
1803 NB_FRONTS_F_ESTIM = KEEP(470)
1805.NE.
IF (KEEP(489)0) THEN
1809 NB_FRONTS_F_ESTIM = 2*NB_ACTIVE_FRONTS_ESTIM
1811 NB_FRONTS_F_ESTIM = NB_ACTIVE_FRONTS_ESTIM
1814 CALL MUMPS_FDM_INIT('f
',NB_FRONTS_F_ESTIM, id%INFO )
1815.LT.
IF (id%INFO(1) 0 ) GOTO 114
1816#if ! defined(NO_FDM_DESCBAND)
1818 CALL MUMPS_FDBD_INIT( NB_ACTIVE_FRONTS_ESTIM, id%INFO )
1820#if ! defined(NO_FDM_MAPROW)
1822 CALL MUMPS_FMRD_INIT( NB_ACTIVE_FRONTS_ESTIM, id%INFO )
1824 CALL SMUMPS_BLR_INIT_MODULE( NB_FRONTS_F_ESTIM, id%INFO )
1827 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
1828 & id%COMM, id%MYID )
1830.LT.
IF ( id%INFO(1)0 ) GOTO 500
1839.eq.
IF ( KEEP(55) 0 ) THEN
1845 IF (associated( id%DBLARR)) THEN
1846 DEALLOCATE(id%DBLARR)
1849.and..ne.
IF ( I_AM_SLAVE id%KEEP8(26) 0_8 ) THEN
1850 ALLOCATE( id%DBLARR( id%KEEP8(26) ), stat = IERR )
1852 ALLOCATE( id%DBLARR( 1 ), stat =IERR )
1854.NE.
IF ( IERR 0 ) THEN
1856 WRITE(LP,*) id%MYID,
1857 & ': allocation error
for dblarr(
',id%KEEP8(26),')
'
1860 CALL MUMPS_SET_IERROR(id%KEEP8(26), id%INFO(2))
1868 IF ( associated( id%INTARR ) ) THEN
1869 DEALLOCATE( id%INTARR )
1870 NULLIFY( id%INTARR )
1872.and..ne.
IF ( I_AM_SLAVE id%KEEP8(27) 0_8 ) THEN
1873 ALLOCATE( id%INTARR( id%KEEP8(27) ), stat = allocok )
1874.GT.
IF ( allocok 0 ) THEN
1876 CALL MUMPS_SET_IERROR(id%KEEP8(27), id%INFO(2))
1881 ALLOCATE( id%INTARR(1),stat=allocok )
1882.GT.
IF ( allocok 0 ) THEN
1894 IF (associated( id%DBLARR)) THEN
1895 DEALLOCATE(id%DBLARR)
1898 IF ( I_AM_SLAVE ) THEN
1899.eq.
IF ( id%MYID_NODES MASTER
1900.AND..eq.
& KEEP(46) 1
1901.AND..eq.
& KEEP(52) 0 ) THEN
1905 id%DBLARR => id%A_ELT
1910.ne.
IF ( id%KEEP8(26) 0_8 ) THEN
1911 ALLOCATE( id%DBLARR( id%KEEP8(26) ), stat = allocok )
1912.GT.
IF ( allocok 0 ) THEN
1914 CALL MUMPS_SET_IERROR(id%KEEP8(26), id%INFO(2))
1919 ALLOCATE( id%DBLARR(1), stat = allocok )
1920.GT.
IF ( allocok 0 ) THEN
1929 ALLOCATE( id%DBLARR(1), stat = allocok )
1930.GT.
IF ( allocok 0 ) THEN
1942.NE..AND.
IF ( KEEP(38)0 I_AM_SLAVE ) THEN
1943 CALL SMUMPS_INIT_ROOT_FAC( id%N,
1944 & id%root, id%FILS(1), KEEP(38), id%KEEP(1), id%INFO(1) )
1952 CALL MUMPS_PROPINFO( id%ICNTL(1), id%INFO(1),
1953 & id%COMM, id%MYID )
1954.LT.
IF ( id%INFO(1)0 ) GOTO 500
1965.EQ.
IF (id%MYIDMASTER) CALL MUMPS_SECDEB(TIME)
1972 IF (EARLYT3ROOTINS) THEN
1976 S_PTR_ARG => S_DUMMY_ARG
1980.eq.
IF ( KEEP( 55 ) 0 ) THEN
2006.AND..NE..AND.
IF (EARLYT3ROOTINS KEEP(38)0
2007.EQ..AND.
& KEEP(60) 0 I_AM_SLAVE) THEN
2008 LWK = int(numroc( id%root%ROOT_SIZE, id%root%MBLOCK,
2009 & id%root%MYROW, 0, id%root%NPROW ),8)
2010 LWK = max( 1_8, LWK )
2012 & int(numroc( id%root%ROOT_SIZE, id%root%NBLOCK,
2013 & id%root%MYCOL, 0, id%root%NPCOL ),8)
2014 LWK = max( 1_8, LWK )
2021.LT.
IF (MAXS int(LWK,8)) THEN
2023 CALL MUMPS_SET_IERROR(LWK, id%INFO(2))
2025 CALL MUMPS_PROPINFO( id%ICNTL(1), id%INFO(1),
2026 & id%COMM, id%MYID )
2027.LT.
IF ( id%INFO(1)0 ) GOTO 500
2029.eq.
IF ( KEEP(54) 0 ) THEN
2035.eq.
IF ( id%MYID MASTER ) THEN
2036 ALLOCATE(IWK(id%N), stat=allocok)
2037.NE.
IF ( allocok 0 ) THEN
2041#if defined(LARGEMATRICES)
2042 ALLOCATE (WK(LWK),stat=IERR)
2043.GT.
IF ( IERR 0 ) THEN
2045 CALL MUMPS_SET_IERROR(LWK, id%INFO(2))
2046 write(6,*) ' pb1 alloc largemat
'
2050 CALL MUMPS_PROPINFO( id%ICNTL(1), id%INFO(1),
2051 & id%COMM, id%MYID )
2052.LT.
IF ( id%INFO(1)0 ) GOTO 500
2053.eq.
IF ( id%MYID MASTER ) THEN
2062.not.
IF ( associated( id%INTARR ) ) THEN
2063 ALLOCATE( id%INTARR( 1 ),stat=IERR)
2064.GT.
IF ( IERR 0 ) THEN
2068 write(6,*) ' pb2 alloc intarr
'
2072 NBRECORDS = KEEP(39)
2073.LT.
IF (id%KEEP8(28) int(NBRECORDS,8)) THEN
2074 NBRECORDS = int(id%KEEP8(28))
2076#if defined(LARGEMATRICES)
2077 CALL SMUMPS_FACTO_SEND_ARROWHEADS(id%N, id%KEEP8(28), id%A(1),
2078 & id%IRN(1), id%JCN(1), id%SYM_PERM(1),
2079 & LSCAL, id%COLSCA(1), id%ROWSCA(1),
2080 & id%MYID, id%NSLAVES, id%PROCNODE_STEPS(1),
2082 & LP, id%COMM, id%root, KEEP,id%KEEP8,
2083 & id%FILS(1), IWK(1), ! workspace of size N
2085 & id%INTARR(1), id%KEEP8(27), id%DBLARR(1), id%KEEP8(26),
2086 & id%PTRAR(1), id%PTRAR(id%N+1),
2087 & id%FRERE_STEPS(1), id%STEP(1), WK(1), LWK,
2088 & id%ISTEP_TO_INIV2(1), id%I_AM_CAND(1),
2089 & id%CANDIDATES(1,1))
2097.NOT.
IF (WK_USER_PROVIDED) THEN
2098 IF (EARLYT3ROOTINS) THEN
2099 ALLOCATE (id%S(MAXS),stat=IERR)
2101.GT.
IF ( IERR 0 ) THEN
2106 write(6,*) ' pb2 alloc largemat
',MAXS
2112 id%S => id%WK_USER(1:id%KEEP8(24))
2114 IF (EARLYT3ROOTINS) THEN
2115 id%S(MAXS-LWK+1_8:MAXS) = WK(1_8:LWK)
2119 CALL SMUMPS_FACTO_SEND_ARROWHEADS(id%N, id%KEEP8(28), id%A(1),
2120 & id%IRN(1), id%JCN(1), id%SYM_PERM(1),
2121 & LSCAL, id%COLSCA(1), id%ROWSCA(1),
2122 & id%MYID, id%NSLAVES, id%PROCNODE_STEPS(1),
2124 & LP, id%COMM, id%root, KEEP(1),id%KEEP8(1),
2125 & id%FILS(1), IWK(1),
2127 & id%INTARR(1), id%KEEP8(27), id%DBLARR(1), id%KEEP8(26),
2128 & id%PTRAR(1), id%PTRAR(id%N+1),
2129 & id%FRERE_STEPS(1), id%STEP(1), S_PTR_ARG(1), MAXS_ARG,
2130 & id%ISTEP_TO_INIV2(1), id%I_AM_CAND(1),
2131 & id%CANDIDATES(1,1) )
2135 NBRECORDS = KEEP(39)
2136.LT.
IF (id%KEEP8(28) int(NBRECORDS,8)) THEN
2137 NBRECORDS = int(id%KEEP8(28))
2139 CALL SMUMPS_FACTO_RECV_ARROWHD2( id%N,
2140 & id%DBLARR(1), id%KEEP8(26),
2141 & id%INTARR(1), id%KEEP8(27),
2144 & KEEP( 1 ), id%KEEP8(1), id%MYID, id%COMM,
2147 & S_PTR_ARG(1), MAXS_ARG,
2149 & id%PROCNODE_STEPS(1), id%NSLAVES,
2150 & id%SYM_PERM(1), id%FRERE_STEPS(1), id%STEP(1),
2151 & id%INFO(1), id%INFO(2) )
2159.EQ.
IF (id%MYIDMASTER) THEN
2160 CALL MUMPS_SECDEB(TIME)
2162 IF ( I_AM_SLAVE ) THEN
2170 CALL MPI_ALLREDUCE(id%KEEP8(29), NZ_locMAX8, 1, MPI_INTEGER8,
2171 & MPI_MAX, id%COMM_NODES, IERR)
2172 NBRECORDS = KEEP(39)
2173.LT.
IF (NZ_locMAX8 int(NBRECORDS,8)) THEN
2174 NBRECORDS = int(NZ_locMAX8)
2176 CALL SMUMPS_REDISTRIBUTION( id%N,
2179 & id%DBLARR(1), id%KEEP8(26), id%INTARR(1),
2180 & id%KEEP8(27), id%PTRAR(1), id%PTRAR(id%N+1),
2181 & KEEP(1), id%KEEP8(1), id%MYID_NODES,
2182 & id%COMM_NODES, NBRECORDS,
2183 & S_PTR_ARG(1), MAXS_ARG, id%root, id%PROCNODE_STEPS(1),
2184 & id%NSLAVES, id%SYM_PERM(1), id%STEP(1),
2185 & id%ICNTL(1), id%INFO(1), NSEND8, NLOCAL8,
2186 & id%ISTEP_TO_INIV2(1),
2187 & id%CANDIDATES(1,1) )
2188.EQ..OR..EQ.
IF ( ( KEEP(52)7 ) (KEEP(52)8) ) THEN
2201 IF ( id%MYID > 0 ) THEN
2202 IF (associated(id%ROWSCA)) THEN
2203 DEALLOCATE(id%ROWSCA)
2206 IF (associated(id%COLSCA)) THEN
2207 DEALLOCATE(id%COLSCA)
2212#if defined(LARGEMATRICES)
2216 IF (associated(id%IRN_loc)) THEN
2217 DEALLOCATE(id%IRN_loc)
2220 IF (associated(id%JCN_loc)) THEN
2221 DEALLOCATE(id%JCN_loc)
2224 IF (associated(id%A_loc)) THEN
2225 DEALLOCATE(id%A_loc)
2228 write(6,*) ' warning :
',
2229 & ' id%A_loc, irn_loc, jcn_loc deallocated
2232 WRITE(mp,120) nlocal8, nsend8
2235 IF ( keep(46) .eq. 0 .AND. id%MYID.eq.master )
THEN
2246 CALL mpi_reduce( nsend8, nsend_tot8, 1, mpi_integer8,
2247 & mpi_sum, master, id%COMM, ierr )
2248 CALL mpi_reduce( nlocal8, nlocal_tot8, 1, mpi_integer8,
2249 & mpi_sum, master, id%COMM, ierr )
2251 WRITE(mpg,125) nlocal_tot8, nsend_tot8
2258 & id%COMM, id%MYID )
2259 IF ( id%INFO( 1 ) .LT. 0 )
GOTO 500
2268 IF ( id%MYID.eq.master)
2281 & id%NSLAVES, id%PTRAR(1),
2282 & id%PTRAR(id%NELT+2),
2283 & id%INTARR(1), id%DBLARR(1), id%KEEP8(27), id%KEEP8(26),
2284 & id%KEEP(1), id%KEEP8(1), maxelt_size,
2285 & id%FRTPTR(1), id%FRTELT(1),
2286 & s_ptr_arg(1), maxs_arg, id%FILS(1),
2292 & id%COMM, id%MYID )
2293 IF ( id%INFO( 1 ) .LT. 0 )
GOTO 500
2298 IF ( id%MYID.EQ.master)
THEN
2300 id%DKEEP(93) = real(time)
2301 IF (prokg)
WRITE(mpg,160) id%DKEEP(93)
2303 IF ( keep(400) .GT. 0 )
THEN
2309 IF ( nomp .NE. keep(400) )
THEN
2311 id%INFO(2)=keep(400)
2312 IF (lpok)
WRITE(lp,
'(A,A,I5,A,I5)')
2313 &
" FAILURE DETECTED IN FACTORIZATION: #threads for KEEP(401)",
2314 &
" changed from",keep(400),
" at analysis to", nomp
2318 & id%COMM, id%MYID )
2319 IF ( id%INFO( 1 ) .LT. 0 )
GOTO 500
2329 IF ( i_am_slave )
THEN
2346 IF (keep(486).NE.0)
THEN
2347 smumps_lbufr_bytes8 = int(keep( 380 ),8) * int(keep( 35 ),8)
2349 smumps_lbufr_bytes8 = int(keep( 44 ),8) * int(keep( 35 ),8)
2354 smumps_lbufr_bytes8 =
max( smumps_lbufr_bytes8,
2356 IF ((keep(50).NE.0).AND.(keep(489).GT.0).AND.
2357 & (id%NSLAVES.GE.2))
THEN
2362 ratiok465 = real(keep465copy)/real(1000)
2363 smumps_lbufr_bytes8 =
max(smumps_lbufr_bytes8,
2367 & int(keep(2)+1,8)*int(keep(142),8)*int(keep(35),8)
2389 IF (keep(48).EQ.5)
THEN
2395 smumps_lbufr_bytes8 = smumps_lbufr_bytes8
2396 & + int( 2.0e0 * real(
max(perlu,min_perlu))*
2397 & real(smumps_lbufr_bytes8)/100e0, 8)
2398 smumps_lbufr_bytes8 =
min(smumps_lbufr_bytes8,
2399 & int(huge(i4)-100,8))
2400 smumps_lbufr_bytes = int( smumps_lbufr_bytes8 )
2401 IF (keep(48)==5)
THEN
2406 id%KEEP8(21) = id%KEEP8(22) +
2407 & int( real(
max(perlu,min_perlu))*
2408 & real(id%KEEP8(22))/100e0,8)
2418 IF (keep(486).NE.0)
THEN
2419 smumps_lbuf8 = int( real(keep(213)) / 100.0e0 *
2420 & real(keep(379)) * real(keep(35)), 8 )
2422 smumps_lbuf8 = int( real(keep(213)) / 100.0e0 *
2423 & real(keep(43)) * real(keep(35)), 8 )
2425 smumps_lbuf8 =
max( smumps_lbuf8, 100000_8 )
2426 smumps_lbuf8 = smumps_lbuf8
2427 & + int( 2.0e0 * real(
max(perlu,min_perlu))*
2428 & real(smumps_lbuf8)/100e0, 8)
2430 smumps_lbuf8 =
min(smumps_lbuf8, int(huge(i4)-100,8))
2435 smumps_lbuf8 =
max(smumps_lbuf8, smumps_lbufr_bytes8+3*keep(34))
2436 smumps_lbuf = int(smumps_lbuf8)
2437 IF(id%KEEP(48).EQ.4)
THEN
2438 smumps_lbufr_bytes=smumps_lbufr_bytes*5
2439 smumps_lbuf=smumps_lbuf*5
2451 smumps_lbuf_int = ( keep(56) + id%NSLAVES * id%NSLAVES ) * 5
2453 IF ( keep( 38 ) .NE. 0 )
THEN
2456 kkkk = mumps_procnode( id%PROCNODE_STEPS(id%STEP(keep(38))),
2458 IF ( kkkk .EQ. id%MYID_NODES )
THEN
2459 smumps_lbuf_int = smumps_lbuf_int + 4 * keep(34) *
2460 & ( id%NSLAVES + id%NE_STEPS(id%STEP(keep(38)))
2461 & +
min(keep(56), id%NE_STEPS(id%STEP(keep(38)))) * id%NSLAVES
2469 WRITE( mp, 9999 ) smumps_lbufr_bytes,
2470 & smumps_lbuf, smumps_lbuf_int
2472 9999
FORMAT( /,
' Allocated buffers',/,
' ------------------',/,
2473 &
' Size of reception buffer in bytes ...... = ', i10,
2475 &
' Size of async. emission buffer (bytes).. = ', i10,/,
2476 &
' Small emission buffer (bytes) .......... = ', i10)
2482 IF ( ierr .NE. 0 )
THEN
2485 id%INFO(2)= (smumps_lbuf_int+keep(34)-1)/keep(34)
2487 WRITE(lp,*) id%MYID,
2488 &
':Allocation error in SMUMPS_BUF_ALLOC_SMALL_BUF'
2498 smumps_lbufr = (smumps_lbufr_bytes+keep(34)-1)/keep(34)
2499 ALLOCATE( bufr( smumps_lbufr ),stat=ierr )
2500 IF ( ierr .NE. 0 )
THEN
2502 id%INFO(2) = smumps_lbufr
2505 &
': Allocation error for BUFR(', smumps_lbufr,
2506 &
') on MPI process',id%MYID
2517 IF (keep(201).GT.0)
THEN
2520 maxis_estim = keep(225)
2523 maxis_estim = keep(15)
2525 maxis =
max( 1, int(
min( int(huge(maxis),8),
2526 & int(maxis_estim,8) + 3_8 *
max(int(perlu,8),10_8) *
2527 & ( int(maxis_estim,8) / 100_8 + 1_8 )
2538 ALLOCATE( id%PTLUST_S( id%KEEP(28) ), stat = ierr )
2539 IF ( ierr .NE. 0 )
THEN
2541 id%INFO(2)=id%KEEP(28)
2543 WRITE(lp,*) id%MYID,
2544 &
': Allocation error for id%PTLUST_S(', id%KEEP(28),
')'
2546 NULLIFY(id%PTLUST_S)
2549 ALLOCATE( id%PTRFAC( id%KEEP(28) ), stat = ierr )
2550 IF ( ierr .NE. 0 )
THEN
2552 id%INFO(2)=id%KEEP(28)
2555 WRITE(lp,*) id%MYID,
2556 &
': Allocation error for id%PTRFAC(', id%KEEP(28),
')'
2567 ptrwb = ptrist + id%KEEP(28)
2568 itloc = ptrwb + 2 * id%KEEP(28)
2570 ipool = itloc + id%N + id%KEEP(253)
2579 lpool = mumps_get_pool_length(id%NA(1), id%KEEP(1),id%KEEP8(1))
2580 ALLOCATE( iwk( ipool + lpool - 1 ), stat = ierr )
2581 IF ( ierr .NE. 0 )
THEN
2583 id%INFO(2)=ipool + lpool - 1
2585 WRITE(lp,*) id%MYID,
2586 &
': Allocation error for IWK(',ipool+lpool-1,
')'
2590 ALLOCATE(iwk8( 2 * id%KEEP(28)), stat = ierr)
2591 IF ( ierr .NE. 0 )
THEN
2593 id%INFO(2)=2 * id%KEEP(28)
2595 WRITE(lp,*) id%MYID,
2596 &
': Allocation error for IWKB(', 2*id%KEEP(28),
')'
2610 & id%COMM, id%MYID )
2611 IF ( id%INFO( 1 ) .LT. 0 )
GOTO 500
2613 IF ( i_am_slave )
THEN
2617 WRITE( mp, 170 ) maxs, maxis, id%KEEP8(12), keep(15),
2618 & id%KEEP8(26), id%KEEP8(27), id%KEEP8(11), keep(26), keep(27)
2639 IF ( i_am_slave )
THEN
2643 IF ( keep(55) .eq. 0 )
THEN
2646 ldptrar = id%NELT + 1
2648 IF ( id%KEEP(55) .NE. 0 )
THEN
2658 IF (i_am_slave)
THEN
2659 IF (
associated(id%L0_OMP_MAPPING))
2660 &
DEALLOCATE(id%L0_OMP_MAPPING)
2661 IF (keep(400) .GT. 0)
THEN
2662 id%LL0_OMP_MAPPING = keep(28)
2664 id%LL0_OMP_MAPPING = 1
2666 ALLOCATE(id%L0_OMP_MAPPING(id%LL0_OMP_MAPPING), stat=allocok)
2667 IF ( allocok > 0)
THEN
2668 write(*,*)
"Problem allocating L0_OMP_MAPPING",
2672 IF (
associated(id%L0_OMP_FACTORS))
THEN
2675 IF (keep(400) .GT. 0)
THEN
2676 id%LL0_OMP_FACTORS = keep(400)
2678 id%LL0_OMP_FACTORS = 1
2680 ALLOCATE(id%L0_OMP_FACTORS(id%LL0_OMP_FACTORS),stat = allocok)
2681 IF (allocok > 0)
THEN
2683 id%INFO(2)=nb_threads
2690 & id%COMM, id%MYID )
2691 IF ( id%INFO( 1 ) .LT. 0 )
GOTO 500
2693 avg_flops = rinfog(1)/(real(id%NSLAVES))
2694 id%DKEEP(17) =
max( id%DKEEP(18), avg_flops/real(50) )
2696 IF (prok.AND.id%MYID.EQ.master)
THEN
2697 IF (id%NSLAVES.LE.1)
THEN
2698 WRITE(mp,
'(/A,A,1PD10.3)')
2699 &
' Start factorization with total',
2700 &
' estimated flops (RINFOG(1)) = ',
2703 WRITE(mp,
'(/A,A,1PD10.3,A,1PD10.3)')
2704 &
' Start factorization with total',
2705 &
' estimated flops RINFOG(1) / Average per MPI proc = ',
2706 & rinfog(1),
' / ', avg_flops
2709 IF (i_am_slave)
THEN
2717 s_is_pointers%IW => id%IS;
NULLIFY(id%IS)
2718 s_is_pointers%A => id%S ;
NULLIFY(id%S)
2719 CALL smumps_fac_b(id%N,s_is_pointers,maxs,maxis,id%SYM_PERM(1),
2720 & id%NA(1),id%LNA,id%NE_STEPS(1),id%ND_STEPS(1), id%FILS(1),
2721 & id%STEP(1),id%FRERE_STEPS(1),id%DAD_STEPS(1),id%CANDIDATES(1,1),
2722 & id%ISTEP_TO_INIV2(1),id%TAB_POS_IN_PERE(1,1), id%PTRAR(1),
2723 & ldptrar,iwk(ptrist),id%PTLUST_S(1),id%PTRFAC(1),iwk(ptrwb),iwk8,
2724 & iwk(itloc),rhs_mumps(1),iwk(ipool),lpool,cntl1,icntl(1),
2725 & id%INFO(1), rinfo(1),keep(1),id%KEEP8(1),id%PROCNODE_STEPS(1),
2726 & id%NSLAVES,id%COMM_NODES,id%MYID,id%MYID_NODES,bufr,smumps_lbufr
2727 & , smumps_lbufr_bytes, smumps_lbuf, id%INTARR(1),id%DBLARR(1),
2728 & id%root, nelt_arg, id%FRTPTR(1), id%FRTELT(1),id%COMM_LOAD,
2729 & id%ASS_IRECV, seuil, seuil_ldlt_niv2, id%MEM_DIST(0),
2730 & id%DKEEP(1), id%PIVNUL_LIST(1), lpn_list, id%LRGROUPS(1)
2731 & ,id%IPOOL_B_L0_OMP(1),id%LPOOL_B_L0_OMP,
2732 & id%IPOOL_A_L0_OMP(1),id%LPOOL_A_L0_OMP,id%L_VIRT_L0_OMP,
2733 & id%VIRT_L0_OMP(1), id%VIRT_L0_OMP_MAPPING(1),id%L_PHYS_L0_OMP,
2734 & id%PHYS_L0_OMP(1), id%PERM_L0_OMP(1), id%PTR_LEAFS_L0_OMP(1),
2735 & id%L0_OMP_MAPPING(1),id%LL0_OMP_MAPPING,
2736 & id%THREAD_LA, id%L0_OMP_FACTORS
2737 & id%I4_L0_OMP(1,1),
size(id%I4_L0_OMP,1),
size(id%I4_L0_OMP,2),
2738 & id%I8_L0_OMP(1,1),
size(id%I8_L0_OMP,1),
size(id%I8_L0_OMP,2)
2740 id%IS => s_is_pointers%IW;
NULLIFY(s_is_pointers%IW)
2741 id%S => s_is_pointers%A ;
NULLIFY(s_is_pointers%A)
2758 IF ( keep(55) .eq. 0 )
THEN
2763 IF (
associated( id%DBLARR))
THEN
2764 DEALLOCATE(id%DBLARR)
2773 IF (
associated(id%INTARR))
THEN
2774 DEALLOCATE( id%INTARR)
2775 NULLIFY( id%INTARR )
2782 IF ( id%MYID_NODES .eq. master
2783 & .AND. keep(46) .eq. 1
2784 & .AND. keep(52) .eq. 0 )
THEN
2785 NULLIFY( id%DBLARR )
2787 IF (
associated( id%DBLARR))
THEN
2788 DEALLOCATE(id%DBLARR)
2801 IF ( keep(19) .NE. 0 )
THEN
2802 IF ( keep(46) .NE. 1 )
THEN
2805 IF ( id%MYID .eq. master )
THEN
2806 CALL mpi_recv( keep(17), 1, mpi_integer, 1, defic_tag,
2807 & id%COMM, status, ierr )
2808 CALL mpi_recv( keep(143), 1, mpi_integer, 1, defic_tag,
2809 & id%COMM, status, ierr )
2810 ELSE IF ( id%MYID .EQ. 1 )
THEN
2811 CALL mpi_send( keep(17), 1, mpi_integer, 0, defic_tag,
2813 CALL mpi_send( keep(143), 1, mpi_integer, 0, defic_tag,
2823 IF (
allocated(bufr))
DEALLOCATE(bufr)
2826 IF (keep(219).NE.0)
THEN
2835 & id%COMM, id%MYID )
2838 IF (keep(201) .GT. 0)
THEN
2839 IF ((keep(201).EQ.1) .OR. (keep(201).EQ.2))
THEN
2840 IF ( i_am_slave )
THEN
2848 & id%COMM, id%MYID )
2855 IF (id%MYID.EQ.master)
THEN
2857 id%DKEEP(94)=real(time)
2858 IF (keep(400).GT.0)
THEN
2860 id%DKEEP(96)=id%DKEEP(94)-id%DKEEP(95)
2866 mem_eff_allocated = .true.
2868 & id%MYID, n, id%NELT, id%NA(1), id%LNA, id%KEEP8(28),
2870 & id%NSLAVES, total_mbytes, .true., id%KEEP(201),
2871 & blr_strat, .true., total_bytes,
2872 & idummy, bdummy, mem_eff_allocated
2874 & , id%I8_L0_OMP(1,1),
size(id%I8_L0_OMP,1),
2875 &
size(id%I8_L0_OMP,2)
2877 IF (keep(400) .GT. 0 )
THEN
2879 & id%MYID, n, id%NELT, id%NA(1), id%LNA, id%KEEP8(28),
2881 & id%NSLAVES, total_mbytes_under_l0, .true., id%KEEP(201),
2882 & blr_strat, .true., total_bytes_under_l0,
2883 & idummy, bdummy, mem_eff_allocated
2885 & , id%I8_L0_OMP(1,1),
size(id%I8_L0_OMP,1),
2886 &
size(id%I8_L0_OMP,2)
2888 total_mbytes =
max (total_mbytes,total_mbytes_under_l0)
2889 total_bytes =
max(total_bytes, total_bytes_under_l0)
2891 IF (id%KEEP8(24).NE.0)
THEN
2894 id%INFO(16) = total_mbytes
2899 id%INFO(16) = total_mbytes
2909 & id%INFO(16), id%INFOG(18), irank )
2911 & mp, mpg, id%INFO(16), id%INFOG(18), id%INFOG(19),
2912 & id%NSLAVES, irank,
2916 WRITE(mp,
'(A,I12) ')
2917 &
' ** Eff. min. Space MBYTES for facto (INFO(16)):',
2925 mem_eff_allocated = .false.
2927 & id%MYID, n, id%NELT, id%NA(1), id%LNA, id%KEEP8(28),
2929 & id%NSLAVES, total_mbytes, .true., id%KEEP(201),
2930 & blr_strat, perlu_on, total_bytes,
2931 & idummy, bdummy, mem_eff_allocated
2933 & , id%I8_L0_OMP(1,1),
size(id%I8_L0_OMP,1),
2934 &
size(id%I8_L0_OMP,2)
2936 IF (keep(400) .GT. 0 )
THEN
2938 & id%MYID, n, id%NELT, id%NA(1), id%LNA, id%KEEP8(28),
2940 & id%NSLAVES, total_mbytes_under_l0, .true., id%KEEP(201),
2941 & blr_strat, perlu_on, total_bytes_under_l0,
2942 & idummy, bdummy, mem_eff_allocated
2944 & , id%I8_L0_OMP(1,1),
size(id%I8_L0_OMP,1),
2945 &
size(id%I8_L0_OMP,2)
2947 total_mbytes =
max(total_mbytes,total_mbytes_under_l0)
2948 total_bytes =
max(total_bytes, total_bytes_under_l0)
2953 id%KEEP8(7) = total_bytes
2956 id%INFO(22) = total_mbytes
2965 & id%INFO(22), id%INFOG(21), irank )
2967 IF (print_maxavg)
THEN
2968 WRITE( mpg,
'(A,I12) ')
2969 &
' ** Memory effectively used, max in Mbytes (INFOG(21)):',
2972 WRITE( mpg,
'(A,I12) ')
2973 &
' ** Memory effectively used, total in Mbytes (INFOG(22)):',
2976 sum_info22_this_node=0
2977 CALL mpi_reduce( id%INFO(22), sum_info22_this_node, 1,
2979 & mpi_sum, 0, id%KEEP(411), ierr )
2980 CALL mpi_reduce( sum_info22_this_node, max_sum_info22_this_node,
2981 & 1, mpi_integer, mpi_max, 0, id%COMM, ierr )
2982 IF (prokg .AND. print_nodeinfo)
THEN
2983 WRITE(mpg,
'(A,I12)')
2984 &
' ** Max. effective space per compute node, in MBytes :',
2985 & max_sum_info22_this_node
2988 IF (i_am_slave)
THEN
3006 IF (keep(400) .GT.0 )
THEN
3007 IF (.NOT. i_am_slave)
THEN
3008 id%DKEEP(95) = 0.0e0
3009 id%DKEEP(16) = 0.0e0
3011 IF (id%NPROCS .GT. 1)
THEN
3014 & mpi_real, mpi_sum, master, id%COMM, ierr)
3015 IF (id%MYID.EQ.master) timeavg=dble(tmptime)
3017 & mpi_real, mpi_sum, master, id%COMM, ierr)
3018 IF (id%MYID.EQ.master) flopavg=dble(tmpflop)
3019 IF (id%MYID.EQ.master)
THEN
3020 timeavg = timeavg / id%NSLAVES
3021 flopavg = flopavg / id%NSLAVES
3024 & mpi_real, mpi_max, master, id%COMM, ierr)
3025 IF (id%MYID.EQ.master) timemax=dble(tmptime)
3027 & mpi_real, mpi_max, master, id%COMM, ierr)
3028 IF (id%MYID.EQ.master) flopmax=dble(tmpflop)
3031 WRITE(mpg,190) flopavg, flopmax
3032 WRITE(mpg,188) timeavg, timemax
3037 WRITE(mpg,189) id%DKEEP(16)
3038 WRITE(mpg,187) id%DKEEP(95)
3043 IF (id%INFO(1) .GE.0)
THEN
3044 WRITE(mpg,180) id%DKEEP(94)
3046 WRITE(mpg,185) id%DKEEP(94)
3059 & mpi_sum, master, id%COMM, ierr)
3063 CALL mpi_reduce( keep(246), keep(247), 1, mpi_integer,
3064 & mpi_max, master, id%COMM, ierr)
3067 CALL mpi_reduce( id%DKEEP(97), id%DKEEP(98), 1,
3069 & mpi_max, master, id%COMM, ierr)
3073 & mpi_sum, master, id%COMM, ierr)
3075 & mpi_sum, master, id%COMM )
3077 IF (id%MYID.EQ.0)
THEN
3079 rinfog(16) = real(id%KEEP8(6)*int(keep(35),8))/real(1e6)
3080 IF (keep(201).LE.0)
THEN
3088 CALL mpi_reduce( int(id%INFO(10),8), id%KEEP8(128),
3090 & mpi_sum, master, id%COMM, ierr)
3091 IF (id%MYID.EQ.master)
THEN
3096 & mpi_max, id%COMM, ierr)
3100 keep(133) = infog(11)
3101 CALL mpi_reduce( id%INFO(12), infog(12), 3, mpi_integer,
3102 & mpi_sum, master, id%COMM, ierr)
3103 CALL mpi_reduce( keep(103), infog(25), 1, mpi_integer,
3104 & mpi_sum, master, id%COMM, ierr)
3105 keep(229) = infog(25)
3106 CALL mpi_reduce( keep(105), infog(25), 1, mpi_integer,
3107 & mpi_sum, master, id%COMM, ierr)
3108 keep(230) = infog(25)
3110 id%INFO(25) = keep(98)
3112 & mpi_sum, id%COMM, ierr)
3122 id%INFO(28) = id%INFO(27)
3123 infog(35) = infog(29)
3127 IF ( keep(486) .NE. 0 )
THEN
3138 & , 1, mpi_double_precision,
3139 & mpi_sum, master, id%COMM, ierr)
3141 & , 1, mpi_double_precision,
3142 & mpi_sum, master, id%COMM, ierr)
3144 & , 1, mpi_double_precision,
3145 & mpi_sum, master, id%COMM, ierr)
3147 & , 1, mpi_double_precision,
3148 & mpi_sum, master, id%COMM, ierr)
3150 & , 1, mpi_double_precision,
3151 & mpi_sum, master, id%COMM, ierr)
3153 & , 1, mpi_double_precision,
3154 & mpi_sum, master, id%COMM, ierr)
3156 & , 1, mpi_double_precision,
3157 & mpi_sum, master, id%COMM, ierr)
3159 & , 1, mpi_double_precision,
3160 & mpi_sum, master, id%COMM, ierr)
3162 & , 1, mpi_double_precision,
3163 & mpi_sum, master, id%COMM, ierr)
3165 & tmp_flop_frswap_compress
3166 & , 1, mpi_double_precision,
3167 & mpi_sum, master, id%COMM, ierr
3169 & tmp_flop_midblk_compress
3170 & , 1, mpi_double_precision,
3171 & mpi_sum, master, id%COMM, ierr)
3173 & , 1, mpi_double_precision,
3174 & mpi_sum, master, id%COMM, ierr)
3176 & , 1, mpi_double_precision,
3177 & mpi_sum, master, id%COMM, ierr)
3179 & , 1, mpi_double_precision,
3180 & mpi_sum, master, id%COMM, ierr)
3182 & , 1, mpi_double_precision,
3183 & mpi_sum, master, id%COMM, ierr)
3185 & , 1, mpi_double_precision,
3186 & mpi_sum, master, id%COMM, ierr)
3188 & , 1, mpi_double_precision,
3189 & mpi_sum, master, id%COMM, ierr)
3191 & , 1, mpi_double_precision,
3192 & mpi_sum, master, id%COMM, ierr)
3194 & , 1, mpi_double_precision,
3195 & mpi_sum, master, id%COMM, ierr)
3197 & , 1, mpi_double_precision,
3198 & mpi_sum, master, id%COMM, ierr)
3200 & , 1, mpi_double_precision,
3201 & mpi_sum, master, id%COMM, ierr)
3204 & mpi_sum, master, id%COMM, ierr)
3205 IF (id%NPROCS.GT.1)
THEN
3209 & , 1, mpi_double_precision,
3210 & mpi_sum, master, id%COMM, ierr)
3211 IF (id%MYID.EQ.master)
THEN
3215 & , 1, mpi_double_precision,
3216 & mpi_min, master, id%COMM, ierr)
3218 & , 1, mpi_double_precision,
3219 & mpi_max, master, id%COMM, ierr)
3222 & , 1, mpi_double_precision,
3223 & mpi_sum, master, id%COMM, ierr)
3225 & , 1, mpi_double_precision,
3226 & mpi_sum, master, id%COMM, ierr)
3228 & , 1, mpi_double_precision,
3229 & mpi_sum, master, id%COMM, ierr)
3231 & , 1, mpi_double_precision,
3232 & mpi_sum, master, id%COMM, ierr)
3234 & , 1, mpi_double_precision,
3235 & mpi_sum, master, id%COMM, ierr)
3237 & , 1, mpi_double_precision,
3238 & mpi_sum, master, id%COMM, ierr)
3240 & , 1, mpi_double_precision,
3241 & mpi_sum, master, id%COMM, ierr)
3243 & , 1, mpi_double_precision,
3244 & mpi_sum, master, id%COMM, ierr)
3246 & tmp_time_midblk_compress
3247 & , 1, mpi_double_precision,
3248 & mpi_sum, master, id%COMM, ierr)
3250 & tmp_time_frswap_compress
3251 & , 1, mpi_double_precision,
3252 & mpi_sum, master, id%COMM, ierr)
3254 & , 1, mpi_double_precision,
3255 & mpi_sum, master, id%COMM, ierr)
3257 & , 1, mpi_double_precision,
3258 & mpi_sum, master, id%COMM, ierr)
3260 & , 1, mpi_double_precision,
3261 & mpi_sum, master, id%COMM, ierr)
3263 & , 1, mpi_double_precision,
3264 & mpi_sum, master, id%COMM, ierr)
3266 & , 1, mpi_double_precision,
3267 & mpi_sum, master, id%COMM, ierr)
3269 & , 1, mpi_double_precision,
3270 & mpi_sum, master, id%COMM, ierr)
3272 & , 1, mpi_double_precision,
3273 & mpi_sum, master, id%COMM, ierr)
3275 & , 1, mpi_double_precision,
3276 & mpi_sum, master, id%COMM
3278 & , 1, mpi_double_precision,
3279 & mpi_sum, master, id%COMM, ierr)
3281 & , 1, mpi_double_precision,
3282 & mpi_sum, master, id%COMM, ierr)
3284 & , 1, mpi_double_precision,
3285 & mpi_sum, master, id%COMM, ierr)
3287 & , 1, mpi_double_precision,
3288 & mpi_sum, master, id%COMM, ierr)
3290 & , 1, mpi_double_precision,
3291 & mpi_sum, master, id%COMM, ierr)
3293 & , 1, mpi_double_precision,
3294 & mpi_sum, master, id%COMM, ierr)
3296 & , 1, mpi_double_precision,
3297 & mpi_sum, master, id%COMM, ierr)
3299 & , 1, mpi_double_precision,
3300 & mpi_sum, master, id%COMM, ierr)
3301 IF (id%MYID.EQ.master)
THEN
3302 IF (id%NPROCS.GT.1)
THEN
3355 & id%KEEP8(49), prokg, mpg)
3364 IF (cntl(7) < 0.0e0)
THEN
3367 WRITE(lp,
'(/A/,A/,A/,A,A)')
3368 &
' WARNING in BLR input setting',
3369 &
' CNTL(7) < 0 is experimental: ',
3370 &
' RRQR precision = |CNTL(7| x ||A_pre||, ',
3371 &
' where A_pre is the preprocessed matrix as defined',
3372 &
' in the Users guide '
3376 & keep(489), id%DKEEP, n, id%ICNTL(36),
3377 & keep(487), keep(488), keep(490),
3378 & keep(491), keep(50), keep(486),
3379 & keep(472), keep(475), keep(478), keep(480),
3381 & keep(483), keep(484),
3382 & id%KEEP8(110), id%KEEP8(49),
3383 & keep(28), id%NPROCS, mpg, prokg)
3385 rinfog(14) = id%DKEEP(56)
3393 IF(keep(110) .EQ. 1)
THEN
3396 id%INFO(18) = keep(109)
3398 & mpi_sum, id%COMM, ierr)
3404 IF (id%MYID.EQ.master)
THEN
3406 infog(28)=keep(112)+keep(17)
3415 IF (keep(17) .NE. 0)
THEN
3416 IF (id%MYID .EQ. id_root)
THEN
3420 id%INFO(18)=id%INFO(18)+keep(17)
3422 IF (id_root .EQ. master)
THEN
3423 IF (id%MYID.EQ.master)
THEN
3432 DO i= keep(17), 1, -1
3435 id%PIVNUL_LIST(keep(112)+i)=id%PIVNUL_LIST(keep(109)+i)
3444 IF (id%MYID .EQ. id_root)
THEN
3445 CALL mpi_send(id%PIVNUL_LIST(keep(109)+1), keep(17),
3446 & mpi_integer, master, zero_piv,
3448 ELSE IF (id%MYID .EQ. master)
THEN
3449 CALL mpi_recv(id%PIVNUL_LIST(keep(112)+1), keep(17),
3450 & mpi_integer, id_root, zero_piv,
3451 & id%COMM, status, ierr )
3462 IF(keep(110) .EQ. 1)
THEN
3463 ALLOCATE(itmp2(id%NPROCS),stat = ierr )
3464 IF ( ierr .GT. 0 )
THEN
3466 id%INFO(2)=id%NPROCS
3469 & id%COMM, id%MYID )
3470 IF (id%INFO(1).LT.0)
GOTO 490
3472 & itmp2(1), 1, mpi_integer,
3473 & master, id%COMM, ierr)
3474 IF(id%MYID .EQ. master)
THEN
3479 DO i = 1,id%NPROCS-1
3480 CALL mpi_recv(id%PIVNUL_LIST(posbuf), itmp2(i+1),
3482 & zero_piv, id%COMM, status, ierr)
3487 CALL mpi_send(posbuf, 1, mpi_integer, i, zero_piv,
3489 posbuf = posbuf + itmp2(i+1)
3492 CALL mpi_send( id%PIVNUL_LIST(1), keep(109), mpi_integer,
3493 & master,zero_piv, id%COMM, ierr)
3494 CALL mpi_recv( keep(220), 1, mpi_integer, master, zero_piv,
3495 & id%COMM, status, ierr )
3501 CALL mpi_reduce( id%DKEEP(19), rinfog(19), 1,
3503 & mpi_min, master, id%COMM, ierr )
3504 CALL mpi_reduce( id%DKEEP(20), rinfog(20), 1,
3506 & mpi_min, master, id%COMM, ierr )
3507 CALL mpi_reduce( id%DKEEP(21), rinfog(21), 1,
3509 & mpi_max, master, id%COMM, ierr )
3513 CALL mpi_reduce( id%KEEP8(80), itemp8, 1, mpi_integer8,
3514 & mpi_sum, master, id%COMM, ierr )
3515 IF (id%MYID .EQ. master)
THEN
3521 CALL mpi_reduce( id%KEEP(425), id%INFOG(49), 1, mpi_integer,
3522 & mpi_max, master, id%COMM, ierr )
3535 IF (id%MYID.EQ.master .AND. lscal. and. keep(258).NE.0)
THEN
3536 k =
min(keep(143), keep(17))
3538 DO i = 1, keep(112)+ k
3541 & id%ROWSCA(id%PIVNUL_LIST(i)),
3542 & id%DKEEP(6), keep(259))
3544 & id%COLSCA(id%PIVNUL_LIST(i)),
3545 & id%DKEEP(6), keep(259))
3551 IF (keep(258).NE.0)
THEN
3557 IF (keep(260).EQ.-1)
THEN
3558 id%DKEEP(6)=-id%DKEEP(6)
3564 & id%COMM, id%DKEEP(6), keep(259),
3565 & rinfog(12), infog(34), id%NPROCS)
3569 IF (id%KEEP(50).EQ.0 .AND. id%MYID.EQ. master)
THEN
3573 IF (id%KEEP(23).NE.0)
THEN
3586 490
IF (
allocated(itmp2))
DEALLOCATE(itmp2)
3591 WRITE(mpg,99984) rinfog(2),rinfog(3),keep(52),
3593 & id%KEEP8(128), infog(11), id%KEEP8(110)
3594 IF (id%KEEP(50) == 1 .OR. id%KEEP(50) == 2)
THEN
3596 WRITE(mpg, 99987) infog(12)
3598 IF (id%KEEP(50) == 0)
THEN
3600 WRITE(mpg, 99985) infog(12)
3602 IF (id%KEEP(50) .NE. 1)
THEN
3604 WRITE(mpg, 99982) infog(13)
3606 IF (keep(97) .NE. 0)
THEN
3608 WRITE(mpg,
'(A,D16.4)')
3609 &
' Effective static pivoting thresh., CNTL(4) =', seuil
3610 WRITE(mpg, 99986) infog(25)
3612 IF (id%KEEP(50) == 2)
THEN
3614 WRITE(mpg, 99988) keep(229)
3616 WRITE(mpg, 99989) keep(230)
3619 IF (keep(110) .NE.0)
THEN
3620 WRITE(mpg, 99991) keep(112)
3623 IF ( keep(19) .ne. 0 )
3625 &
WRITE(mpg, 99983) keep(17)
3627 IF (keep(110).NE.0.OR.keep(19).NE.0)
3629 &
WRITE(mpg, 99992) keep(17)+keep(112)
3631 WRITE(mpg, 99981) infog(14)
3634 IF (id%KEEP8(108) .GT. 0_8)
THEN
3635 WRITE(mpg, 99980) id%KEEP8(108)
3637 IF ((keep(60).NE.0) .AND. infog(25).GT.0)
THEN
3641 &
" ** Warning Static pivoting was necessary"
3643 &
" ** to factor interior variables with Schur ON"
3645 IF (keep(258).NE.0)
THEN
3646 WRITE(mpg,99978) rinfog(12)
3647 WRITE(mpg,99977) infog(34)
3660#if ! defined(NO_FDM_DESCBAND)
3663#if ! defined(NO_FDM_MAPROW)
3672 IF (id%KEEP(46).EQ.1 .AND.
3673 & id%KEEP(55).NE.0 .AND.
3674 & id%MYID.EQ.master .AND.
3675 & id%KEEP(52) .EQ. 0)
THEN
3678 IF (
associated(id%DBLARR))
THEN
3679 DEALLOCATE(id%DBLARR)
3683#if ! defined(NO_FDM_DESCBAND)
3684 IF (i_am_slave)
THEN
3688#if ! defined(NO_FDM_MAPROW)
3689 IF (i_am_slave)
THEN
3693 IF (i_am_slave)
THEN
3699 & .AND. id%INFO(1).GE.0
3709 IF (i_am_slave)
THEN
3716 & .AND. id%INFO(1).GE.0
3720 IF (.NOT.
associated(id%FDM_F_ENCODING))
THEN
3721 WRITE(*,*)
"Internal error 2 in SMUMPS_FAC_DRIVER"
3734 IF ( i_am_slave )
THEN
3735 IF ((keep(201).EQ.1).OR.(keep(201).EQ.2))
THEN
3737 IF (id%ASSOCIATED_OOC_FILES)
THEN
3738 id%ASSOCIATED_OOC_FILES = .false.
3740 IF (ierr.LT.0 .AND. id%INFO(1) .GE. 0) id%INFO(1) = ierr
3742 IF (wk_user_provided)
THEN
3745 ELSE IF (keep(201).NE.0)
THEN
3753 IF (
associated(id%S))
DEALLOCATE(id%S)
3758 IF (wk_user_provided)
THEN
3762 IF (
associated(id%S))
DEALLOCATE(id%S)
3771 IF ( i_am_slave )
THEN
3773 IF (ierr.LT.0 .AND. id%INFO(1) .GE. 0) id%INFO(1) = ierr
3776 & id%COMM, id%MYID )
3788 IF (rhs_mumps_allocated)
DEALLOCATE(rhs_mumps)
3791 id%KEEP8(26) = keep826_save
3793 120
FORMAT(/
' Local redistrib: data local/sent =',i16,i16)
3794 125
FORMAT(/
' Redistrib: total data local/sent =',i16,i16)
3795 130
FORMAT(//
'****** FACTORIZATION STEP ********'
3797 & /
' Elapsed time to reformat/distribute matrix =',f12.4)
3798 166
FORMAT(
' Max difference from 1 after scaling the entries',
3799 &
' for ONE-NORM (option 7/8) =',d9.2)
3800 170
FORMAT(
' STATISTICS PRIOR NUMERICAL FACTORIZATION ...'/
3801 &
' Size of internal working array S =',i16/
3802 &
' Size of internal working array IS =',i16
3803 &
' Minimum (ICNTL(14)=0) size of S =',i16/
3804 &
' Minimum (ICNTL(14)=0) size of IS =',i16/
3805 &
' Real space for original matrix =',i16/
3806 &
' Integer space for original matrix =',i16/
3807 &
' INFO(3) Real space for factors (estimated) =',i16/
3808 &
' INFO(4) Integer space for factors (estim.) =',i16/
3809 &
' Maximum frontal size (estimated) =',i16)
3810 172
FORMAT(
' GLOBAL STATISTICS PRIOR NUMERICAL FACTORIZATION ...'/
3811 &
' Number of working processes =',i16/
3812 &
' ICNTL(22) Out-of-core option =',i16/
3813 &
' ICNTL(35) BLR activation (eff. choice) =',i16
3814 &
' ICNTL(14) Memory relaxation =',i16/
3815 &
' INFOG(3) Real space for factors (estimated)=',i16/
3816 &
' INFOG(4) Integer space for factors (estim.)=',i16/
3817 &
' Maximum frontal size (estimated) =',i16/
3818 &
' Number of nodes in the tree =',i16/
3819 &
' ICNTL(23) Memory allowed (value on host) =',i16/
3820 &
' Sum over all procs =',i16/
3821 &
' Memory provided by user, sum of LWK_USER =',i16/
3822 &
' Effective threshold for pivoting, CNTL(1) =',d16.4)
3823 173
FORMAT(
' Perform forward during facto, NRHS =',i16)
3824 174
FORMAT(
' KEEP(268) Relaxed pivoting effective value =',i16)
3825 180
FORMAT(/
' Elapsed time for factorization =',f12.4)
3826 185
FORMAT(/
' Elapsed time for (failed) factorization =',f12.4)
3827 187
FORMAT(
' Elapsed time under L0 =',f12.4)
3828 188
FORMAT(
' Elapsed time under L0 (avg/max across MPI) =',
3830 189
FORMAT(/
' Flops under L0 layer =',1pd12.3)
3831 190
FORMAT(/
' Flops under L0 Layer (avg/max across MPI) =',
383399977
FORMAT(
' INFOG(34) Determinant (base 2 exponent) =',i16)
383499978
FORMAT(
' RINFOG(12) Determinant (real part) =',f16.8)
383599980
FORMAT(
' Extra copies due to In-Place stacking =',i16)
383699981
FORMAT(
' INFOG(14) Number of memory compress =',i16)
383799982
FORMAT(
' INFOG(13) Number of delayed pivots =',i16)
383899983
FORMAT(
' Nb of singularities detected by ICNTL(56) =',i16)
383999991
FORMAT(
' Nb of null pivots detected by ICNTL(24) =',i16)
384099992
FORMAT(
' INFOG(28) Estimated deficiency =',i16)
384199984
FORMAT(/
'Leaving factorization with ...'/
3842 &
' RINFOG(2) Operations in node assembly =',1pd10.3/
3843 &
' ------(3) Operations in node elimination =',1pd10.3/
3844 &
' ICNTL (8) Scaling effectively used =',i16/
3845 &
' INFOG (9) Real space for factors =',i16/
3846 &
' INFOG(10) Integer space for factors =',i16/
3847 &
' INFOG(11) Maximum front size =',i16/
3848 &
' INFOG(29) Number of entries in factors =',i16)
384999985
FORMAT(
' INFOG(12) Number of off diagonal pivots =',i16)
385099986
FORMAT(
' INFOG(25) Number of tiny pivots(static) =',i16)
385199987
FORMAT(
' INFOG(12) Number of negative pivots =',i16)
385299988
FORMAT(
' Number of 2x2 pivots in type 1 nodes =',i16)
385399989
FORMAT(
' Number of 2x2 pivots in type 2 nodes =',i16)