26#if ! defined(NO_FDM_DESCBAND)
29#if ! defined(NO_FDM_MAPROW)
48 TYPE (ZMUMPS_STRUC),
TARGET :: id
49 DOUBLE PRECISION,
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) :: K34
72 TYPE(zmumps_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
93 DOUBLE PRECISION :: RATIOK465
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 :: ZMUMPS_LBUFR, ZMUMPS_LBUFR_BYTES
103 INTEGER(8) :: ZMUMPS_LBUFR_BYTES8
104 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: BUFR
106 INTEGER :: ZMUMPS_LBUF, ZMUMPS_LBUF_INT
107 INTEGER(8) :: ZMUMPS_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 DOUBLE PRECISION 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
124 INTEGER(8) :: MAXS_ARG
125 COMPLEX(kind=8),
TARGET :: S_DUMMY_ARG(1)
126 COMPLEX(kind=8),
POINTER,
DIMENSION(:) :: S_PTR_ARG
127 INTEGER NB_THREADS, NOMP
128 DOUBLE PRECISION TIMEAVG, TIMEMAX,
130 DOUBLE PRECISION TMPTIME, TMPFLOP
131 INTEGER , EFF_SIZE_SCHUR
132 DOUBLE PRECISION TIME, TIMEET
133 DOUBLE PRECISION ZERO, ONE, MONE
134 parameter( zero = 0.0d0, one = 1.0d0, mone = -1.0d0)
135 COMPLEX(kind=8) CZERO
136 parameter( czero = (0.0d0, 0.0d0) )
137 INTEGER PERLU, TOTAL_MBYTES, K231, , 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 DOUBLE PRECISION :: ANORMINF, SEUIL, SEUIL_LDLT_NIV2, Thresh_Seuil
149 DOUBLE PRECISION :: 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
182 DOUBLE PRECISION :: TMP_TIME_UPDATE_LRLR3
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
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 COMPLEX(kind=8),
DIMENSION(:),
ALLOCATABLE :: WK
210 DOUBLE PRECISION,
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 DOUBLE PRECISION SCONEERR, SCINFERR
224 INTEGER,
POINTER :: JOB
226 DOUBLE PRECISION,
DIMENSION(:),
POINTER::RINFO, RINFOG
227 DOUBLE PRECISION,
DIMENSION(:),
POINTER:: CNTL
228 INTEGER,
DIMENSION(:),
POINTER:: INFOG, KEEP
229 INTEGER,
DIMENSION(:),
POINTER :: MYIRN_loc, MYJCN_loc
230 COMPLEX(kind=8),
DIMENSION(:),
POINTER :: MYA_loc
231 INTEGER,
TARGET :: DUMMYIRN_loc(1), DUMMYJCN_loc(1)
232 COMPLEX(kind=8),
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 COMPLEX(kind=8),
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.0d0)
284 id%DKEEP(20)=huge(0.0d0)
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.0D0'
493 IF (cntl1.GT.one) cntl1=one
494 IF (cntl1.LT.zero) cntl1=zero
495 IF (keep(50).NE.0.AND.cntl1.GT.0.5d0)
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
524 CALL mpi_bcast(cntl1, 1, mpi_double_precision,
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.LT..OR..GT.
IF (KEEP464COPY0KEEP464COPY1000) THEN
565.LT.
IF (id%KEEP(461)1) THEN
569.EQ..OR..EQ.
IF (id%ICNTL(36)1id%ICNTL(36)3) THEN
570.EQ..OR..LE.
IF (CNTL1ZERO KEEP(468)1) THEN
572.GT..OR..EQ.
ELSE IF ( (KEEP(269)0) (KEEP(269)-2)) THEN
574.EQ.
ELSE IF (KEEP(468)2) THEN
583.LT..OR..GE.
IF (id%ICNTL(36)0 id%ICNTL(36)2) THEN
588.EQ..OR..EQ.
IF (id%ICNTL(37)0id%ICNTL(37)1) THEN
589 KEEP(489) = id%ICNTL(37)
594.GE.
IF (KEEP(79)1) THEN
600.GT..OR..LT.
IF ((id%KEEP(476)100)(id%KEEP(476)1)) THEN
604.GT..OR..LT.
IF ((id%KEEP(477)100)(id%KEEP(477)1)) THEN
608.GT..OR..LT.
IF ((id%KEEP(483)100)(id%KEEP(483)1)) THEN
612.GT..OR..LT.
IF ((id%KEEP(484)100)(id%KEEP(484)1)) THEN
616.GT..OR..LT.
IF ((id%KEEP(480)6)(id%KEEP(480)0)
617.OR..EQ.
& (id%KEEP(480)1)) THEN
621.NE..AND..NE.
IF ((id%KEEP(473)0)(id%KEEP(473)1)) THEN
625.GT..OR..LT.
IF ((id%KEEP(474)3)(id%KEEP(474)0)) THEN
629.LE.
IF (id%KEEP(479)0) THEN
632.NE..AND..EQ.
IF (id%KEEP(474)0id%KEEP(480)0) THEN
635.NE..AND..LT.
IF (id%KEEP(478)0id%KEEP(480)4) THEN
638.GE..OR.
IF (id%KEEP(480)5
639.NE..AND..EQ.
& (id%KEEP(480)0id%KEEP(474)3)) THEN
640.LT.
IF (id%KEEP(475)2) THEN
642 id%KEEP(480) = id%KEEP(480) - 2
643 write(*,*) ' resetting keep(480) to
', id%KEEP(480)
647.EQ.
ENDIF ! id%MYID MASTER
648 CALL MUMPS_PROPINFO( id%ICNTL(1), id%INFO(1),
651.LT.
IF (id%INFO(1)0) GOTO 530
652 CALL MPI_BCAST( KEEP(473), 14, MPI_INTEGER,
653 & MASTER, id%COMM, IERR )
654.NE.
IF (KEEP(486)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.EQ.
IF (id%MYIDMASTER) THEN
663.GT..OR..LT.
IF (KEEP(217)2KEEP(217)0) THEN
667.EQ.
IF (KEEP(214)0) THEN
668.NE.
IF (KEEP(201)0) THEN ! OOC or no factors
673.EQ.
IF (KEEP(486)2) THEN
678 CALL MPI_BCAST( KEEP(214), 1, MPI_INTEGER,
679 & MASTER, id%COMM, IERR )
680.NE.
IF (KEEP(201)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.EQ..AND..EQ.
IF (id%KEEP(252)1 id%MYIDMASTER) THEN
692.EQ.
IF (id%ICNTL(20)1) THEN ! out-of-range => 0
698 IF (LPOK) WRITE(LP,'(a)
')
699 & ' error: sparse rhs is incompatible with forward
',
700 & ' performed during factorization(icntl(32)=1)
'
701.NE.
ELSE IF (id%ICNTL(30)0) THEN ! out-of-range => 1
704 IF (LPOK) WRITE(LP,'(a)
')
705 & ' error: a-1 functionality incompatible with forward
',
706 & ' performed during factorization(icntl(32)=1)
'
707.NE.
ELSE IF (id%ICNTL(9) 1) THEN
710 IF (LPOK) WRITE(LP,'(a)
')
711 & ' error: transpose system(icntl(9).NE.0) not
',
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.0D0 ! real part of the local determinant
795 id%DKEEP(7) = 0.0D0 ! imaginary part of the local determinant
815 CALL MPI_BCAST(KEEP(52), 1, MPI_INTEGER,
816 & MASTER, id%COMM, IERR)
817.GT..AND..LE.
LSCAL = ((KEEP(52) 0) (KEEP(52) 8))
820.EQ.
IF ( id%MYIDMASTER ) THEN
821 CALL MUMPS_SECDEB(TIMEET)
827.EQ.
IF (KEEP(52) 7) THEN
832.EQ.
ELSEIF (KEEP(52) 8) THEN
838 CALL MPI_BCAST(id%DKEEP(3),1,MPI_DOUBLE_PRECISION,MASTER,
841.EQ..OR..EQ..AND.
IF ( ((KEEP(52)7)(KEEP(52)8))
842.NE.
& KEEP(54)0 ) THEN
849.NE.
IF ( id%MYID MASTER ) THEN
850 IF ( associated(id%COLSCA))
851 & DEALLOCATE( id%COLSCA )
852 IF ( associated(id%ROWSCA))
853 & DEALLOCATE( id%ROWSCA )
854 ALLOCATE( id%COLSCA(N), stat=IERR)
859 ALLOCATE( id%ROWSCA(N), stat=IERR)
867 IF(N > BUMAXMN) BUMAXMN = N
869 ALLOCATE (IWK(LIWK),BURP(M),BUCP(N),
870 & BURS(2* (id%NPROCS)),BUCS(2* (id%NPROCS)),
872 IF (allocok > 0) THEN
874 id%INFO(2)=LIWK+M+N+4* (id%NPROCS)
877 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
879.LT.
IF (id%INFO(1)0) GOTO 517
884 ALLOCATE(WK_REAL(LWK_REAL),
886 IF (allocok > 0) THEN
891 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
893.LT.
IF (id%INFO(1)0) GOTO 517
894 CALL ZMUMPS_SIMSCALEABS(
895 & MYIRN_loc(1), MYJCN_loc(1), MYA_loc(1),
897 & M, N, id%NPROCS, id%MYID, id%COMM,
899 & BURS, BUCS, BUREGISTRE,
901 & BUINTSZ, BURESZ, BUJOB,
902 & id%ROWSCA(1), id%COLSCA(1), WK_REAL, LWK_REAL,
906 & SCONEERR, SCINFERR)
907 IF(LIWK < BUINTSZ) THEN
910 ALLOCATE(IWK(LIWK), stat=allocok)
911 IF (allocok > 0) THEN
918 ALLOCATE (WK_REAL(LWK_REAL), stat=allocok)
919 IF (allocok > 0) THEN
924 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
926.LT.
IF (id%INFO(1)0) GOTO 517
929 CALL ZMUMPS_SIMSCALEABS(
930 & MYIRN_loc(1), MYJCN_loc(1), MYA_loc(1),
932 & M, N, id%NPROCS, id%MYID, id%COMM,
934 & BURS, BUCS, BUREGISTRE,
936 & BUINTSZ, BURESZ, BUJOB,
937 & id%ROWSCA(1), id%COLSCA(1), WK_REAL, LWK_REAL,
941 & SCONEERR, SCINFERR)
942 id%DKEEP(4) = SCONEERR
943 id%DKEEP(5) = SCINFERR
945 DEALLOCATE(IWK, WK_REAL,BURP,BUCP,BURS, BUCS)
946.EQ.
ELSE IF ( KEEP(54) 0 ) THEN
950.EQ..OR..EQ.
IF ((KEEP(52)7)(KEEP(52)8)) THEN
954.EQ.
IF (id%MYIDMASTER) THEN
957 COLOUR = MPI_UNDEFINED
959 CALL MPI_COMM_SPLIT( id%COMM, COLOUR, 0,
960 & COMM_FOR_SCALING, IERR )
961.EQ.
IF (id%MYIDMASTER) THEN
964 IF(N > BUMAXMN) BUMAXMN = N
966 ALLOCATE(IWK(LIWK),BURP(1),BUCP(1),
969 IF (allocok > 0) THEN
971 id%INFO(2)=LIWK+1+1+1+1
975 ALLOCATE (WK_REAL(LWK_REAL), stat=allocok)
976 IF (allocok > 0) THEN
981 CALL MPI_COMM_RANK(COMM_FOR_SCALING, SCMYID, IERR)
982 CALL MPI_COMM_SIZE(COMM_FOR_SCALING, SCNPROCS, IERR)
984 CALL ZMUMPS_SIMSCALEABS(
985 & id%IRN(1), id%JCN(1), id%A(1),
987 & M, N, SCNPROCS, SCMYID, COMM_FOR_SCALING,
989 & BURS, BUCS, BUREGISTRE,
991 & BUINTSZ, BURESZ, BUJOB,
992 & id%ROWSCA(1), id%COLSCA(1), WK_REAL, LWK_REAL,
996 & SCONEERR, SCINFERR)
997 IF(LWK_REAL < BURESZ) THEN
1002 CALL ZMUMPS_SIMSCALEABS(id%IRN(1),
1003 & id%JCN(1), id%A(1),
1005 & M, N, SCNPROCS, SCMYID, COMM_FOR_SCALING,
1007 & BURS, BUCS, BUREGISTRE,
1009 & BUINTSZ, BURESZ, BUJOB,
1010 & id%ROWSCA(1), id%COLSCA(1), WK_REAL, LWK_REAL,
1014 & SCONEERR, SCINFERR)
1015 id%DKEEP(4) = SCONEERR
1016 id%DKEEP(5) = SCINFERR
1018 IF (allocated(WK_REAL)) DEALLOCATE(WK_REAL)
1019 IF (allocated(IWK)) DEALLOCATE(IWK)
1020 IF (allocated(BURP)) DEALLOCATE(BURP)
1021 IF (allocated(BUCP)) DEALLOCATE(BUCP)
1022 IF (allocated(BURS)) DEALLOCATE(BURS)
1023 IF (allocated(BUCS)) DEALLOCATE(BUCS)
1026 CALL MPI_BCAST( id%DKEEP(4),2,MPI_DOUBLE_PRECISION,
1027 & MASTER, id%COMM, IERR )
1028.EQ.
IF (id%MYIDMASTER) THEN
1031 CALL MPI_COMM_FREE(COMM_FOR_SCALING, IERR)
1033 CALL MUMPS_PROPINFO(ICNTL(1), id%INFO(1),
1035.LT.
IF (id%INFO(1)0) GOTO 517
1036.EQ.
ELSE IF (id%MYIDMASTER) THEN
1040.GT..AND..LE.
IF (KEEP(52)0 KEEP(52)6) THEN
1045.eq..or.
IF ( KEEP(52) 5
1046.eq.
& KEEP(52) 6 ) THEN
1056 ALLOCATE( WK_REAL( LWK_REAL ), stat = IERR )
1057.GT.
IF ( IERR 0 ) THEN
1059 id%INFO(2) = LWK_REAL
1062 ALLOCATE( WK( LWK ), stat = IERR )
1063.GT.
IF ( IERR 0 ) THEN
1065 CALL MUMPS_SET_IERROR(LWK, id%INFO(2))
1068 CALL ZMUMPS_FAC_A(N, id%KEEP8(28), KEEP(52), id%A(1),
1069 & id%IRN(1), id%JCN(1),
1070 & id%COLSCA(1), id%ROWSCA(1),
1071 & WK, LWK, WK_REAL, LWK_REAL, ICNTL(1), id%INFO(1) )
1072 DEALLOCATE( WK_REAL )
1076 ENDIF ! Scaling distributed matrices or centralized
1077.NE.
IF (KEEP(125)0) THEN
1083.GT..and..GT.
IF ((KEEP(60)0) (KEEP(116)0)) THEN
1085.EQ..OR..EQ..AND.
IF ( ((KEEP(52)7)(KEEP(52)8))
1086.NE.
& KEEP(54)0 ) THEN
1089.GT.
IF (id%SYM_PERM(I)id%N-KEEP(116)) THEN
1094.EQ.
ELSE IF ( id%MYID MASTER) THEN
1097.GT.
IF (id%SYM_PERM(I)id%N-KEEP(116)) THEN
1105.EQ.
IF (id%MYIDMASTER) THEN
1106 CALL MUMPS_SECFIN(TIMEET)
1111.AND..EQ..OR..EQ.
IF (PROKG(KEEP(52)7KEEP(52)8)
1112.AND..GT.
& (K233+K231+K232)0) THEN
1113.GT.
IF (K2320) WRITE(MPG, 166) id%DKEEP(4)
1119.OR..EQ..OR..EQ.
LSCAL = (LSCAL (KEEP(52) -1) KEEP(52) -2)
1120.AND..NE..AND..EQ.
IF (LSCAL KEEP(258)0 id%MYID MASTER) THEN
1122 CALL ZMUMPS_UPDATEDETER_SCALING(id%ROWSCA(I),
1123 & id%DKEEP(6), ! determinant
1124 & KEEP(259)) ! exponent of the determinant
1126.EQ.
IF (KEEP(50) 0) THEN ! unsymmetric
1128 CALL ZMUMPS_UPDATEDETER_SCALING(id%COLSCA(I),
1129 & id%DKEEP(6), ! determinant
1130 & KEEP(259)) ! exponent of the determinant
1139 CALL ZMUMPS_DETER_SQUARE(id%DKEEP(6), KEEP(259))
1143 CALL ZMUMPS_DETER_SCALING_INVERSE(id%DKEEP(6), KEEP(259))
1165 IF (associated(id%root%RHS_CNTR_MASTER_ROOT)) THEN
1166 DEALLOCATE (id%root%RHS_CNTR_MASTER_ROOT)
1167 NULLIFY (id%root%RHS_CNTR_MASTER_ROOT)
1170.EQ..AND..EQ..AND.
IF ( id%MYIDMASTER KEEP(252)1
1171.NE.
& id%NRHS id%KEEP(253) ) THEN
1175 id%INFO(2)=id%KEEP(253)
1179.EQ.
IF (id%KEEP(252) 1) THEN
1180.NE.
IF ( id%MYIDMASTER ) THEN
1181 id%KEEP(254) = N ! Leading dimension
1182 id%KEEP(255) = N*id%KEEP(253) ! Tot size
1183 ALLOCATE(RHS_MUMPS(id%KEEP(255)),stat=IERR)
1186 id%INFO(2)=id%KEEP(255)
1188 & WRITE(LP,*) 'error
while allocating rhs on a slave
'
1191 RHS_MUMPS_ALLOCATED = .TRUE.
1194 id%KEEP(254)=id%LRHS ! Leading dimension
1195 id%KEEP(255)=id%LRHS*(id%KEEP(253)-1)+id%N ! Tot size
1197 RHS_MUMPS_ALLOCATED = .FALSE.
1202 DO K=1, id%KEEP(253)
1204 RHS_MUMPS( id%KEEP(254) * (K-1) + I )
1205 & = RHS_MUMPS( id%KEEP(254) * (K-1) + I )
1213 ALLOCATE(RHS_MUMPS(1),stat=IERR)
1218 & WRITE(LP,*) 'erreur
while allocating rhs on a slave
'
1221 RHS_MUMPS_ALLOCATED = .TRUE.
1223 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
1224 & id%COMM, id%MYID )
1225.lt.
IF ( id%INFO(1)0 ) GOTO 517
1226.EQ.
IF (KEEP(252) 1) THEN
1232 DO I= 1, id%KEEP(253)
1233 CALL MPI_BCAST(RHS_MUMPS((I-1)*id%KEEP(254)+1), N,
1234 & MPI_DOUBLE_COMPLEX, MASTER,id%COMM,IERR)
1239 KEEP(110)=id%ICNTL(24)
1240 CALL MPI_BCAST(KEEP(110), 1, MPI_INTEGER,
1241 & MASTER, id%COMM, IERR)
1243.NE.
IF (KEEP(110)1) KEEP(110)=0
1244.NE.
IF (KEEP(219)0) THEN
1245 CALL ZMUMPS_BUF_MAX_ARRAY_MINSIZE(max(KEEP(108),1),IERR)
1246.NE.
IF (IERR 0) THEN
1251 id%INFO(2) = max(KEEP(108),1)
1267.EQ.
IF (id%MYID MASTER) CNTL3 = id%CNTL(3)
1268 CALL MPI_BCAST(CNTL3, 1, MPI_DOUBLE_PRECISION,
1269 & MASTER, id%COMM, IERR)
1270.EQ.
IF (id%MYID MASTER) CNTL5 = id%CNTL(5)
1271 CALL MPI_BCAST(CNTL5, 1, MPI_DOUBLE_PRECISION,
1272 & MASTER, id%COMM, IERR)
1273.EQ.
IF (id%MYID MASTER) CNTL6 = id%CNTL(6)
1274 CALL MPI_BCAST(CNTL6, 1, MPI_DOUBLE_PRECISION,
1275 & MASTER, id%COMM, IERR)
1276.EQ.
IF (id%MYID MASTER) id%DKEEP(8) = id%CNTL(7)
1277 CALL MPI_BCAST(id%DKEEP(8), 1, MPI_DOUBLE_PRECISION,
1278 & MASTER, id%COMM, IERR)
1279 id%DKEEP(11) = id%DKEEP(8)/id%KEEP(461)
1280 id%DKEEP(12) = id%DKEEP(8)/id%KEEP(462)
1281.EQ.
IF (KEEP(486)0) id%DKEEP(8) = ZERO
1282 COMPUTE_ANORMINF = .FALSE.
1283.NE..AND..LT.
IF ( (KEEP(486) 0) (id%DKEEP(8)ZERO)) THEN
1284 COMPUTE_ANORMINF = .TRUE.
1286.NE.
IF (KEEP(19)0) THEN
1288 COMPUTE_ANORMINF = .TRUE.
1290.NE.
IF (KEEP(110)0) THEN
1292 COMPUTE_ANORMINF = .TRUE.
1294.LT.
IF (id%DKEEP(8)ZERO) THEN
1296 IF (COMPUTE_ANORMINF) THEN
1298 CALL ZMUMPS_ANORMINF( id , ANORMINF, LSCAL, EFF_SIZE_SCHUR )
1303 id%DKEEP(8) = abs(id%DKEEP(8))*ANORMINF
1305.GT..AND..GT.
IF ((KEEP(60)0)KEEP(116)0) ANORMINF=ZERO
1311 IF (COMPUTE_ANORMINF) THEN
1313.GT.
IF (KEEP(60)0) EFF_SIZE_SCHUR = KEEP(116)
1314 CALL ZMUMPS_ANORMINF( id , ANORMINF, LSCAL, EFF_SIZE_SCHUR )
1319.NE..OR..NE.
IF ((KEEP(19)0)(KEEP(110)0)) THEN
1321.NE.
IF (KEEP(19)0) THEN
1322 WRITE(MPG,'(a,1pd16.4)
')
1323 & ' cntl(3)
for null pivot rows/singularities =
',CNTL3
1325 WRITE(MPG,'(a,1pd16.4)
')
1326 & ' cntl(3)
for null pivot row detection =
',CNTL3
1330.EQ.
IF (KEEP(19)0) THEN
1341.LT.
IF (CNTL3 ZERO) THEN
1342 id%DKEEP(9) = abs(CNTL(3))
1343.GT.
ELSE IF (CNTL3 ZERO) THEN
1344 id%DKEEP(9) = CNTL3*ANORMINF
1345.EQ.
ELSE ! (CNTL(3) ZERO) THEN
1348 WRITE(MPG, '(a,i16)
')
1349 & ' icntl(56) rank revealing effective
value =
',KEEP(19)
1350 WRITE(MPG,'(a,1pd16.4)
')
1351 & ' ...threshold
for singularities on
the root =
',id%DKEEP(9)
1357 Thresh_Seuil = id%DKEEP(13)
1358.LT.
IF (id%DKEEP(13)1) Thresh_Seuil = 10
1359 SEUIL = id%DKEEP(9)*Thresh_Seuil
1360 IF (PROKG) WRITE(MPG,'(a,1pd16.4)
')
1361 & ' ...threshold
for postponing =
',SEUIL
1363 SEUIL_LDLT_NIV2 = SEUIL
1367.EQ.
IF (KEEP(110)0) THEN
1373 id%DKEEP(1) = -1.0D0
1377.NE.
IF (KEEP(19)0) THEN
1382.LE..OR..GT.
IF ((id%DKEEP(10)0)(id%DKEEP(10)1)) THEN
1384 id%DKEEP(1) = id%DKEEP(9)*1D-1
1386 id%DKEEP(1) = id%DKEEP(9)*id%DKEEP(10)
1392.LT.
IF (CNTL3 ZERO) THEN
1393 id%DKEEP(1) = abs(CNTL(3))
1394.GT.
ELSE IF (CNTL3 ZERO) THEN
1395 id%DKEEP(1) = CNTL3*ANORMINF
1396.EQ.
ELSE ! (CNTL(3) ZERO) THEN
1398 CALL MUMPS_NPIV_CRITICAL_PATH(
1399 & N, KEEP(28), id%STEP(1), id%FRERE_STEPS(1), id%FILS(1),
1400 & id%NA(1), id%LNA, id%NE_STEPS(1), NPIV_CRITICAL_PATH )
1401 id%DKEEP(1) = sqrt(dble(NPIV_CRITICAL_PATH))*EPS*ANORMINF
1403 ENDIF ! fin rank revealing
1404.NE..AND.
IF ((KEEP(110)0)(PROKG)) THEN
1405 WRITE(MPG, '(a,i16)
')
1406 & ' icntl(24) null pivot rows detection =
',KEEP(110)
1407 WRITE(MPG,'(a,1pd16.4)
')
1408 & ' ...zero pivot detection threshold =
',id%DKEEP(1)
1410.GT.
IF (CNTL5ZERO) THEN
1411 id%DKEEP(2) = CNTL5 * ANORMINF
1412 IF (PROKG) WRITE(MPG,'(a,1pd10.3)
')
1413 & ' ...fixation
for null pivots =
',id%DKEEP(2)
1415 IF (PROKG) WRITE(MPG,*) '...infinite fixation
'
1416.EQ.
IF (id%KEEP(50)0) THEN
1418 ! the user let us choose a fixation. set in NEGATIVE
1419 ! to detect during facto when to set row to zero !
1420 id%DKEEP(2) = -max(1.0D10*ANORMINF,
1421 & sqrt(huge(ANORMINF))/1.0D8)
1427 ENDIF ! fin null pivot detection.
1429.NE.
IF (KEEP(53)0) THEN
1430 ID_ROOT =MUMPS_PROCNODE(id%PROCNODE_STEPS(id%STEP(KEEP(20))),
1432.NE.
IF ( KEEP( 46 ) 1 ) THEN
1433 ID_ROOT = ID_ROOT + 1
1439 IF ( associated( id%PIVNUL_LIST) ) DEALLOCATE(id%PIVNUL_LIST)
1440.EQ.
IF(KEEP(110) 1) THEN
1443.NE..AND.
IF (KEEP(19)0
1444.EQ..OR..EQ.
& (ID_ROOTid%MYID id%MYIDMASTER)) THEN
1447 ALLOCATE( id%PIVNUL_LIST(LPN_LIST),stat = IERR )
1448.GT.
IF ( IERR 0 ) THEN
1452 id%PIVNUL_LIST(1:LPN_LIST) = 0
1455 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
1456 & id%COMM, id%MYID )
1457.lt.
IF ( id%INFO(1)0 ) GOTO 517
1463.EQ..AND..EQ.
IF ((KEEP(19)0)(KEEP(110)0)) THEN
1464.EQ.
IF (id%MYID MASTER) CNTL4 = id%CNTL(4)
1465 CALL MPI_BCAST( CNTL4, 1, MPI_DOUBLE_PRECISION,
1466 & MASTER, id%COMM, IERR )
1468.GE.
IF ( CNTL4 ZERO ) THEN
1470.EQ.
IF ( CNTL4 ZERO ) THEN
1472.EQ.
IF(ANORMINF ZERO) THEN
1474.GT.
IF (KEEP(60)0) EFF_SIZE_SCHUR = KEEP(116)
1475 CALL ZMUMPS_ANORMINF( id , ANORMINF, LSCAL,
1478 SEUIL = sqrt(EPS) * ANORMINF
1482 SEUIL_LDLT_NIV2 = SEUIL
1508 CALL ZMUMPS_SET_BLRSTRAT_AND_MAXS_K8 (
1509 & MAXS_BASE8, MAXS_BASE_RELAXED8,
1511 & id%KEEP(1), id%KEEP8(1))
1513 MAXS = MAXS_BASE_RELAXED8
1514 IF (WK_USER_PROVIDED) THEN
1518 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
1519 & id%COMM, id%MYID )
1520.LT.
IF (id%INFO(1) 0) THEN
1524 id%KEEP8(75) = huge(id%KEEP8(75))
1525 id%KEEP8(76) = huge(id%KEEP8(76))
1526 IF (I_AM_SLAVE) THEN
1528.NE.
IF (id%KEEP8(4) 0_8) THEN
1530.NOT.
IF ( WK_USER_PROVIDED ) THEN
1532 CALL ZMUMPS_MEM_ALLOWED_SET_MAXS (
1534 & BLR_STRAT, id%KEEP(201), MAXS_BASE_RELAXED8,
1535 & id%KEEP(1), id%KEEP8(1), id%MYID, id%N, id%NELT,
1536 & id%NA(1), id%LNA, id%NSLAVES,
1537 & KEEP464COPY, KEEP465COPY,
1538 & id%INFO(1), id%INFO(2)
1539 & , id%I8_L0_OMP(1,1), size(id%I8_L0_OMP,1),
1540 & size(id%I8_L0_OMP,2)
1545 CALL ZMUMPS_MEM_ALLOWED_SET_K75 (
1547 & .FALSE., ! UNDER_L0_OMP
1548 & N, id%NELT, id%NA(1), id%LNA, id%NSLAVES,
1549 & BLR_STRAT, id%KEEP(201),
1550 & id%KEEP, id%KEEP8, id%INFO(1), id%INFO(2)
1551 & , id%I8_L0_OMP(1,1), size(id%I8_L0_OMP,1),
1552 & size(id%I8_L0_OMP,2)
1556 CALL ZMUMPS_MEM_ALLOWED_SET_K75 (
1558 & .FALSE., ! UNDER_L0_OMP
1559 & N, id%NELT, id%NA(1), id%LNA, id%NSLAVES,
1560 & BLR_STRAT, id%KEEP(201),
1561 & id%KEEP, id%KEEP8, id%INFO(1), id%INFO(2)
1562 & , id%I8_L0_OMP(1,1), size(id%I8_L0_OMP,1),
1563 & size(id%I8_L0_OMP,2)
1566.GT.
IF (KEEP(400) 0) THEN
1572 id%KEEP8(76) = id%KEEP8(75)
1573 CALL ZMUMPS_MEM_ALLOWED_SET_K75 (
1576 & .TRUE., ! UNDER_L0_OMP
1577 & id%N, id%NELT, id%NA(1), id%LNA, id%NSLAVES,
1578 & BLR_STRAT, id%KEEP(201),
1579 & id%KEEP, id%KEEP8, id%INFO(1), id%INFO(2)
1580 & , id%I8_L0_OMP(1,1), size(id%I8_L0_OMP,1),
1581 & size(id%I8_L0_OMP,2)
1590 ENDIF ! I_AM_SLAVE THEN
1592 IF (I_AM_SLAVE) THEN
1593.GT..AND..EQ.
IF ( (KEEP(400)0) (KEEP(406)2) ) THEN
1596 CALL ZMUMPS_L0_COMPUTE_PEAK_ALLOWED(
1598 & id%NELT, id%NA(1), id%LNA, id%NSLAVES,
1599 & BLR_STRAT, id%KEEP(201),
1600 & id%KEEP(1), id%KEEP8(1), id%INFO(1), id%INFO(2)
1601 & , id%I8_L0_OMP(1,1), size(id%I8_L0_OMP,1),
1602 & size(id%I8_L0_OMP,2)
1607 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
1608 & id%COMM, id%MYID )
1609.LT.
IF (id%INFO(1) 0) THEN
1612 CALL MUMPS_SETI8TOI4(MAXS, id%INFO(39))
1613 CALL ZMUMPS_AVGMAX_STAT8(PROKG, MPG, MAXS, id%NSLAVES,
1615 & id%COMM, " Effective size of S (based on INFO(39))= ")
1617 IF ( I_AM_SLAVE ) THEN
1621 CALL ZMUMPS_LOAD_SET_INICOST( dble(id%COST_SUBTREES),
1622 & KEEP(64), id%DKEEP(15), KEEP(375), MAXS )
1624 MEMORY_MD_ARG = min(int(PERLU,8) * ( MAXS_BASE8 / 100_8 + 1_8 ),
1628 & max(0_8, MAXS-MAXS_BASE8))
1629 CALL ZMUMPS_LOAD_INIT( id, MEMORY_MD_ARG, MAXS )
1635 CALL ZMUMPS_CLEAN_OOC_DATA(id, IERR)
1641.GT.
IF (KEEP(201) 0) THEN
1645.EQ.
IF (KEEP(201)1 !PANEL Version
1646.AND..EQ.
& KEEP(50)0 ! Unsymmetric
1647.AND..NE.
& KEEP(251)2 ! Store L to disk
1649 id%OOC_NB_FILE_TYPE=2 ! declared in MUMPS_OOC_COMMON
1651 id%OOC_NB_FILE_TYPE=1 ! declared in MUMPS_OOC_COMMON
1656.GT.
IF (KEEP(205) 0) THEN
1657 KEEP(100) = KEEP(205)
1659.EQ.
IF (KEEP(201)1) THEN ! PANEL version
1660 I8TMP = int(id%OOC_NB_FILE_TYPE,8) *
1661 & 2_8 * int(KEEP(226),8)
1663 I8TMP = 2_8 * id%KEEP8(119)
1665 I8TMP = I8TMP + int(max(KEEP(12),0),8) *
1669 I8TMP = min(I8TMP, 12000000_8)
1670 KEEP(100)=int(I8TMP)
1672.EQ.
IF (KEEP(201)1) THEN
1674 IF ( KEEP(99) < 3 ) THEN
1675 KEEP(99) = KEEP(99) + 3
1682.LT.
IF (KEEP(99) 3) KEEP(100)=0
1683.GT.
IF((dble(KEEP(100))*dble(KEEP(35))/dble(2))
1684 & (dble(1999999999)))THEN
1686 WRITE(MPG,*)id%MYID,': warning: dim_buf_io might be
1687 & too big
for filesystem
'
1690 ALLOCATE (id%OOC_INODE_SEQUENCE(KEEP(28),
1691 & id%OOC_NB_FILE_TYPE),
1693.GT.
IF ( IERR 0 ) THEN
1695 id%INFO(2) = id%OOC_NB_FILE_TYPE*KEEP(28)
1696 NULLIFY(id%OOC_INODE_SEQUENCE)
1699 ALLOCATE (id%OOC_TOTAL_NB_NODES(id%OOC_NB_FILE_TYPE),
1701.GT.
IF ( IERR 0 ) THEN
1703 id%INFO(2) = id%OOC_NB_FILE_TYPE
1704 NULLIFY(id%OOC_TOTAL_NB_NODES)
1707 ALLOCATE (id%OOC_SIZE_OF_BLOCK(KEEP(28),
1708 & id%OOC_NB_FILE_TYPE),
1710.GT.
IF ( IERR 0 ) THEN
1712 id%INFO(2) = id%OOC_NB_FILE_TYPE*KEEP(28)
1713 NULLIFY(id%OOC_SIZE_OF_BLOCK)
1716 ALLOCATE (id%OOC_VADDR(KEEP(28),id%OOC_NB_FILE_TYPE),
1718.GT.
IF ( IERR 0 ) THEN
1720 id%INFO(2) = id%OOC_NB_FILE_TYPE*KEEP(28)
1721 NULLIFY(id%OOC_VADDR)
1726 112 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
1727 & id%COMM, id%MYID )
1728 IF (id%INFO(1) < 0) THEN
1732 IF (I_AM_SLAVE) THEN
1733.GT.
IF (KEEP(201) 0) THEN
1734.EQ..OR..EQ.
IF ((KEEP(201)1)(KEEP(201)2)) THEN
1735 CALL ZMUMPS_OOC_INIT_FACTO(id,MAXS)
1737 WRITE(*,*) "Internal error in ZMUMPS_FAC_DRIVER"
1740.LT.
IF(id%INFO(1)0)THEN
1747 CALL ZMUMPS_LOAD_UPDATE(0,.FALSE.,dble(id%COST_SUBTREES),
1748 & id%KEEP(1),id%KEEP8(1))
1749.LT.
IF (id%INFO(1)0) GOTO 111
1754.EQ.
EARLYT3ROOTINS = KEEP(200) 0
1755.OR..LT..AND..EQ.
& ( KEEP(200) 0 KEEP(400) 0 )
1756#if defined (LARGEMATRICES)
1757.ne.
IF ( id%MYID MASTER ) THEN
1759.NOT.
IF (WK_USER_PROVIDED) THEN
1760 IF ( EARLYT3ROOTINS ) THEN
1762 ALLOCATE (id%S(MAXS),stat=IERR)
1764.GT.
IF ( IERR 0 ) THEN
1766 CALL MUMPS_SET_IERROR(MAXS, id%INFO(2))
1775 id%S => id%WK_USER(1:id%KEEP8(24))
1778#if defined (LARGEMATRICES)
1782 111 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
1783 & id%COMM, id%MYID )
1784.LT.
IF ( id%INFO(1)0 ) GOTO 514
1789 NB_ACTIVE_FRONTS_ESTIM = 3
1791!$ NB_THREADS = OMP_GET_MAX_THREADS()
1793 NB_ACTIVE_FRONTS_ESTIM = 3*NB_THREADS
1794 IF (I_AM_SLAVE) THEN
1796 CALL MUMPS_FDM_INIT('a
',NB_ACTIVE_FRONTS_ESTIM, id%INFO)
1798.EQ.
IF ( (KEEP(486)2)
1799.OR..NE..AND..GT.
& ((KEEP(489)0)(KEEP(400)1))
1804 NB_FRONTS_F_ESTIM = KEEP(470)
1806.NE.
IF (KEEP(489)0) THEN
1810 NB_FRONTS_F_ESTIM = 2*NB_ACTIVE_FRONTS_ESTIM
1812 NB_FRONTS_F_ESTIM = NB_ACTIVE_FRONTS_ESTIM
1815 CALL MUMPS_FDM_INIT('f
',NB_FRONTS_F_ESTIM, id%INFO )
1816.LT.
IF (id%INFO(1) 0 ) GOTO 114
1817#if ! defined(NO_FDM_DESCBAND)
1819 CALL MUMPS_FDBD_INIT( NB_ACTIVE_FRONTS_ESTIM, id%INFO )
1821#if ! defined(NO_FDM_MAPROW)
1823 CALL MUMPS_FMRD_INIT( NB_ACTIVE_FRONTS_ESTIM, id%INFO )
1825 CALL ZMUMPS_BLR_INIT_MODULE( NB_FRONTS_F_ESTIM, id%INFO )
1828 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
1829 & id%COMM, id%MYID )
1831.LT.
IF ( id%INFO(1)0 ) GOTO 500
1840.eq.
IF ( KEEP(55) 0 ) THEN
1846 IF (associated( id%DBLARR)) THEN
1847 DEALLOCATE(id%DBLARR)
1850.and..ne.
IF ( I_AM_SLAVE id%KEEP8(26) 0_8 ) THEN
1851 ALLOCATE( id%DBLARR( id%KEEP8(26) ), stat = IERR )
1853 ALLOCATE( id%DBLARR( 1 ), stat =IERR )
1855.NE.
IF ( IERR 0 ) THEN
1857 WRITE(LP,*) id%MYID,
1858 & ': allocation error
for dblarr(
',id%KEEP8(26),')
'
1861 CALL MUMPS_SET_IERROR(id%KEEP8(26), id%INFO(2))
1869 IF ( associated( id%INTARR ) ) THEN
1870 DEALLOCATE( id%INTARR )
1871 NULLIFY( id%INTARR )
1873.and..ne.
IF ( I_AM_SLAVE id%KEEP8(27) 0_8 ) THEN
1874 ALLOCATE( id%INTARR( id%KEEP8(27) ), stat = allocok )
1875.GT.
IF ( allocok 0 ) THEN
1877 CALL MUMPS_SET_IERROR(id%KEEP8(27), id%INFO(2))
1882 ALLOCATE( id%INTARR(1),stat=allocok )
1883.GT.
IF ( allocok 0 ) THEN
1895 IF (associated( id%DBLARR)) THEN
1896 DEALLOCATE(id%DBLARR)
1899 IF ( I_AM_SLAVE ) THEN
1900.eq.
IF ( id%MYID_NODES MASTER
1901.AND..eq.
& KEEP(46) 1
1902.AND..eq.
& KEEP(52) 0 ) THEN
1906 id%DBLARR => id%A_ELT
1911.ne.
IF ( id%KEEP8(26) 0_8 ) THEN
1912 ALLOCATE( id%DBLARR( id%KEEP8(26) ), stat = allocok )
1913.GT.
IF ( allocok 0 ) THEN
1915 CALL MUMPS_SET_IERROR(id%KEEP8(26), id%INFO(2))
1920 ALLOCATE( id%DBLARR(1), stat = allocok )
1921.GT.
IF ( allocok 0 ) THEN
1930 ALLOCATE( id%DBLARR(1), stat = allocok )
1931.GT.
IF ( allocok 0 ) THEN
1943.NE..AND.
IF ( KEEP(38)0 I_AM_SLAVE ) THEN
1944 CALL ZMUMPS_INIT_ROOT_FAC( id%N,
1945 & id%root, id%FILS(1), KEEP(38), id%KEEP(1), id%INFO(1) )
1953 CALL MUMPS_PROPINFO( id%ICNTL(1), id%INFO(1),
1954 & id%COMM, id%MYID )
1955.LT.
IF ( id%INFO(1)0 ) GOTO 500
1966.EQ.
IF (id%MYIDMASTER) CALL MUMPS_SECDEB(TIME)
1973 IF (EARLYT3ROOTINS) THEN
1977 S_PTR_ARG => S_DUMMY_ARG
1981.eq.
IF ( KEEP( 55 ) 0 ) THEN
2007.AND..NE..AND.
IF (EARLYT3ROOTINS KEEP(38)0
2008.EQ..AND.
& KEEP(60) 0 I_AM_SLAVE) THEN
2009 LWK = int(numroc( id%root%ROOT_SIZE, id%root%MBLOCK,
2010 & id%root%MYROW, 0, id%root%NPROW ),8)
2011 LWK = max( 1_8, LWK )
2013 & int(numroc( id%root%ROOT_SIZE, id%root%NBLOCK,
2014 & id%root%MYCOL, 0, id%root%NPCOL ),8)
2015 LWK = max( 1_8, LWK )
2022.LT.
IF (MAXS int(LWK,8)) THEN
2024 CALL MUMPS_SET_IERROR(LWK, id%INFO(2))
2026 CALL MUMPS_PROPINFO( id%ICNTL(1), id%INFO(1),
2027 & id%COMM, id%MYID )
2028.LT.
IF ( id%INFO(1)0 ) GOTO 500
2030.eq.
IF ( KEEP(54) 0 ) THEN
2036.eq.
IF ( id%MYID MASTER ) THEN
2037 ALLOCATE(IWK(id%N), stat=allocok)
2038.NE.
IF ( allocok 0 ) THEN
2042#if defined(LARGEMATRICES)
2043 ALLOCATE (WK(LWK),stat=IERR)
2044.GT.
IF ( IERR 0 ) THEN
2046 CALL MUMPS_SET_IERROR(LWK, id%INFO(2))
2047 write(6,*) ' pb1 alloc largemat
'
2051 CALL MUMPS_PROPINFO( id%ICNTL(1), id%INFO(1),
2052 & id%COMM, id%MYID )
2053.LT.
IF ( id%INFO(1)0 ) GOTO 500
2054.eq.
IF ( id%MYID MASTER ) THEN
2063.not.
IF ( associated( id%INTARR ) ) THEN
2064 ALLOCATE( id%INTARR( 1 ),stat=IERR)
2065.GT.
IF ( IERR 0 ) THEN
2069 write(6,*) ' pb2 alloc intarr
'
2073 NBRECORDS = KEEP(39)
2074.LT.
IF (id%KEEP8(28) int(NBRECORDS,8)) THEN
2075 NBRECORDS = int(id%KEEP8(28))
2077#if defined(LARGEMATRICES)
2078 CALL ZMUMPS_FACTO_SEND_ARROWHEADS(id%N, id%KEEP8(28), id%A(1),
2079 & id%IRN(1), id%JCN(1), id%SYM_PERM(1),
2080 & LSCAL, id%COLSCA(1), id%ROWSCA(1),
2081 & id%MYID, id%NSLAVES, id%PROCNODE_STEPS(1),
2083 & LP, id%COMM, id%root, KEEP,id%KEEP8,
2084 & id%FILS(1), IWK(1), ! workspace of size N
2086 & id%INTARR(1), id%KEEP8(27), id%DBLARR(1), id%KEEP8(26),
2087 & id%PTRAR(1), id%PTRAR(id%N+1),
2088 & id%FRERE_STEPS(1), id%STEP(1), WK(1), LWK,
2089 & id%ISTEP_TO_INIV2(1), id%I_AM_CAND(1),
2090 & id%CANDIDATES(1,1))
2098.NOT.
IF (WK_USER_PROVIDED) THEN
2099 IF (EARLYT3ROOTINS) THEN
2100 ALLOCATE (id%S(MAXS),stat=IERR)
2102.GT.
IF ( IERR 0 ) THEN
2107 write(6,*) ' pb2 alloc largemat
',MAXS
2113 id%S => id%WK_USER(1:id%KEEP8(24))
2115 IF (EARLYT3ROOTINS) THEN
2116 id%S(MAXS-LWK+1_8:MAXS) = WK(1_8:LWK)
2120 CALL ZMUMPS_FACTO_SEND_ARROWHEADS(id%N, id%KEEP8(28), id%A(1),
2121 & id%IRN(1), id%JCN(1), id%SYM_PERM(1),
2122 & LSCAL, id%COLSCA(1), id%ROWSCA(1),
2123 & id%MYID, id%NSLAVES, id%PROCNODE_STEPS(1),
2125 & LP, id%COMM, id%root, KEEP(1),id%KEEP8(1),
2126 & id%FILS(1), IWK(1),
2128 & id%INTARR(1), id%KEEP8(27), id%DBLARR(1), id%KEEP8(26),
2129 & id%PTRAR(1), id%PTRAR(id%N+1),
2130 & id%FRERE_STEPS(1), id%STEP(1), S_PTR_ARG(1), MAXS_ARG,
2131 & id%ISTEP_TO_INIV2(1), id%I_AM_CAND(1),
2132 & id%CANDIDATES(1,1) )
2136 NBRECORDS = KEEP(39)
2137.LT.
IF (id%KEEP8(28) int(NBRECORDS,8)) THEN
2138 NBRECORDS = int(id%KEEP8(28))
2140 CALL ZMUMPS_FACTO_RECV_ARROWHD2( id%N,
2141 & id%DBLARR(1), id%KEEP8(26),
2142 & id%INTARR(1), id%KEEP8(27),
2145 & KEEP( 1 ), id%KEEP8(1), id%MYID, id%COMM,
2148 & S_PTR_ARG(1), MAXS_ARG,
2150 & id%PROCNODE_STEPS(1), id%NSLAVES,
2151 & id%SYM_PERM(1), id%FRERE_STEPS(1), id%STEP(1),
2152 & id%INFO(1), id%INFO(2) )
2160.EQ.
IF (id%MYIDMASTER) THEN
2161 CALL MUMPS_SECDEB(TIME)
2163 IF ( I_AM_SLAVE ) THEN
2171 CALL MPI_ALLREDUCE(id%KEEP8(29), NZ_locMAX8, 1, MPI_INTEGER8,
2172 & MPI_MAX, id%COMM_NODES, IERR)
2173 NBRECORDS = KEEP(39)
2174.LT.
IF (NZ_locMAX8 int(NBRECORDS,8)) THEN
2175 NBRECORDS = int(NZ_locMAX8)
2177 CALL ZMUMPS_REDISTRIBUTION( id%N,
2180 & id%DBLARR(1), id%KEEP8(26), id%INTARR(1),
2181 & id%KEEP8(27), id%PTRAR(1), id%PTRAR(id%N+1),
2182 & KEEP(1), id%KEEP8(1), id%MYID_NODES,
2183 & id%COMM_NODES, NBRECORDS,
2184 & S_PTR_ARG(1), MAXS_ARG, id%root, id%PROCNODE_STEPS(1),
2185 & id%NSLAVES, id%SYM_PERM(1), id%STEP(1),
2186 & id%ICNTL(1), id%INFO(1), NSEND8, NLOCAL8,
2187 & id%ISTEP_TO_INIV2(1),
2188 & id%CANDIDATES(1,1) )
2189.EQ..OR..EQ.
IF ( ( KEEP(52)7 ) (KEEP(52)8) ) THEN
2202 IF ( id%MYID > 0 ) THEN
2203 IF (associated(id%ROWSCA)) THEN
2204 DEALLOCATE(id%ROWSCA)
2207 IF (associated(id%COLSCA)) THEN
2208 DEALLOCATE(id%COLSCA)
2213#if defined(LARGEMATRICES)
2217 IF (associated(id%IRN_loc)) THEN
2218 DEALLOCATE(id%IRN_loc)
2221 IF (associated(id%JCN_loc)) THEN
2222 DEALLOCATE(id%JCN_loc)
2225 IF (associated(id%A_loc)) THEN
2226 DEALLOCATE(id%A_loc)
2229 write(6,*) ' warning :
',
2230 & ' id%A_loc, irn_loc, jcn_loc deallocated
2233 WRITE(mp,120) nlocal8, nsend8
2236 IF ( keep(46) .eq. 0 .AND. id%MYID.eq.master )
THEN
2247 CALL mpi_reduce( nsend8, nsend_tot8, 1, mpi_integer8,
2248 & mpi_sum, master, id%COMM, ierr )
2249 CALL mpi_reduce( nlocal8, nlocal_tot8, 1, mpi_integer8,
2250 & mpi_sum, master, id%COMM, ierr )
2252 WRITE(mpg,125) nlocal_tot8, nsend_tot8
2259 & id%COMM, id%MYID )
2260 IF ( id%INFO( 1 ) .LT. 0 )
GOTO 500
2269 IF ( id%MYID.eq.master)
2282 & id%NSLAVES, id%PTRAR(1),
2283 & id%PTRAR(id%NELT+2),
2284 & id%INTARR(1), id%DBLARR(1), id%KEEP8(27), id%KEEP8(26),
2285 & id%KEEP(1), id%KEEP8(1), maxelt_size,
2286 & id%FRTPTR(1), id%FRTELT(1),
2287 & s_ptr_arg(1), maxs_arg, id%FILS(1),
2293 & id%COMM, id%MYID )
2294 IF ( id%INFO( 1 ) .LT. 0 )
GOTO 500
2299 IF ( id%MYID.EQ.master)
THEN
2302 IF (prokg)
WRITE(mpg,160) id%DKEEP(93)
2304 IF ( keep(400) .GT. 0 )
THEN
2310 IF ( nomp .NE. keep(400) )
THEN
2312 id%INFO(2)=keep(400)
2313 IF (lpok)
WRITE(lp,
'(A,A,I5,A,I5)')
2314 &
" FAILURE DETECTED IN FACTORIZATION: #threads for KEEP(401)",
2315 &
" changed from",keep(400),
" at analysis to", nomp
2319 & id%COMM, id%MYID )
2320 IF ( id%INFO( 1 ) .LT. 0 )
GOTO 500
2330 IF ( i_am_slave )
THEN
2347 IF (keep(486).NE.0)
THEN
2348 zmumps_lbufr_bytes8 = int(keep( 380 ),8) * int(keep( 35 ),8)
2350 zmumps_lbufr_bytes8 = int(keep( 44 ),8) * int(keep( 35 ),8)
2355 zmumps_lbufr_bytes8 =
max( zmumps_lbufr_bytes8,
2357 IF ((keep(50).NE.0).AND.(keep(489).GT.0).AND.
2358 & (id%NSLAVES.GE.2))
THEN
2363 ratiok465 = dble(keep465copy)/dble(1000)
2364 zmumps_lbufr_bytes8 =
max(zmumps_lbufr_bytes8,
2368 & int(keep(2)+1,8)*int(keep(142),8)*int(keep(35),8)
2390 IF (keep(48).EQ.5)
THEN
2396 zmumps_lbufr_bytes8 = zmumps_lbufr_bytes8
2397 & + int( 2.0d0 * dble(
max(perlu,min_perlu))*
2398 & dble(zmumps_lbufr_bytes8)/100d0, 8)
2399 zmumps_lbufr_bytes8 =
min(zmumps_lbufr_bytes8,
2400 & int(huge(i4)-100,8))
2401 zmumps_lbufr_bytes = int( zmumps_lbufr_bytes8 )
2402 IF (keep(48)==5)
THEN
2407 id%KEEP8(21) = id%KEEP8(22) +
2408 & int( dble(
max(perlu,min_perlu))*
2409 & dble(id%KEEP8(22))/100d0,8)
2419 IF (keep(486).NE.0)
THEN
2420 zmumps_lbuf8 = int( dble(keep(213)) / 100.0d0 *
2421 & dble(keep(379)) * dble(keep(35)), 8 )
2423 zmumps_lbuf8 = int( dble(keep(213)) / 100.0d0 *
2424 & dble(keep(43)) * dble(keep(35)), 8 )
2426 zmumps_lbuf8 =
max( zmumps_lbuf8, 100000_8 )
2427 zmumps_lbuf8 = zmumps_lbuf8
2428 & + int( 2.0d0 * dble(
max(perlu,min_perlu))*
2429 & dble(zmumps_lbuf8)/100d0, 8)
2431 zmumps_lbuf8 =
min(zmumps_lbuf8
2436 zmumps_lbuf8 =
max(zmumps_lbuf8, zmumps_lbufr_bytes8+3*keep(34))
2437 zmumps_lbuf = int(zmumps_lbuf8)
2438 IF(id%KEEP(48).EQ.4)
THEN
2439 zmumps_lbufr_bytes=zmumps_lbufr_bytes*5
2440 zmumps_lbuf=zmumps_lbuf*5
2452 zmumps_lbuf_int = ( keep(56) + id%NSLAVES * id%NSLAVES ) * 5
2454 IF ( keep( 38 ) .NE. 0 )
THEN
2457 kkkk = mumps_procnode( id%PROCNODE_STEPS(id%STEP(keep(38))),
2459 IF ( kkkk .EQ. id%MYID_NODES )
THEN
2460 zmumps_lbuf_int = zmumps_lbuf_int + 4 * keep(34) *
2461 & ( id%NSLAVES + id%NE_STEPS(id%STEP(keep(38)))
2462 & +
min(keep(56), id%NE_STEPS(id%STEP(keep(38)))) * id%NSLAVES
2470 WRITE( mp, 9999 ) zmumps_lbufr_bytes,
2471 & zmumps_lbuf, zmumps_lbuf_int
2473 9999
FORMAT( /,
' Allocated buffers',/,
' ------------------',/,
2474 &
' Size of reception buffer in bytes ...... = ', i10,
2476 &
' Size of async. emission buffer (bytes).. = ', i10,/,
2477 &
' Small emission buffer (bytes) .......... = ', i10)
2483 IF ( ierr .NE. 0 )
THEN
2486 id%INFO(2)= (zmumps_lbuf_int+keep(34)-1)/keep(34)
2488 WRITE(lp,*) id%MYID,
2489 &
':Allocation error in ZMUMPS_BUF_ALLOC_SMALL_BUF'
2499 zmumps_lbufr = (zmumps_lbufr_bytes+keep(34)-1)/keep(34)
2500 ALLOCATE( bufr( zmumps_lbufr ),stat=ierr )
2501 IF ( ierr .NE. 0 )
THEN
2503 id%INFO(2) = zmumps_lbufr
2506 &
': Allocation error for BUFR(', zmumps_lbufr,
2507 &
') on MPI process',id%MYID
2518 IF (keep(201).GT.0)
THEN
2521 maxis_estim = keep(225)
2524 maxis_estim = keep(15)
2526 maxis =
max( 1, int(
min( int(huge(maxis),8),
2527 & int(maxis_estim,8) + 3_8 *
max(int(perlu,8),10_8) *
2528 & ( int(maxis_estim,8) / 100_8 + 1_8 )
2539 ALLOCATE( id%PTLUST_S( id%KEEP(28) ), stat = ierr )
2540 IF ( ierr .NE. 0 )
THEN
2542 id%INFO(2)=id%KEEP(28)
2544 WRITE(lp,*) id%MYID,
2545 &
': Allocation error for id%PTLUST_S(', id%KEEP(28),
')'
2547 NULLIFY(id%PTLUST_S)
2550 ALLOCATE( id%PTRFAC( id%KEEP(28) ), stat = ierr )
2551 IF ( ierr .NE. 0 )
THEN
2553 id%INFO(2)=id%KEEP(28)
2556 WRITE(lp,*) id%MYID,
2557 &
': Allocation error for id%PTRFAC(', id%KEEP(28),
')'
2568 ptrwb = ptrist + id%KEEP(28)
2569 itloc = ptrwb + 2 * id%KEEP(28)
2571 ipool = itloc + id%N + id%KEEP(253)
2580 lpool = mumps_get_pool_length(id%NA(1), id%KEEP(1),id%KEEP8(1))
2581 ALLOCATE( iwk( ipool + lpool - 1 ), stat = ierr )
2582 IF ( ierr .NE. 0 )
THEN
2584 id%INFO(2)=ipool + lpool - 1
2586 WRITE(lp,*) id%MYID,
2587 &
': Allocation error for IWK(',ipool+lpool-1,
')'
2591 ALLOCATE(iwk8( 2 * id%KEEP(28)), stat = ierr)
2592 IF ( ierr .NE. 0 )
THEN
2594 id%INFO(2)=2 * id%KEEP(28)
2596 WRITE(lp,*) id%MYID,
2597 &
': Allocation error for IWKB(', 2*id%KEEP(28),
')'
2611 & id%COMM, id%MYID )
2612 IF ( id%INFO( 1 ) .LT. 0 )
GOTO 500
2614 IF ( i_am_slave )
THEN
2618 WRITE( mp, 170 ) maxs, maxis, id%KEEP8(12), keep(15),
2619 & id%KEEP8(26), id%KEEP8(27), id%KEEP8(11), keep(26), keep(27)
2640 IF ( i_am_slave )
THEN
2644 IF ( keep(55) .eq. 0 )
THEN
2647 ldptrar = id%NELT + 1
2649 IF ( id%KEEP(55) .NE. 0 )
THEN
2659 IF (i_am_slave)
THEN
2660 IF (
associated(id%L0_OMP_MAPPING))
2661 &
DEALLOCATE(id%L0_OMP_MAPPING)
2662 IF (keep(400) .GT. 0)
THEN
2663 id%LL0_OMP_MAPPING = keep(28)
2665 id%LL0_OMP_MAPPING = 1
2667 ALLOCATE(id%L0_OMP_MAPPING(id%LL0_OMP_MAPPING), stat=allocok)
2668 IF ( allocok > 0)
THEN
2669 write(*,*)
"Problem allocating L0_OMP_MAPPING",
2673 IF (
associated(id%L0_OMP_FACTORS))
THEN
2676 IF (keep(400) .GT. 0)
THEN
2677 id%LL0_OMP_FACTORS = keep(400)
2679 id%LL0_OMP_FACTORS = 1
2681 ALLOCATE(id%L0_OMP_FACTORS(id%LL0_OMP_FACTORS),stat = allocok)
2682 IF (allocok > 0)
THEN
2684 id%INFO(2)=nb_threads
2691 & id%COMM, id%MYID )
2692 IF ( id%INFO( 1 ) .LT. 0 )
GOTO 500
2694 avg_flops = rinfog(1)/(dble(id%NSLAVES))
2695 id%DKEEP(17) =
max( id%DKEEP(18), avg_flops/dble(50) )
2697 IF (prok.AND.id%MYID.EQ.master)
THEN
2698 IF (id%NSLAVES.LE.1)
THEN
2699 WRITE(mp,
'(/A,A,1PD10.3)')
2700 &
' Start factorization with total',
2701 &
' estimated flops (RINFOG(1)) = ',
2704 WRITE(mp,
'(/A,A,1PD10.3,A,1PD10.3)')
2705 &
' Start factorization with total',
2706 &
' estimated flops RINFOG(1) / Average per MPI proc = ',
2707 & rinfog(1),
' / ', avg_flops
2710 IF (i_am_slave)
THEN
2718 s_is_pointers%IW => id%IS;
NULLIFY(id%IS)
2719 s_is_pointers%A => id%S ;
NULLIFY(id%S)
2720 CALL zmumps_fac_b(id%N,s_is_pointers,maxs,maxis,id%SYM_PERM(1),
2721 & id%NA(1),id%LNA,id%NE_STEPS(1),id%ND_STEPS(1), id%FILS(1),
2722 & id%STEP(1),id%FRERE_STEPS(1),id%DAD_STEPS(1),id%CANDIDATES(1,1),
2723 & id%ISTEP_TO_INIV2(1),id%TAB_POS_IN_PERE(1,1), id%PTRAR(1),
2724 & ldptrar,iwk(ptrist),id%PTLUST_S(1),id%PTRFAC(1),iwk(ptrwb),iwk8,
2725 & iwk(itloc),rhs_mumps(1),iwk(ipool),lpool,cntl1,icntl(1),
2726 & id%INFO(1), rinfo(1),keep(1),id%KEEP8(1),id%PROCNODE_STEPS(1),
2727 & id%NSLAVES,id%COMM_NODES,id%MYID,id%MYID_NODES,bufr,zmumps_lbufr
2728 & , zmumps_lbufr_bytes, zmumps_lbuf, id%INTARR(1),id%DBLARR(1),
2729 & id%root, nelt_arg, id%FRTPTR(1), id%FRTELT(1),id%COMM_LOAD,
2730 & id%ASS_IRECV, seuil, seuil_ldlt_niv2, id%MEM_DIST(0),
2731 & id%DKEEP(1), id%PIVNUL_LIST(1), lpn_list, id%LRGROUPS(1)
2732 & ,id%IPOOL_B_L0_OMP(1),id%LPOOL_B_L0_OMP,
2733 & id%IPOOL_A_L0_OMP(1),id%LPOOL_A_L0_OMP,id%L_VIRT_L0_OMP,
2734 & id%VIRT_L0_OMP(1), id%VIRT_L0_OMP_MAPPING(1),id%L_PHYS_L0_OMP,
2735 & id%PHYS_L0_OMP(1), id%PERM_L0_OMP(1), id%PTR_LEAFS_L0_OMP
2736 & id%L0_OMP_MAPPING(1),id%LL0_OMP_MAPPING,
2737 & id%THREAD_LA, id%L0_OMP_FACTORS(1), id%LL0_OMP_FACTORS,
2738 & id%I4_L0_OMP(1,1),
size(id%I4_L0_OMP,1),
size(id%I4_L0_OMP,2),
2739 & id%I8_L0_OMP(1,1),
size(id%I8_L0_OMP,1),
size(id%I8_L0_OMP,2)
2741 id%IS => s_is_pointers%IW;
NULLIFY(s_is_pointers%IW)
2742 id%S => s_is_pointers%A ;
NULLIFY(s_is_pointers%A)
2759 IF ( keep(55) .eq. 0 )
THEN
2764 IF (
associated( id%DBLARR))
THEN
2765 DEALLOCATE(id%DBLARR)
2774 IF (
associated(id%INTARR))
THEN
2775 DEALLOCATE( id%INTARR)
2776 NULLIFY( id%INTARR )
2783 IF ( id%MYID_NODES .eq. master
2784 & .AND. keep(46) .eq. 1
2785 & .AND. keep(52) .eq. 0 )
THEN
2786 NULLIFY( id%DBLARR )
2788 IF (
associated( id%DBLARR))
THEN
2789 DEALLOCATE(id%DBLARR)
2802 IF ( keep(19) .NE. 0 )
THEN
2803 IF ( keep(46) .NE. 1 )
THEN
2806 IF ( id%MYID .eq. master )
THEN
2807 CALL mpi_recv( keep(17), 1, mpi_integer, 1, defic_tag,
2808 & id%COMM, status, ierr )
2809 CALL mpi_recv( keep(143), 1, mpi_integer, 1, defic_tag,
2810 & id%COMM, status, ierr )
2811 ELSE IF ( id%MYID .EQ. 1 )
THEN
2812 CALL mpi_send( keep(17), 1, mpi_integer, 0, defic_tag,
2814 CALL mpi_send( keep(143), 1, mpi_integer, 0, defic_tag,
2824 IF (
allocated(bufr))
DEALLOCATE(bufr)
2827 IF (keep(219).NE.0)
THEN
2836 & id%COMM, id%MYID )
2839 IF (keep(201) .GT. 0)
THEN
2840 IF ((keep(201).EQ.1) .OR. (keep(201).EQ.2))
THEN
2841 IF ( i_am_slave )
THEN
2849 & id%COMM, id%MYID )
2856 IF (id%MYID.EQ.master)
THEN
2859 IF (keep(400).GT.0)
THEN
2861 id%DKEEP(96)=id%DKEEP(94)-id%DKEEP(95)
2867 mem_eff_allocated = .true.
2869 & id%MYID, n, id%NELT, id%NA(1), id%LNA, id%KEEP8(28),
2871 & id%NSLAVES, total_mbytes, .true., id%KEEP(201),
2872 & blr_strat, .true., total_bytes,
2873 & idummy, bdummy, mem_eff_allocated
2875 & , id%I8_L0_OMP(1,1),
size(id%I8_L0_OMP,1),
2876 &
size(id%I8_L0_OMP,2)
2878 IF (keep(400) .GT. 0 )
THEN
2880 & id%MYID, n, id%NELT, id%NA(1), id%LNA, id%KEEP8(28),
2882 & id%NSLAVES, total_mbytes_under_l0, .true., id%KEEP(201),
2883 & blr_strat, .true., total_bytes_under_l0,
2884 & idummy, bdummy, mem_eff_allocated
2886 & , id%I8_L0_OMP(1,1),
size(id%I8_L0_OMP,1),
2887 &
size(id%I8_L0_OMP,2)
2889 total_mbytes =
max(total_mbytes,total_mbytes_under_l0)
2890 total_bytes =
max(total_bytes, total_bytes_under_l0)
2892 IF (id%KEEP8(24).NE.0)
THEN
2895 id%INFO(16) = total_mbytes
2900 id%INFO(16) = total_mbytes
2910 & id%INFO(16), id%INFOG(18), irank )
2912 & mp, mpg, id%INFO(16), id%INFOG(18), id%INFOG(19),
2913 & id%NSLAVES, irank,
2917 WRITE(mp,
'(A,I12) ')
2918 &
' ** Eff. min. Space MBYTES for facto (INFO(16)):',
2926 mem_eff_allocated = .false.
2928 & id%MYID, n, id%NELT, id%NA(1), id%LNA, id%KEEP8(28),
2930 & id%NSLAVES, total_mbytes, .true., id%KEEP(201),
2931 & blr_strat, perlu_on, total_bytes,
2932 & idummy, bdummy, mem_eff_allocated
2934 & , id%I8_L0_OMP(1,1),
size(id%I8_L0_OMP,1),
2935 &
size(id%I8_L0_OMP,2)
2937 IF (keep(400) .GT. 0 )
THEN
2939 & id%MYID, n, id%NELT, id%NA(1), id%LNA, id%KEEP8(28),
2941 & id%NSLAVES, total_mbytes_under_l0, .true., id%KEEP(201),
2942 & blr_strat, perlu_on, total_bytes_under_l0,
2943 & idummy, bdummy, mem_eff_allocated
2945 & , id%I8_L0_OMP(1,1),
size(id%I8_L0_OMP,1),
2946 &
size(id%I8_L0_OMP,2)
2948 total_mbytes =
max(total_mbytes,total_mbytes_under_l0)
2949 total_bytes =
max(total_bytes, total_bytes_under_l0)
2954 id%KEEP8(7) = total_bytes
2957 id%INFO(22) = total_mbytes
2966 & id%INFO(22), id%INFOG(21), irank )
2968 IF (print_maxavg)
THEN
2969 WRITE( mpg,
'(A,I12) ')
2970 &
' ** Memory effectively used, max in Mbytes (INFOG(21)):',
2973 WRITE( mpg,
'(A,I12) ')
2974 & ' ** memory effectively
used, total in mbytes(infog(22)):
',
2977 SUM_INFO22_THIS_NODE=0
2978 CALL MPI_REDUCE( id%INFO(22), SUM_INFO22_THIS_NODE, 1,
2980 & MPI_SUM, 0, id%KEEP(411), IERR )
2981 CALL MPI_REDUCE( SUM_INFO22_THIS_NODE, MAX_SUM_INFO22_THIS_NODE,
2982 & 1, MPI_INTEGER, MPI_MAX, 0, id%COMM, IERR )
2983.AND.
IF (PROKG PRINT_NODEINFO) THEN
2984 WRITE(MPG,'(a,i12)
')
2985 & ' **
max. effective space per compute node, in mbytes :
',
2986 & MAX_SUM_INFO22_THIS_NODE
2989 IF (I_AM_SLAVE) THEN
3004 CALL MUMPS_SETI8TOI4(K67,id%INFO(21))
3007.GT.
IF (KEEP(400) 0 ) THEN
3008.NOT.
IF ( I_AM_SLAVE) THEN
3009 id%DKEEP(95) = 0.0D0
3010 id%DKEEP(16) = 0.0D0
3012.GT.
IF (id%NPROCS 1) THEN
3014 CALL MPI_REDUCE(id%DKEEP(95), TMPTIME, 1,
3015 & MPI_DOUBLE_PRECISION, MPI_SUM, MASTER, id%COMM, IERR)
3016.EQ.
IF (id%MYIDMASTER) TIMEAVG = TMPTIME
3017 CALL MPI_REDUCE(id%DKEEP(16), TMPFLOP, 1,
3018 & MPI_DOUBLE_PRECISION, MPI_SUM, MASTER, id%COMM, IERR)
3019.EQ.
IF (id%MYIDMASTER) FLOPAVG = TMPFLOP
3020.EQ.
IF (id%MYIDMASTER) THEN
3021 TIMEAVG = TIMEAVG / id%NSLAVES
3022 FLOPAVG = FLOPAVG / id%NSLAVES
3024 CALL MPI_REDUCE(id%DKEEP(95), TIMEMAX, 1,
3025 & MPI_DOUBLE_PRECISION, MPI_MAX, MASTER, id%COMM, IERR)
3026 CALL MPI_REDUCE(id%DKEEP(16), FLOPMAX, 1,
3027 & MPI_DOUBLE_PRECISION, MPI_MAX, MASTER, id%COMM, IERR)
3030 WRITE(MPG,190) FLOPAVG, FLOPMAX
3031 WRITE(MPG,188) TIMEAVG, TIMEMAX
3036 WRITE(MPG,189) id%DKEEP(16)
3037 WRITE(MPG,187) id%DKEEP(95)
3042.GE.
IF (id%INFO(1) 0) THEN
3043 WRITE(MPG,180) id%DKEEP(94)
3045 WRITE(MPG,185) id%DKEEP(94)
3056 CALL MPI_REDUCE( RINFO(2), RINFOG(2), 2,
3057 & MPI_DOUBLE_PRECISION,
3058 & MPI_SUM, MASTER, id%COMM, IERR)
3062 CALL MPI_REDUCE( KEEP(246), KEEP(247), 1, MPI_INTEGER,
3063 & MPI_MAX, MASTER, id%COMM, IERR)
3066 CALL MPI_REDUCE( id%DKEEP(97), id%DKEEP(98), 1,
3067 & MPI_DOUBLE_PRECISION,
3068 & MPI_MAX, MASTER, id%COMM, IERR)
3070 CALL MPI_REDUCE( RINFO(2), RINFOG(2), 2,
3071 & MPI_DOUBLE_PRECISION,
3072 & MPI_SUM, MASTER, id%COMM, IERR)
3073 CALL MUMPS_REDUCEI8( id%KEEP8(31)+id%KEEP8(64),id%KEEP8(6),
3074 & MPI_SUM, MASTER, id%COMM )
3076.EQ.
IF (id%MYID0) THEN
3078 RINFOG(16) = dble(id%KEEP8(6)*int(KEEP(35),8))/dble(1D6)
3079.LE.
IF (KEEP(201)0) THEN
3083 CALL MUMPS_REDUCEI8( id%KEEP8(48),id%KEEP8(148), MPI_SUM,
3085 CALL MUMPS_SETI8TOI4(id%KEEP8(148), INFOG(9))
3087 CALL MPI_REDUCE( int(id%INFO(10),8), id%KEEP8(128),
3089 & MPI_SUM, MASTER, id%COMM, IERR)
3090.EQ.
IF (id%MYIDMASTER) THEN
3091 CALL MUMPS_SETI8TOI4(id%KEEP8(128), id%INFOG(10))
3094 CALL MPI_ALLREDUCE( id%INFO(11), INFOG(11), 1, MPI_INTEGER,
3095 & MPI_MAX, id%COMM, IERR)
3099 KEEP(133) = INFOG(11)
3100 CALL MPI_REDUCE( id%INFO(12), INFOG(12), 3, MPI_INTEGER,
3101 & MPI_SUM, MASTER, id%COMM, IERR)
3102 CALL MPI_REDUCE( KEEP(103), INFOG(25), 1, MPI_INTEGER,
3103 & MPI_SUM, MASTER, id%COMM, IERR)
3104 KEEP(229) = INFOG(25)
3105 CALL MPI_REDUCE( KEEP(105), INFOG(25), 1, MPI_INTEGER,
3106 & MPI_SUM, MASTER, id%COMM, IERR)
3107 KEEP(230) = INFOG(25)
3109 id%INFO(25) = KEEP(98)
3110 CALL MPI_ALLREDUCE( id%INFO(25), INFOG(25), 1, MPI_INTEGER,
3111 & MPI_SUM, id%COMM, IERR)
3113 CALL MUMPS_REDUCEI8( id%KEEP8(8), id%KEEP8(108), MPI_SUM,
3116 CALL MUMPS_SETI8TOI4(id%KEEP8(10), id%INFO(27))
3117 CALL MUMPS_REDUCEI8( id%KEEP8(10),id%KEEP8(110), MPI_SUM,
3119 CALL MUMPS_SETI8TOI4(id%KEEP8(110), INFOG(29))
3121 id%INFO(28) = id%INFO(27)
3122 INFOG(35) = INFOG(29)
3126.NE.
IF ( KEEP(486) 0 ) THEN !LR is activated
3128 RINFO(4) = dble(FLOP_FRFRONTS + FLOP_FACTO_FR - FLOP_LRGAIN
3129 & + FLOP_COMPRESS + FLOP_FRFRONTS)
3133 ITMP8 = id%KEEP8(10) - int(MRY_LU_LRGAIN,8)
3134 CALL MUMPS_SETI8TOI4( ITMP8, id%INFO(28))
3136 CALL MPI_REDUCE( MRY_LU_LRGAIN, TMP_MRY_LU_LRGAIN
3137 & , 1, MPI_DOUBLE_PRECISION,
3138 & MPI_SUM, MASTER, id%COMM, IERR)
3139 CALL MPI_REDUCE( MRY_LU_FR, TMP_MRY_LU_FR
3140 & , 1, MPI_DOUBLE_PRECISION,
3141 & MPI_SUM, MASTER, id%COMM, IERR)
3142 CALL MPI_REDUCE( MRY_CB_FR, TMP_MRY_CB_FR
3143 & , 1, MPI_DOUBLE_PRECISION,
3144 & MPI_SUM, MASTER, id%COMM, IERR)
3145 CALL MPI_REDUCE( MRY_CB_LRGAIN, TMP_MRY_CB_LRGAIN
3146 & , 1, MPI_DOUBLE_PRECISION,
3147 & MPI_SUM, MASTER, id%COMM, IERR)
3148 CALL MPI_REDUCE( FLOP_LRGAIN, TMP_FLOP_LRGAIN
3149 & , 1, MPI_DOUBLE_PRECISION,
3150 & MPI_SUM, MASTER, id%COMM, IERR)
3151 CALL MPI_REDUCE( FLOP_TRSM_FR, TMP_FLOP_TRSM_FR
3152 & , 1, MPI_DOUBLE_PRECISION,
3153 & MPI_SUM, MASTER, id%COMM, IERR)
3154 CALL MPI_REDUCE( FLOP_TRSM_LR, TMP_FLOP_TRSM_LR
3155 & , 1, MPI_DOUBLE_PRECISION,
3156 & MPI_SUM, MASTER, id%COMM, IERR)
3157 CALL MPI_REDUCE( FLOP_UPDATE_FR, TMP_FLOP_UPDATE_FR
3158 & , 1, MPI_DOUBLE_PRECISION,
3159 & MPI_SUM, MASTER, id%COMM, IERR)
3160 CALL MPI_REDUCE( FLOP_UPDATE_LR, TMP_FLOP_UPDATE_LR
3161 & , 1, MPI_DOUBLE_PRECISION,
3162 & MPI_SUM, MASTER, id%COMM, IERR)
3163 CALL MPI_REDUCE( FLOP_FRSWAP_COMPRESS,
3164 & TMP_FLOP_FRSWAP_COMPRESS
3165 & , 1, MPI_DOUBLE_PRECISION,
3166 & MPI_SUM, MASTER, id%COMM, IERR)
3167 CALL MPI_REDUCE( FLOP_MIDBLK_COMPRESS,
3168 & TMP_FLOP_MIDBLK_COMPRESS
3169 & , 1, MPI_DOUBLE_PRECISION,
3170 & MPI_SUM, MASTER, id%COMM, IERR)
3171 CALL MPI_REDUCE( FLOP_UPDATE_LRLR3, TMP_FLOP_UPDATE_LRLR3
3172 & , 1, MPI_DOUBLE_PRECISION,
3173 & MPI_SUM, MASTER, id%COMM, IERR)
3174 CALL MPI_REDUCE(FLOP_ACCUM_COMPRESS, TMP_FLOP_ACCUM_COMPRESS
3175 & , 1, MPI_DOUBLE_PRECISION,
3176 & MPI_SUM, MASTER, id%COMM, IERR)
3177 CALL MPI_REDUCE( FLOP_TRSM, TMP_FLOP_TRSM
3178 & , 1, MPI_DOUBLE_PRECISION,
3179 & MPI_SUM, MASTER, id%COMM, IERR)
3180 CALL MPI_REDUCE( FLOP_PANEL, TMP_FLOP_PANEL
3181 & , 1, MPI_DOUBLE_PRECISION,
3182 & MPI_SUM, MASTER, id%COMM, IERR)
3183 CALL MPI_REDUCE( FLOP_FRFRONTS, TMP_FLOP_FRFRONTS
3184 & , 1, MPI_DOUBLE_PRECISION,
3185 & MPI_SUM, MASTER, id%COMM, IERR)
3186 CALL MPI_REDUCE( FLOP_COMPRESS, TMP_FLOP_COMPRESS
3187 & , 1, MPI_DOUBLE_PRECISION,
3188 & MPI_SUM, MASTER, id%COMM, IERR)
3189 CALL MPI_REDUCE( FLOP_DECOMPRESS, TMP_FLOP_DECOMPRESS
3190 & , 1, MPI_DOUBLE_PRECISION,
3191 & MPI_SUM, MASTER, id%COMM, IERR)
3192 CALL MPI_REDUCE( FLOP_CB_COMPRESS, TMP_FLOP_CB_COMPRESS
3193 & , 1, MPI_DOUBLE_PRECISION,
3194 & MPI_SUM, MASTER, id%COMM, IERR)
3195 CALL MPI_REDUCE( FLOP_CB_DECOMPRESS,TMP_FLOP_CB_DECOMPRESS
3196 & , 1, MPI_DOUBLE_PRECISION,
3197 & MPI_SUM, MASTER, id%COMM, IERR)
3198 CALL MPI_REDUCE( FLOP_FACTO_FR, TMP_FLOP_FACTO_FR
3199 & , 1, MPI_DOUBLE_PRECISION,
3200 & MPI_SUM, MASTER, id%COMM, IERR)
3201 CALL MPI_REDUCE( CNT_NODES,TMP_CNT_NODES
3203 & MPI_SUM, MASTER, id%COMM, IERR)
3204.GT.
IF (id%NPROCS1) THEN
3205 FLOP_FACTO_LR = FLOP_FACTO_FR - FLOP_LRGAIN
3206 & + FLOP_COMPRESS + FLOP_FRFRONTS
3207 CALL MPI_REDUCE( FLOP_FACTO_LR, AVG_FLOP_FACTO_LR
3208 & , 1, MPI_DOUBLE_PRECISION,
3209 & MPI_SUM, MASTER, id%COMM, IERR)
3210.EQ.
IF (id%MYIDMASTER) THEN
3211 AVG_FLOP_FACTO_LR = AVG_FLOP_FACTO_LR/id%NPROCS
3213 CALL MPI_REDUCE( FLOP_FACTO_LR, MIN_FLOP_FACTO_LR
3214 & , 1, MPI_DOUBLE_PRECISION,
3215 & MPI_MIN, MASTER, id%COMM, IERR)
3216 CALL MPI_REDUCE( FLOP_FACTO_LR, MAX_FLOP_FACTO_LR
3217 & , 1, MPI_DOUBLE_PRECISION,
3218 & MPI_MAX, MASTER, id%COMM, IERR)
3220 CALL MPI_REDUCE( TIME_UPDATE, TMP_TIME_UPDATE
3221 & , 1, MPI_DOUBLE_PRECISION,
3222 & MPI_SUM, MASTER, id%COMM, IERR)
3223 CALL MPI_REDUCE( TIME_UPDATE_LRLR1, TMP_TIME_UPDATE_LRLR1
3224 & , 1, MPI_DOUBLE_PRECISION,
3225 & MPI_SUM, MASTER, id%COMM, IERR)
3226 CALL MPI_REDUCE( TIME_UPDATE_LRLR2, TMP_TIME_UPDATE_LRLR2
3227 & , 1, MPI_DOUBLE_PRECISION,
3228 & MPI_SUM, MASTER, id%COMM, IERR)
3229 CALL MPI_REDUCE( TIME_UPDATE_LRLR3, TMP_TIME_UPDATE_LRLR3
3230 & , 1, MPI_DOUBLE_PRECISION,
3231 & MPI_SUM, MASTER, id%COMM, IERR)
3232 CALL MPI_REDUCE( TIME_UPDATE_FRLR, TMP_TIME_UPDATE_FRLR
3233 & , 1, MPI_DOUBLE_PRECISION,
3234 & MPI_SUM, MASTER, id%COMM, IERR)
3235 CALL MPI_REDUCE( TIME_UPDATE_FRFR, TMP_TIME_UPDATE_FRFR
3236 & , 1, MPI_DOUBLE_PRECISION,
3237 & MPI_SUM, MASTER, id%COMM, IERR)
3238 CALL MPI_REDUCE( TIME_DIAGCOPY, TMP_TIME_DIAGCOPY
3239 & , 1, MPI_DOUBLE_PRECISION,
3240 & MPI_SUM, MASTER, id%COMM, IERR)
3241 CALL MPI_REDUCE( TIME_COMPRESS,TMP_TIME_COMPRESS
3242 & , 1, MPI_DOUBLE_PRECISION,
3243 & MPI_SUM, MASTER, id%COMM, IERR)
3244 CALL MPI_REDUCE( TIME_MIDBLK_COMPRESS,
3245 & TMP_TIME_MIDBLK_COMPRESS
3246 & , 1, MPI_DOUBLE_PRECISION,
3247 & MPI_SUM, MASTER, id%COMM, IERR)
3248 CALL MPI_REDUCE( TIME_FRSWAP_COMPRESS,
3249 & TMP_TIME_FRSWAP_COMPRESS
3250 & , 1, MPI_DOUBLE_PRECISION,
3251 & MPI_SUM, MASTER, id%COMM, IERR)
3252 CALL MPI_REDUCE( TIME_CB_COMPRESS, TMP_TIME_CB_COMPRESS
3253 & , 1, MPI_DOUBLE_PRECISION,
3254 & MPI_SUM, MASTER, id%COMM, IERR)
3255 CALL MPI_REDUCE( TIME_DECOMP, TMP_TIME_DECOMP
3256 & , 1, MPI_DOUBLE_PRECISION,
3257 & MPI_SUM, MASTER, id%COMM, IERR)
3258 CALL MPI_REDUCE( TIME_DECOMP_UCFS, TMP_TIME_DECOMP_UCFS
3259 & , 1, MPI_DOUBLE_PRECISION,
3260 & MPI_SUM, MASTER, id%COMM, IERR)
3261 CALL MPI_REDUCE( TIME_DECOMP_ASM1, TMP_TIME_DECOMP_ASM1
3262 & , 1, MPI_DOUBLE_PRECISION,
3263 & MPI_SUM, MASTER, id%COMM, IERR)
3264 CALL MPI_REDUCE(TIME_DECOMP_LOCASM2, TMP_TIME_DECOMP_LOCASM2
3265 & , 1, MPI_DOUBLE_PRECISION,
3266 & MPI_SUM, MASTER, id%COMM, IERR)
3267 CALL MPI_REDUCE(TIME_DECOMP_MAPLIG1, TMP_TIME_DECOMP_MAPLIG1
3268 & , 1, MPI_DOUBLE_PRECISION,
3269 & MPI_SUM, MASTER, id%COMM, IERR)
3270 CALL MPI_REDUCE( TIME_DECOMP_ASMS2S, TMP_TIME_DECOMP_ASMS2S
3271 & , 1, MPI_DOUBLE_PRECISION,
3272 & MPI_SUM, MASTER, id%COMM, IERR)
3273 CALL MPI_REDUCE( TIME_DECOMP_ASMS2M, TMP_TIME_DECOMP_ASMS2M
3274 & , 1, MPI_DOUBLE_PRECISION,
3275 & MPI_SUM, MASTER, id%COMM, IERR)
3276 CALL MPI_REDUCE( TIME_PANEL, TMP_TIME_PANEL
3277 & , 1, MPI_DOUBLE_PRECISION,
3278 & MPI_SUM, MASTER, id%COMM, IERR)
3279 CALL MPI_REDUCE( TIME_FAC_I, TMP_TIME_FAC_I
3280 & , 1, MPI_DOUBLE_PRECISION,
3281 & MPI_SUM, MASTER, id%COMM, IERR)
3282 CALL MPI_REDUCE( TIME_FAC_MQ, TMP_TIME_FAC_MQ
3283 & , 1, MPI_DOUBLE_PRECISION,
3284 & MPI_SUM, MASTER, id%COMM, IERR)
3285 CALL MPI_REDUCE( TIME_FAC_SQ, TMP_TIME_FAC_SQ
3286 & , 1, MPI_DOUBLE_PRECISION,
3287 & MPI_SUM, MASTER, id%COMM, IERR)
3288 CALL MPI_REDUCE( TIME_LRTRSM, TMP_TIME_LRTRSM
3289 & , 1, MPI_DOUBLE_PRECISION,
3290 & MPI_SUM, MASTER, id%COMM, IERR)
3291 CALL MPI_REDUCE( TIME_FRTRSM, TMP_TIME_FRTRSM
3292 & , 1, MPI_DOUBLE_PRECISION,
3293 & MPI_SUM, MASTER, id%COMM, IERR)
3294 CALL MPI_REDUCE( TIME_FRFRONTS, TMP_TIME_FRFRONTS
3295 & , 1, MPI_DOUBLE_PRECISION,
3296 & MPI_SUM, MASTER, id%COMM, IERR)
3297 CALL MPI_REDUCE( TIME_LR_MODULE, TMP_TIME_LR_MODULE
3298 & , 1, MPI_DOUBLE_PRECISION,
3299 & MPI_SUM, MASTER, id%COMM, IERR)
3300.EQ.
IF (id%MYIDMASTER) THEN
3301.GT.
IF (id%NPROCS1) THEN
3304 MRY_LU_FR = TMP_MRY_LU_FR
3305 MRY_LU_LRGAIN = TMP_MRY_LU_LRGAIN
3306 MRY_CB_FR = TMP_MRY_CB_FR
3307 MRY_CB_LRGAIN = TMP_MRY_CB_LRGAIN
3308 FLOP_LRGAIN = TMP_FLOP_LRGAIN
3309 FLOP_PANEL = TMP_FLOP_PANEL
3310 FLOP_TRSM = TMP_FLOP_TRSM
3311 FLOP_TRSM_FR = TMP_FLOP_TRSM_FR
3312 FLOP_TRSM_LR = TMP_FLOP_TRSM_LR
3313 FLOP_UPDATE_FR = TMP_FLOP_UPDATE_FR
3314 FLOP_UPDATE_LR = TMP_FLOP_UPDATE_LR
3315 FLOP_UPDATE_LRLR3 = TMP_FLOP_UPDATE_LRLR3
3316 FLOP_COMPRESS = TMP_FLOP_COMPRESS
3317 FLOP_MIDBLK_COMPRESS = TMP_FLOP_MIDBLK_COMPRESS
3318 FLOP_FRSWAP_COMPRESS = TMP_FLOP_FRSWAP_COMPRESS
3319 FLOP_ACCUM_COMPRESS = TMP_FLOP_ACCUM_COMPRESS
3320 FLOP_CB_COMPRESS = TMP_FLOP_CB_COMPRESS
3321 FLOP_DECOMPRESS = TMP_FLOP_DECOMPRESS
3322 FLOP_CB_DECOMPRESS = TMP_FLOP_CB_DECOMPRESS
3323 FLOP_FRFRONTS = TMP_FLOP_FRFRONTS
3324 FLOP_FACTO_FR = TMP_FLOP_FACTO_FR
3325 CNT_NODES = TMP_CNT_NODES
3326 TIME_UPDATE = TMP_TIME_UPDATE /id%NPROCS
3327 TIME_UPDATE_LRLR1 = TMP_TIME_UPDATE_LRLR1 /id%NPROCS
3328 TIME_UPDATE_LRLR2 = TMP_TIME_UPDATE_LRLR2 /id%NPROCS
3329 TIME_UPDATE_LRLR3 = TMP_TIME_UPDATE_LRLR3 /id%NPROCS
3330 TIME_UPDATE_FRLR = TMP_TIME_UPDATE_FRLR /id%NPROCS
3331 TIME_UPDATE_FRFR = TMP_TIME_UPDATE_FRFR /id%NPROCS
3332 TIME_COMPRESS = TMP_TIME_COMPRESS /id%NPROCS
3333 TIME_MIDBLK_COMPRESS = TMP_TIME_MIDBLK_COMPRESS/id%NPROCS
3334 TIME_FRSWAP_COMPRESS = TMP_TIME_FRSWAP_COMPRESS/id%NPROCS
3335 TIME_DIAGCOPY = TMP_TIME_DIAGCOPY /id%NPROCS
3336 TIME_CB_COMPRESS = TMP_TIME_CB_COMPRESS /id%NPROCS
3337 TIME_PANEL = TMP_TIME_PANEL /id%NPROCS
3338 TIME_FAC_I = TMP_TIME_FAC_I /id%NPROCS
3339 TIME_FAC_MQ = TMP_TIME_FAC_MQ /id%NPROCS
3340 TIME_FAC_SQ = TMP_TIME_FAC_SQ /id%NPROCS
3341 TIME_LRTRSM = TMP_TIME_LRTRSM /id%NPROCS
3342 TIME_FRTRSM = TMP_TIME_FRTRSM /id%NPROCS
3343 TIME_FRFRONTS = TMP_TIME_FRFRONTS /id%NPROCS
3344 TIME_LR_MODULE = TMP_TIME_LR_MODULE /id%NPROCS
3345 TIME_DECOMP = TMP_TIME_DECOMP /id%NPROCS
3346 TIME_DECOMP_UCFS = TMP_TIME_DECOMP_UCFS /id%NPROCS
3347 TIME_DECOMP_ASM1 = TMP_TIME_DECOMP_ASM1 /id%NPROCS
3348 TIME_DECOMP_LOCASM2 = TMP_TIME_DECOMP_LOCASM2 /id%NPROCS
3349 TIME_DECOMP_MAPLIG1 = TMP_TIME_DECOMP_MAPLIG1 /id%NPROCS
3350 TIME_DECOMP_ASMS2S = TMP_TIME_DECOMP_ASMS2S /id%NPROCS
3351 TIME_DECOMP_ASMS2M = TMP_TIME_DECOMP_ASMS2M /id%NPROCS
3353 CALL COMPUTE_GLOBAL_GAINS(id%KEEP8(110),id%RINFOG(3),
3354 & id%KEEP8(49), PROKG, MPG)
3359 CALL MUMPS_SETI8TOI4(id%KEEP8(49), id%INFOG(35))
3363 IF (CNTL(7) < 0.0D0) THEN
3366 WRITE(LP,'(/a/,a/,a/,a,a)
')
3367 & ' warning in blr input setting
',
3368 & ' cntl(7) < 0 is experimental:
',
3369 & ' rrqr precision = |cntl(7| x ||a_pre||,
',
3370 & ' where a_pre is
the preprocessed matrix as defined
',
3371 & ' in
the users guide
'
3374 CALL SAVEandWRITE_GAINS(FRONTWISE,
3375 & KEEP(489), id%DKEEP, N, id%ICNTL(36),
3376 & KEEP(487), KEEP(488), KEEP(490),
3377 & KEEP(491), KEEP(50), KEEP(486),
3378 & KEEP(472), KEEP(475), KEEP(478), KEEP(480),
3380 & KEEP(483), KEEP(484),
3381 & id%KEEP8(110), id%KEEP8(49),
3382 & KEEP(28), id%NPROCS, MPG, PROKG)
3384 RINFOG(14) = id%DKEEP(56)
3392.EQ.
IF(KEEP(110) 1) THEN
3395 id%INFO(18) = KEEP(109)
3396 CALL MPI_ALLREDUCE( KEEP(109), KEEP(112), 1, MPI_INTEGER,
3397 & MPI_SUM, id%COMM, IERR)
3403.EQ.
IF (id%MYIDMASTER) THEN
3405 INFOG(28)=KEEP(112)+KEEP(17)
3414.NE.
IF (KEEP(17) 0) THEN
3415.EQ.
IF (id%MYID ID_ROOT) THEN
3419 id%INFO(18)=id%INFO(18)+KEEP(17)
3421.EQ.
IF (ID_ROOT MASTER) THEN
3422.EQ.
IF (id%MYIDMASTER) THEN
3431 DO I= KEEP(17), 1, -1
3434 id%PIVNUL_LIST(KEEP(112)+I)=id%PIVNUL_LIST(KEEP(109)+I)
3443.EQ.
IF (id%MYID ID_ROOT) THEN
3444 CALL MPI_SEND(id%PIVNUL_LIST(KEEP(109)+1), KEEP(17),
3445 & MPI_INTEGER, MASTER, ZERO_PIV,
3447.EQ.
ELSE IF (id%MYID MASTER) THEN
3448 CALL MPI_RECV(id%PIVNUL_LIST(KEEP(112)+1), KEEP(17),
3449 & MPI_INTEGER, ID_ROOT, ZERO_PIV,
3450 & id%COMM, STATUS, IERR )
3461.EQ.
IF(KEEP(110) 1) THEN
3462 ALLOCATE(ITMP2(id%NPROCS),stat = IERR ) ! deallocated in 490
3463.GT.
IF ( IERR 0 ) THEN
3465 id%INFO(2)=id%NPROCS
3467 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
3468 & id%COMM, id%MYID )
3469.LT.
IF (id%INFO(1)0) GOTO 490
3470 CALL MPI_GATHER ( KEEP(109),1, MPI_INTEGER,
3471 & ITMP2(1), 1, MPI_INTEGER,
3472 & MASTER, id%COMM, IERR)
3473.EQ.
IF(id%MYID MASTER) THEN
3478 DO I = 1,id%NPROCS-1
3479 CALL MPI_RECV(id%PIVNUL_LIST(POSBUF), ITMP2(I+1),
3481 & ZERO_PIV, id%COMM, STATUS, IERR)
3486 CALL MPI_SEND(POSBUF, 1, MPI_INTEGER, I, ZERO_PIV,
3488 POSBUF = POSBUF + ITMP2(I+1)
3491 CALL MPI_SEND( id%PIVNUL_LIST(1), KEEP(109), MPI_INTEGER,
3492 & MASTER,ZERO_PIV, id%COMM, IERR)
3493 CALL MPI_RECV( KEEP(220), 1, MPI_INTEGER, MASTER, ZERO_PIV,
3494 & id%COMM, STATUS, IERR )
3500 CALL MPI_REDUCE( id%DKEEP(19), RINFOG(19), 1,
3501 & MPI_DOUBLE_PRECISION,
3502 & MPI_MIN, MASTER, id%COMM, IERR )
3503 CALL MPI_REDUCE( id%DKEEP(20), RINFOG(20), 1,
3504 & MPI_DOUBLE_PRECISION,
3505 & MPI_MIN, MASTER, id%COMM, IERR )
3506 CALL MPI_REDUCE( id%DKEEP(21), RINFOG(21), 1,
3507 & MPI_DOUBLE_PRECISION,
3508 & MPI_MAX, MASTER, id%COMM, IERR )
3512 CALL MPI_REDUCE( id%KEEP8(80), ITEMP8, 1, MPI_INTEGER8,
3513 & MPI_SUM, MASTER, id%COMM, IERR )
3514.EQ.
IF (id%MYID MASTER) THEN
3515 CALL MUMPS_SETI8TOI4(ITEMP8,id%INFOG(48))
3520 CALL MPI_REDUCE( id%KEEP(425), id%INFOG(49), 1, MPI_INTEGER,
3521 & MPI_MAX, MASTER, id%COMM, IERR )
3534.EQ..AND..NE.
IF (id%MYIDMASTER LSCAL. AND. KEEP(258)0) THEN
3535 K = min(KEEP(143), KEEP(17))
3537 DO I = 1, KEEP(112)+ K
3539 CALL ZMUMPS_UPDATEDETER_SCALING(
3540 & id%ROWSCA(id%PIVNUL_LIST(I)),
3541 & id%DKEEP(6), KEEP(259))
3542 CALL ZMUMPS_UPDATEDETER_SCALING(
3543 & id%COLSCA(id%PIVNUL_LIST(I)),
3544 & id%DKEEP(6), KEEP(259))
3550.NE.
IF (KEEP(258)0) THEN
3552.EQ.
IF (KEEP(260)-1) THEN ! Local to each processor
3553 id%DKEEP(6)=-id%DKEEP(6)
3554 id%DKEEP(7)=-id%DKEEP(7)
3559 CALL ZMUMPS_DETER_REDUCTION(
3560 & id%COMM, id%DKEEP(6), KEEP(259),
3561 & RINFOG(12), INFOG(34), id%NPROCS)
3565.EQ..AND..EQ.
IF (id%KEEP(50)0 id%MYID MASTER) THEN
3569.NE.
IF (id%KEEP(23)0) THEN
3570 CALL ZMUMPS_DETER_SIGN_PERM(
3582 490 IF (allocated(ITMP2)) DEALLOCATE(ITMP2)
3587 WRITE(MPG,99984) RINFOG(2),RINFOG(3),KEEP(52),
3589 & id%KEEP8(128), INFOG(11), id%KEEP8(110)
3590 IF (id%KEEP(50) == 0) THEN
3592 WRITE(MPG, 99985) INFOG(12)
3594.NE.
IF (id%KEEP(50) 1) THEN
3596 WRITE(MPG, 99982) INFOG(13)
3598.NE.
IF (KEEP(97) 0) THEN
3600 WRITE(MPG, '(a,d16.4)
')
3601 & ' effective
static pivoting thresh., cntl(4) =
', SEUIL
3602 WRITE(MPG, 99986) INFOG(25)
3604 IF (id%KEEP(50) == 2) THEN
3605 !number of 2x2 pivots in type 1 nodes
3606 WRITE(MPG, 99988) KEEP(229)
3607 !number of 2x2 pivots in type 2 nodes
3608 WRITE(MPG, 99989) KEEP(230)
3610 !number of zero pivots
3611.NE.
IF (KEEP(110) 0) THEN
3612 WRITE(MPG, 99991) KEEP(112)
3615.ne.
IF ( KEEP(19) 0 )
3617 & WRITE(MPG, 99983) KEEP(17)
3619.NE..OR..NE.
IF (KEEP(110)0KEEP(19)0)
3621 & WRITE(MPG, 99992) KEEP(17)+KEEP(112)
3623 WRITE(MPG, 99981) INFOG(14)
3624 ! Extra copies due to ip stack in unsym case
3625 ! in core case (or OLD_OOC_PANEL)
3626.GT.
IF (id%KEEP8(108) 0_8) THEN
3627 WRITE(MPG, 99980) id%KEEP8(108)
3629.NE..AND..GT.
IF ((KEEP(60)0) INFOG(25)0) THEN
3630 ! Schur on and tiny pivots set in last level
3631 ! before the Schur if KEEP(114)=0
3633 & " ** Warning Static pivoting was necessary"
3635 & " ** to factor interior variables with Schur ON"
3637.NE.
IF (KEEP(258)0) THEN
3638 WRITE(MPG,99978) RINFOG(12)
3639 WRITE(MPG,99979) RINFOG(13)
3640 WRITE(MPG,99977) INFOG(34)
3653#if ! defined(NO_FDM_DESCBAND)
3656#if ! defined(NO_FDM_MAPROW)
3665.EQ..AND.
IF (id%KEEP(46)1
3666.NE..AND.
& id%KEEP(55)0
3667.EQ..AND.
& id%MYIDMASTER
3668.EQ.
& id%KEEP(52) 0) THEN
3671 IF (associated(id%DBLARR)) THEN
3672 DEALLOCATE(id%DBLARR)
3676#if ! defined(NO_FDM_DESCBAND)
3677 IF (I_AM_SLAVE) THEN
3678 CALL MUMPS_FDBD_END(id%INFO(1)) ! INFO(1): input only
3681#if ! defined(NO_FDM_MAPROW)
3682 IF (I_AM_SLAVE) THEN
3683 CALL MUMPS_FMRD_END(id%INFO(1)) ! INFO(1): input only
3686 IF (I_AM_SLAVE) THEN
3692.AND..GE.
& id%INFO(1)0
3696 CALL ZMUMPS_BLR_MOD_TO_STRUC(id%BLRARRAY_ENCODING)
3699 CALL ZMUMPS_BLR_END_MODULE(id%INFO(1), id%KEEP8, id%KEEP(34))
3702 IF (I_AM_SLAVE) THEN
3703 CALL MUMPS_FDM_END('a
')
3709.AND..GE.
& id%INFO(1)0
3711 CALL MUMPS_FDM_MOD_TO_STRUC('f
', id%FDM_F_ENCODING,
3713.NOT.
IF ( associated(id%FDM_F_ENCODING)) THEN
3714 WRITE(*,*) "Internal error 2 in ZMUMPS_FAC_DRIVER"
3717 CALL MUMPS_FDM_END('f
')
3727 IF ( I_AM_SLAVE ) THEN
3728.EQ..OR..EQ.
IF ((KEEP(201)1)(KEEP(201)2)) THEN
3729 CALL ZMUMPS_OOC_END_FACTO(id,IERR)
3730 IF (id%ASSOCIATED_OOC_FILES) THEN
3731 id%ASSOCIATED_OOC_FILES = .FALSE.
3733.LT..AND..GE.
IF (IERR0 id%INFO(1) 0) id%INFO(1) = IERR
3735 IF (WK_USER_PROVIDED) THEN
3738.NE.
ELSE IF (KEEP(201)0) THEN
3746 IF (associated(id%S)) DEALLOCATE(id%S)
3747 NULLIFY(id%S) ! in all cases
3750 ELSE ! host not working
3751 IF (WK_USER_PROVIDED) THEN
3755 IF (associated(id%S)) DEALLOCATE(id%S)
3756 NULLIFY(id%S) ! in all cases
3764 IF ( I_AM_SLAVE ) THEN
3765 CALL ZMUMPS_LOAD_END( id%INFO(1), id%NSLAVES, IERR )
3766.LT..AND..GE.
IF (IERR0 id%INFO(1) 0) id%INFO(1) = IERR
3768 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
3769 & id%COMM, id%MYID )
3781 IF (RHS_MUMPS_ALLOCATED) DEALLOCATE(RHS_MUMPS)
3784 id%KEEP8(26) = KEEP826_SAVE
3786 120 FORMAT(/' local redistrib:
data local/sent =
',I16,I16)
3787 125 FORMAT(/' redistrib: total
data local/sent =
',I16,I16)
3788 130 FORMAT(//'****** factorization step ********
'/)
3790 & /' elapsed time to reformat/distribute matrix =
',F12.4)
3791 166 FORMAT(' max difference from 1 after scaling
the entries
',
3792 & ' for one-
norm(option 7/8) =
',D9.2)
3793 170 FORMAT(' statistics prior numerical factorization ...
'/
3794 & ' Size of internal working array s =
',I16/
3795 & ' Size of internal working array is =
',I16/
3796 & ' minimum(icntl(14)=0)
size of s =
',I16/
3797 & ' minimum(icntl(14)=0)
size of is =
',I16/
3798 & ' real space
for original matrix =
',I16/
3799 & ' Integer space for original matrix =
',I16/
3800 & ' info(3) real space for factors(estimated) =
',I16/
3801 & ' info(4)
Integer space for factors (estim.) =
',I16/
3802 & ' maximum frontal
size (estimated) =
',I16)
3803 172 FORMAT(' global statistics prior numerical factorization ...
'/
3804 & ' number of working processes =
',I16/
3805 & ' icntl(22) out-of-core option =
',I16/
3806 & ' icntl(35) blr activation(eff. choice) =
',I16/
3807 & ' icntl(14) memory relaxation =
',I16/
3808 & ' infog(3) real space for factors(estimated)=',i16/
3809 &
' INFOG(4) Integer space for factors (estim.)=',i16/
3810 &
' Maximum frontal size (estimated) =',i16/
3811 &
' Number of nodes in the tree =',i16/
3812 &
' ICNTL(23) Memory allowed (value on host) =',i16/
3813 &
' Sum over all procs =',i16/
3814 &
' Memory provided by user, sum of LWK_USER =',i16/
3815 &
' Effective threshold for pivoting, CNTL(1) =',d16.4)
3816 173
FORMAT(
' Perform forward during facto, NRHS =',i16)
3817 174
FORMAT(
' KEEP(268) Relaxed pivoting effective value =',i16)
3818 180
FORMAT(/
' Elapsed time for factorization =',f12.4)
3819 185
FORMAT(/
' Elapsed time for (failed) factorization =',f12.4)
3820 187
FORMAT(
' Elapsed time under L0 =',f12.4)
3821 188
FORMAT(
' Elapsed time under L0 (avg/max across MPI) =',
3823 189
FORMAT(/
' Flops under L0 layer =',1pd12.3)
3824 190
FORMAT(/
' Flops under L0 Layer (avg/max across MPI) =',
382699977
FORMAT(
' INFOG(34) Determinant (base 2 exponent) =',i16)
382799978
FORMAT(
' RINFOG(12) Determinant (real part) =',f16.8)
382899979
FORMAT(
' RINFOG(12) Determinant (imaginary part) =',f16.8)
382999980
FORMAT(
' Extra copies due to In-Place stacking =',i16)
383099981
FORMAT(
' INFOG(14) Number of memory compress =',i16)
383199982
FORMAT(
' INFOG(13) Number of delayed pivots =',i16)
383299983
FORMAT(
' Nb of singularities detected by ICNTL(56) =',i16)
383399991
FORMAT(
' Nb of null pivots detected by ICNTL(24) =',i16)
383499992
FORMAT(
' INFOG(28) Estimated deficiency =',i16)
383599984
FORMAT(/
'Leaving factorization with ...'/
3836 &
' RINFOG(2) Operations in node assembly =',1pd10.3/
3837 &
' ------(3) Operations in node elimination =',1pd10.3/
3838 &
' ICNTL (8) Scaling effectively used =',i16/
3839 &
' INFOG (9) Real space for factors =',i16/
3840 &
' INFOG(10) Integer space for factors =',i16/
3841 &
' INFOG(11) Maximum front size =',i16/
3842 &
' INFOG(29) Number of entries in factors =',i16)
384399985
FORMAT(
' INFOG(12) Number of off diagonal pivots =',i16)
384499986
FORMAT(
' INFOG(25) Number of tiny pivots(static) =',i16)
384599988
FORMAT(
' Number of 2x2 pivots in type 1 nodes =',i16)
384699989
FORMAT(
' Number of 2x2 pivots in type 2 nodes =',i16)
3929 TYPE(zmumps_struc) :: id
3935 include
'mumps_tags.h'
3936 include
'mumps_headers.h'
3937 INTEGER :: STATUS(MPI_STATUS_SIZE)
3939 INTEGER,
PARAMETER :: MASTER = 0
3940 INTEGER :: ID_SCHUR, SIZE_SCHUR, LD_SCHUR, IB, BL4
3942 INTEGER :: ROW_LENGTH, I
3943 INTEGER(8) :: SURFSCHUR8, BL8, SHIFT8
3944 INTEGER(8) :: ISCHUR_SRC, ISCHUR_DEST, ISCHUR_SYM, ISCHUR_UNS
3949 INTEGER MUMPS_PROCNODE
3950 EXTERNAL MUMPS_PROCNODE
3952 IF (id%INFO(1) .LT. 0)
RETURN
3954 IF (id%KEEP(60) .EQ. 0)
RETURN
3956 id_schur =mumps_procnode(
3957 & id%PROCNODE_STEPS(id%STEP(
max(id%KEEP(20),id%KEEP(38)))),
3959 IF ( id%KEEP( 46 ) .NE. 1 )
THEN
3960 id_schur = id_schur + 1
3963 IF (id%MYID.EQ.id_schur)
THEN
3964 IF (id%KEEP(60).EQ.1)
THEN
3967 & id%IS(id%PTLUST_S(id%STEP(id%KEEP(20)))+2+id%KEEP(ixsz))
3968 size_schur = ld_schur - id%KEEP(253)
3972 size_schur = id%root%TOT_ROOT_SIZE
3974 ELSE IF (id%MYID .EQ. master)
THEN
3975 size_schur = id%KEEP(116)
3981 surfschur8 = int(size_schur,8)*int(size_schur,8)
3987 IF (id%KEEP(60) .GT. 1)
THEN
3988 IF (id%KEEP(221).EQ.1 .AND. id%KEEP(252).GT.0)
THEN
3989 DO i = 1, id%KEEP(253)
3990 IF (id_schur.EQ.master)
THEN
3991 CALL zcopy(size_schur,
3992 & id%root%RHS_CNTR_MASTER_ROOT((i-1)*size_schur+1), 1,
3993 & id%REDRHS((i-1)*id%LREDRHS+1), 1)
3995 IF (id%MYID.EQ.id_schur)
THEN
3998 & id%root%RHS_CNTR_MASTER_ROOT((i-1)*size_schur+1),
4000 & mpi_double_complex,
4001 & master, tag_schur,
4005 CALL mpi_recv( id%REDRHS((i-1)*id%LREDRHS+1),
4007 & mpi_double_complex, id_schur, tag_schur,
4008 & id%COMM, status, ierr )
4016 IF (id%MYID.EQ.id_schur)
THEN
4017 DEALLOCATE(id%root%RHS_CNTR_MASTER_ROOT)
4018 NULLIFY (id%root%RHS_CNTR_MASTER_ROOT)
4031 IF (id%KEEP(252).EQ.0)
THEN
4034 IF ( id_schur .EQ. master )
THEN
4039 & id%S(id%PTRFAC(id%STEP(id%KEEP(20)))),
4047 bl8=int(huge(i4)/id%KEEP(35)/10,8)
4048 DO ib=1, int((surfschur8+bl8-1_8) / bl8)
4049 shift8 = int(ib-1,8) * bl8
4050 bl4 = int(
min(bl8,surfschur8-shift8))
4051 IF ( id%MYID .eq. id_schur )
THEN
4054 & id%PTRFAC(id%IS(id%PTLUST_S(id%STEP(id%KEEP(20)))
4055 & +4+id%KEEP(ixsz)))),
4057 & mpi_double_complex,
4058 & master, tag_schur,
4060 ELSE IF ( id%MYID .eq. master )
THEN
4062 CALL mpi_recv( id%SCHUR(1_8 + shift8),
4064 & mpi_double_complex, id_schur, tag_schur,
4065 & id%COMM, status, ierr )
4074 ischur_src = id%PTRFAC(id%IS(id%PTLUST_S(id%STEP(id%KEEP(20)))
4075 & +4+id%KEEP(ixsz)))
4078 row_length = size_schur
4079 IF (id_schur.EQ.master)
THEN
4080 CALL zcopy(row_length, id%S(ischur_src), 1,
4081 & id%SCHUR(ischur_dest),1)
4083 IF (id%MYID.EQ.id_schur)
THEN
4085 CALL mpi_send( id%S(ischur_src), row_length,
4086 & mpi_double_complex,
4087 & master, tag_schur,
4091 CALL mpi_recv( id%SCHUR(ischur_dest),
4093 & mpi_double_complex, id_schur, tag_schur,
4094 & id%COMM, status, ierr )
4097 ischur_src = ischur_src+int(ld_schur,8)
4098 ischur_dest= ischur_dest+int(size_schur,8)
4105 IF (id%KEEP(221).EQ.1)
THEN
4106 ischur_sym = id%PTRFAC(id%IS(id%PTLUST_S(id%STEP(id%KEEP(20)))
4107 & +4+id%KEEP(ixsz))) + int(size_schur,8) *
4110 & id%PTRFAC(id%IS(id%PTLUST_S(id%STEP(id%KEEP(20)))
4111 & +4+id%KEEP(ixsz))) + int(size_schur,8)
4113 DO i = 1, id%KEEP(253)
4114 IF (id_schur .EQ. master)
THEN
4115 IF (id%KEEP(50) .EQ. 0)
THEN
4116 CALL zcopy(size_schur, id%S(ischur_uns), ld_schur,
4117 & id%REDRHS(ischur_dest), 1)
4119 CALL zcopy(size_schur, id%S(ischur_sym), 1,
4120 & id%REDRHS(ischur_dest), 1)
4123 IF (id%MYID .NE. master)
THEN
4124 IF (id%KEEP(50) .EQ. 0)
THEN
4127 CALL zcopy(size_schur, id%S(ischur_uns), ld_schur,
4128 & id%S(ischur_sym), 1)
4130 CALL mpi_send(id%S(ischur_sym), size_schur,
4131 & mpi_double_complex, master, tag_schur,
4134 CALL mpi_recv(id%REDRHS(ischur_dest),
4135 & size_schur, mpi_double_complex, id_schur, tag_schur,
4136 & id%COMM, status, ierr )
4139 IF (id%KEEP(50).EQ.0)
THEN
4140 ischur_uns = ischur_uns + int(ld_schur,8)
4142 ischur_sym = ischur_sym + int(ld_schur,8)
4144 ischur_dest = ischur_dest + int(id%LREDRHS,8)