26#if ! defined(NO_FDM_DESCBAND)
29#if ! defined(NO_FDM_MAPROW)
48 TYPE (CMUMPS_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) :: K34
72 TYPE(cmumps_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) :: , NSEND_TOT8
88 INTEGER(8) :: NLOCAL8, NLOCAL_TOT8
90 INTEGER :: LDPTRAR, NELT_arg, NBRECORDS
92 INTEGER :: , 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 :: CMUMPS_LBUFR, CMUMPS_LBUFR_BYTES
103 INTEGER(8) :: CMUMPS_LBUFR_BYTES8
104 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: BUFR
106 INTEGER :: , CMUMPS_LBUF_INT
107 INTEGER(8) :: CMUMPS_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
124 INTEGER(8) :: MAXS_ARG
125 COMPLEX,
TARGET :: S_DUMMY_ARG(1)
126 COMPLEX,
POINTER,
DIMENSION(:) :: S_PTR_ARG
127 INTEGER NB_THREADS, NOMP
128 DOUBLE 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, 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, , EARLYT3ROOTINS
147 LOGICAL PRINT_MAXAVG, PRINT_NODEINFO
148 REAL :: ANORMINF, SEUIL, , 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
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
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
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 COMPLEX,
DIMENSION(:),
ALLOCATABLE :: WK
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 COMPLEX,
DIMENSION(:),
POINTER :: MYA_loc
231 INTEGER,
TARGET :: DUMMYIRN_loc(1), DUMMYJCN_loc(1)
232 COMPLEX,
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,
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
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 & .NE.
' ERROR: Transpose system (ICNTL(9)0) not ',
712 &
' compatible with forward performed during',
713 &
' factorization (ICNTL(32)=1)'
719 IF (id%INFO(1).LT.0)
GOTO 530
725 IF ( icntl(23) .GT. 0 )
THEN
731 & mpi_sum, id%COMM, ierr)
732 IF ( id%MYID.EQ.master )
THEN
734 itmp =
max(icntl(23),0)
737 & master, id%COMM, ierr )
740 IF ( itmp .GT. 0 .AND. jtmp .EQ. 1 )
THEN
749 id%KEEP8(4) = itmp8 * 1000000_8
751 CALL mpi_reduce( id%KEEP8(4), itmp8, 1, mpi_integer8,
752 & mpi_sum, master, id%COMM, ierr
753 itmp8 = itmp8 / 1000000_8
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 IF (keep(201).LE.0)
THEN
768 ELSE IF (keep(201).EQ.2)
THEN
770 keep(ixsz)=xsize_ooc_nopanel
771 ELSE IF (keep(201).EQ.1)
THEN
773 IF (keep(50).EQ.0)
THEN
774 keep(ixsz)=xsize_ooc_unsym
776 keep(ixsz)=xsize_ooc_sym
779 IF ( keep(486) .NE. 0 )
THEN
788 IF (id%MYID.EQ.master) keep(258)=icntl(33)
789 CALL mpi_bcast(keep(258), 1, mpi_integer,
790 & master, id%COMM, ierr)
791 IF (keep(258) .NE. 0)
THEN
816 & master, id%COMM, ierr)
817 lscal = ((keep(52) .GT. 0) .AND. (keep(52) .LE. 8))
820 IF ( id%MYID.EQ.master )
THEN
827 IF (keep(52) .EQ. 7)
THEN
832 ELSEIF (keep(52) .EQ. 8)
THEN
838 CALL mpi_bcast(id%DKEEP(3),1,mpi_real,master,
841 IF ( ((keep(52).EQ.7).OR.(keep(52).EQ.8)) .AND.
842 & keep(54).NE.0 )
THEN
849 IF ( id%MYID .NE. 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)
879 IF (id%INFO(1).LT.0)
GOTO 517
884 ALLOCATE(wk_real(lwk_real),
886 IF (allocok > 0)
THEN
893 IF (id%INFO(1).LT.0)
GOTO 517
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
926 IF (id%INFO(1).LT.0)
GOTO 517
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 ELSE IF ( keep(54) .EQ. 0 )
THEN
950 IF ((keep(52).EQ.7).OR.(keep(52).EQ.8))
THEN
954 IF (id%MYID.EQ.master)
THEN
957 colour = mpi_undefined
960 & comm_for_scaling, ierr )
961 IF (id%MYID.EQ.master)
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
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
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)
1027 & master, id%COMM, ierr )
1028 IF (id%MYID.EQ.master)
THEN
1035 IF (id%INFO(1).LT.0)
GOTO 517
1036 ELSE IF (id%MYID.EQ.master)
THEN
1040 IF (keep(52).GT.0 .AND. keep(52).LE.6)
THEN
1045 IF ( keep(52) .eq. 5 .or.
1046 & keep(52) .eq. 6 )
THEN
1056 ALLOCATE( wk_real( lwk_real ), stat = ierr )
1057 IF ( ierr .GT. 0 )
THEN
1059 id%INFO(2) = lwk_real
1062 ALLOCATE( wk( lwk ), stat = ierr )
1063 IF ( ierr .GT. 0 )
THEN
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 )
1077 IF (keep(125).NE.0)
THEN
1083 IF ((keep(60).GT.0) .and. (keep(116).GT.0))
THEN
1085 IF ( ((keep(52).EQ.7).OR.(keep(52).EQ.8)) .AND.
1086 & keep(54).NE.0 )
THEN
1089 IF (id%SYM_PERM(i).GT.id%N-keep(116))
THEN
1094 ELSE IF ( id%MYID .EQ. master)
THEN
1097 IF (id%SYM_PERM(i).GT.id%N-keep(116))
THEN
1105 IF (id%MYID.EQ.master)
THEN
1107 id%DKEEP(92)=real(timeet)
1111 IF (prokg.AND.(keep(52).EQ.7.OR.keep(52).EQ.8)
1112 & .AND. (k233+k231+k232).GT.0)
THEN
1113 IF (k232.GT.0)
WRITE(mpg, 166) id%DKEEP(4)
1119 lscal = (lscal .OR. (keep(52) .EQ. -1) .OR. keep(52) .EQ. -2)
1120 IF (lscal .AND. keep(258).NE.0 .AND. id%MYID .EQ. master)
THEN
1126 IF (keep(50) .EQ. 0)
THEN
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 IF ( id%MYID.EQ.master.AND. keep(252).EQ.1 .AND.
1171 & id%NRHS .NE. id%KEEP(253) )
THEN
1175 id%INFO(2)=id%KEEP(253)
1179 IF (id%KEEP(252) .EQ. 1)
THEN
1180 IF ( id%MYID.NE.master )
THEN
1182 id%KEEP(255) = n*id%KEEP(253)
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
1195 id%KEEP(255)=id%LRHS*(id%KEEP(253)-1)+id%N
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.
1224 & id%COMM, id%MYID )
1225 IF ( id%INFO(1).lt.0 )
GOTO 517
1226 IF (keep(252) .EQ. 1)
THEN
1232 DO i= 1, id%KEEP(253)
1233 CALL mpi_bcast(rhs_mumps((i-1)*id%KEEP(254)+1), n,
1234 & mpi_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 IF (keep(110).NE.1) keep(110)=0
1244 IF (keep(219).NE.0)
THEN
1246 IF (ierr .NE. 0)
THEN
1251 id%INFO(2) =
max(keep
1267 IF (id%MYID .EQ. master) cntl3 = id%CNTL(3)
1269 & master, id%COMM, ierr)
1270 IF (id%MYID .EQ. master) cntl5 = id%CNTL(5)
1272 & master, id%COMM, ierr)
1273 IF (id%MYID .EQ. master) cntl6 = id%CNTL(6)
1275 & master, id%COMM, ierr)
1276 IF (id%MYID .EQ. master) id%DKEEP(8) = id%CNTL(7)
1277 CALL mpi_bcast(id%DKEEP(8), 1, mpi_real,
1278 & master, id%COMM, ierr)
1279 id%DKEEP(11) = id%DKEEP(8)/id%KEEP(461)
1280 id%DKEEP(12) = id%DKEEP(8)/id%KEEP
1281 IF (keep(486).EQ.0) id%DKEEP(8) = zero
1282 compute_anorminf = .false.
1283 IF ( (keep(486) .NE. 0).AND. (id%DKEEP(8).LT.zero))
THEN
1284 compute_anorminf = .true.
1286 IF (keep(19).NE.0)
THEN
1288 compute_anorminf = .true.
1290 IF (keep(110).NE.0)
THEN
1292 compute_anorminf = .true.
1294 IF (id%DKEEP(8).LT.zero)
THEN
1296 IF (compute_anorminf)
THEN
1303 id%DKEEP(8) = abs(id%DKEEP(8))*anorminf
1305 IF ((keep(60).GT.0).AND.keep(116).GT.0) anorminf=zero
1311 IF (compute_anorminf)
THEN
1313 IF (keep(60).GT.0) eff_size_schur = keep(116)
1319 IF ((keep(19).NE.0).OR.(keep(110).NE.0))
THEN
1321 IF (keep(19).NE.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 IF (keep(19).EQ.0)
THEN
1341 IF (cntl3 .LT. zero)
THEN
1342 id%DKEEP(9) = abs(cntl(3))
1343 ELSE IF (cntl3 .GT. zero
THEN
1344 id%DKEEP(9) = cntl3*anorminf
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 IF (id%DKEEP(13).LT.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 IF (keep(110).EQ.0)
THEN
1373 id%DKEEP(1) = -1.0e0
1377 IF (keep(19).NE.0)
THEN
1382 IF ((id%DKEEP(10).LE.0).OR.(id%DKEEP(10).GT.1))
THEN
1384 id%DKEEP(1) = id%DKEEP(9)*1e-1
1386 id%DKEEP(1) = id%DKEEP(9)*id%DKEEP(10)
1392 IF (cntl3 .LT. zero)
THEN
1393 id%DKEEP(1) = abs(cntl(3))
1394 ELSE IF (cntl3 .GT. zero)
THEN
1395 id%DKEEP(1) = cntl3*anorminf
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(real(npiv_critical_path))*eps*anorminf
1404 IF ((keep(110).NE.0).AND.(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
1410 IF (cntl5.GT.zero)
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 IF (id%KEEP(50).EQ.0)
THEN
1420 id%DKEEP(2) = -
max(1.0e10*anorminf,
1421 & sqrt(huge(anorminf))/1.0e8)
1429 IF (keep(53).NE.0)
THEN
1430 id_root =mumps_procnode(id%PROCNODE_STEPS(id%STEP(keep(20))),
1432 IF ( keep( 46 ) .NE. 1 )
THEN
1433 id_root = id_root + 1
1439 IF (
associated( id%PIVNUL_LIST) )
DEALLOCATE(id%PIVNUL_LIST)
1440 IF(keep(110) .EQ. 1)
THEN
1443 IF (keep(19).NE.0 .AND.
1444 & (id_root.EQ.id%MYID .OR. id%MYID.EQ.master))
THEN
1447 ALLOCATE( id%PIVNUL_LIST(lpn_list),stat = ierr )
1448 IF ( ierr .GT. 0 )
THEN
1452 id%PIVNUL_LIST(1:lpn_list) = 0
1456 & id%COMM, id%MYID )
1457 IF ( id%INFO(1).lt.0 )
GOTO 517
1463 IF ((keep(19).EQ.0).AND.(keep(110).EQ.0))
THEN
1464 IF (id%MYID .EQ. master) cntl4 = id%CNTL(4)
1466 & master, id%COMM, ierr )
1468 IF ( cntl4 .GE. zero )
THEN
1470 IF ( cntl4 .EQ. zero )
THEN
1472 IF(anorminf .EQ. zero)
THEN
1474 IF (keep(60).GT.0) eff_size_schur = keep(116)
1478 seuil = sqrt(eps) * anorminf
1482 seuil_ldlt_niv2 = seuil
1509 & maxs_base8, maxs_base_relaxed8,
1511 & id%KEEP(1), id%KEEP8(1))
1513 maxs = maxs_base_relaxed8
1514 IF (wk_user_provided)
THEN
1519 & id%COMM, id%MYID )
1520 IF (id%INFO(1) .LT. 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 IF (id%KEEP8(4) .NE. 0_8)
THEN
1530 IF ( .NOT. wk_user_provided )
THEN
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)
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)
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
1563 &
size(id%I8_L0_OMP,2)
1566 IF (keep(400) .GT.0)
THEN
1572 id%KEEP8(76) = id%KEEP8(75)
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)
1592 IF (i_am_slave)
THEN
1593 IF ( (keep(400).GT.0) .AND. (keep(406).EQ.2) )
THEN
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)
1608 & id%COMM, id%MYID )
1609 IF (id%INFO(1) .LT. 0)
THEN
1615 & id%COMM,
" Effective size of S (based on INFO(39))= ")
1617 IF ( i_am_slave )
THEN
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))
1641 IF (keep(201) .GT. 0)
THEN
1646 & .AND.keep(50).EQ.0
1647 & .AND.keep(251).NE.2
1649 id%OOC_NB_FILE_TYPE=2
1651 id%OOC_NB_FILE_TYPE=1
1656 IF (keep(205) .GT. 0)
THEN
1657 keep(100) = keep(205)
1659 IF (keep(201).EQ.1)
THEN
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 IF (keep(201).EQ.1)
THEN
1674 IF ( keep(99) < 3 )
THEN
1675 keep(99) = keep(99) + 3
1682 IF (keep(99) .LT.3) keep(100)=0
1683 IF((dble(keep(100))*dble(keep(35))/dble(2)).GT.
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 IF ( ierr .GT. 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 IF ( ierr .GT. 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 IF ( ierr .GT. 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 IF ( ierr .GT. 0 )
THEN
1720 id%INFO(2) = id%OOC_NB_FILE_TYPE*keep(28)
1721 NULLIFY(id%OOC_VADDR)
1727 & id%COMM, id%MYID )
1728 IF (id%INFO(1) < 0)
THEN
1732 IF (i_am_slave)
THEN
1733 IF (keep(201) .GT. 0)
THEN
1734 IF ((keep(201).EQ.1).OR.(keep(201).EQ.2))
THEN
1737 WRITE(*,*)
"Internal error in CMUMPS_FAC_DRIVER"
1740 IF(id%INFO(1).LT.0)
THEN
1748 & id%KEEP(1),id%KEEP8(1))
1749 IF (id%INFO(1).LT.0)
GOTO 111
1754 earlyt3rootins = keep(200) .EQ.0
1755 & .OR. ( keep(200) .LT. 0 .AND. keep(400) .EQ. 0 )
1756#if defined (LARGEMATRICES)
1757 IF ( id%MYID .ne. master )
THEN
1759 IF (.NOT.wk_user_provided)
THEN
1760 IF ( earlyt3rootins )
THEN
1762 ALLOCATE (id%S(maxs),stat=ierr)
1764 IF ( ierr .GT. 0 )
THEN
1775 id%S => id%WK_USER(1:id%KEEP8(24))
1778#if defined (LARGEMATRICES)
1783 & id%COMM, id%MYID )
1784 IF ( id%INFO(1).LT.0 )
GOTO 514
1789 nb_active_fronts_estim = 3
1793 nb_active_fronts_estim = 3*nb_threads
1794 IF (i_am_slave)
THEN
1798 IF ( (keep(486).EQ.2)
1799 & .OR. ((keep(489).NE.0).AND.(keep(400).GT.1))
1804 nb_fronts_f_estim = keep(470)
1806 IF (keep(489).NE.0)
THEN
1810 nb_fronts_f_estim = 2*nb_active_fronts_estim
1812 nb_fronts_f_estim = nb_active_fronts_estim
1816 IF (id%INFO(1) .LT. 0 )
GOTO 114
1817#if ! defined(NO_FDM_DESCBAND)
1821#if ! defined(NO_FDM_MAPROW)
1829 & id%COMM, id%MYID )
1831 IF ( id%INFO(1).LT.0 )
GOTO 500
1840 IF ( keep(55) .eq. 0 )
THEN
1846 IF (
associated( id%DBLARR
THEN
1847 DEALLOCATE(id%DBLARR)
1850 IF ( i_am_slave .and. id%KEEP8(26) .ne. 0_8 )
THEN
1851 ALLOCATE( id%DBLARR( id%KEEP8(26) ), stat = ierr )
1853 ALLOCATE( id%DBLARR( 1 ), stat =ierr )
1855 IF ( ierr .NE. 0 )
THEN
1857 WRITE(lp,*) id%MYID,
1858 &
': Allocation error for DBLARR(',id%KEEP8(
')'
1869 IF (
associated( id%INTARR ) )
THEN
1870 DEALLOCATE( id%INTARR )
1871 NULLIFY( id%INTARR )
1873 IF ( i_am_slave .and. id%KEEP8(27) .ne. 0_8 )
THEN
1874 ALLOCATE( id%INTARR( id%KEEP8(27) ), stat = allocok )
1875 IF ( allocok .GT. 0 )
THEN
1882 ALLOCATE( id%INTARR(1),stat=allocok )
1883 IF ( allocok .GT. 0 )
THEN
1895 IF (
associated( id%DBLARR))
THEN
1896 DEALLOCATE(id%DBLARR)
1899 IF ( i_am_slave )
THEN
1900 IF ( id%MYID_NODES .eq. master
1901 & .AND. keep(46) .eq. 1
1902 & .AND. keep(52) .eq. 0 )
THEN
1906 id%DBLARR => id%A_ELT
1911 IF ( id%KEEP8(26) .ne. 0_8 )
THEN
1912 ALLOCATE( id%DBLARR( id%KEEP8(26) ), stat = allocok )
1913 IF ( allocok .GT. 0 )
THEN
1920 ALLOCATE( id%DBLARR(1), stat = allocok )
1921 IF ( allocok .GT. 0 )
THEN
1930 ALLOCATE( id%DBLARR(1), stat = allocok )
1931 IF ( allocok .GT. 0 )
THEN
1943 IF ( keep(38).NE.0 .AND. i_am_slave )
THEN
1945 & id%root, id%FILS(1), keep(38), id%KEEP(1), id%INFO(1) )
1954 & id%COMM, id%MYID )
1955 IF ( id%INFO(1).LT.0 )
GOTO 500
1973 IF (earlyt3rootins)
THEN
1977 s_ptr_arg => s_dummy_arg
1981 IF ( keep( 55 ) .eq. 0 )
THEN
2007 IF (earlyt3rootins .AND. keep(38).NE.0 .AND.
2008 & keep(60) .EQ.0 .AND. 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 IF (maxs .LT. int(lwk,8))
THEN
2027 & id%COMM, id%MYID )
2028 IF ( id%INFO(1).LT.0 )
GOTO 500
2030 IF ( keep(54) .eq. 0 )
THEN
2036 IF ( id%MYID .eq. master )
THEN
2037 ALLOCATE(iwk(id%N), stat=allocok)
2038 IF ( allocok .NE. 0 )
THEN
2042#if defined(LARGEMATRICES)
2043 ALLOCATE (wk(lwk),stat=ierr)
2044 IF ( ierr .GT. 0 )
THEN
2047 write(6,*)
' PB1 ALLOC LARGEMAT'
2052 & id%COMM, id%MYID )
2053 IF ( id%INFO(1).LT.0 )
GOTO 500
2054 IF ( id%MYID .eq. master )
THEN
2063 IF ( .not.
associated( id%INTARR ) )
THEN
2064 ALLOCATE( id%INTARR( 1 ),stat=ierr)
2065 IF ( ierr .GT. 0 )
THEN
2069 write(6,*)
' PB2 ALLOC INTARR'
2073 nbrecords = keep(39)
2074 IF (id%KEEP8(28) .LT. int(nbrecords,8))
THEN
2075 nbrecords = int(id%KEEP8(28))
2077#if defined(LARGEMATRICES)
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),
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 IF (.NOT.wk_user_provided)
THEN
2099 IF (earlyt3rootins)
THEN
2100 ALLOCATE (id%S(maxs),stat=ierr)
2102 IF ( ierr .GT. 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)
2121 & id%IRN(1), id%JCN(1), id%SYM_PERM
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 IF (id%KEEP8(28) .LT. int(nbrecords,8))
THEN
2138 nbrecords = int(id%KEEP8(28))
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 IF (id%MYID.EQ.master)
THEN
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 IF (nz_locmax8 .LT. int(nbrecords,8))
THEN
2175 nbrecords = int(nz_locmax8)
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 IF ( ( keep(52).EQ.7 ).OR. (keep(52).EQ.8) )
THEN
2202 IF ( id%MYID > 0 )
THEN
2203 IF (
associated(id%ROWSCA))
THEN
2204 DEALLOCATE(id%ROWSCA)
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
2301 id%DKEEP(93) = real(time)
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
2318 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
2319 & id%COMM, id%MYID )
2320.LT.
IF ( id%INFO( 1 ) 0 ) GOTO 500
2325.EQ.
IF (id%MYIDMASTER) CALL MUMPS_SECDEB(TIME)
2330 IF ( I_AM_SLAVE ) THEN
2331 CALL CMUMPS_BUF_INI_MYID(id%MYID_NODES)
2347.NE.
IF (KEEP(486)0) THEN
2348 CMUMPS_LBUFR_BYTES8 = int(KEEP( 380 ),8) * int(KEEP( 35 ),8)
2350 CMUMPS_LBUFR_BYTES8 = int(KEEP( 44 ),8) * int(KEEP( 35 ),8)
2355 CMUMPS_LBUFR_BYTES8 = max( CMUMPS_LBUFR_BYTES8,
2357.NE..AND..GT..AND.
IF ((KEEP(50)0)(KEEP(489)0)
2358.GE.
& (id%NSLAVES2)) THEN
2363 RATIOK465 = real(KEEP465COPY)/real(1000)
2364 CMUMPS_LBUFR_BYTES8 = max (CMUMPS_LBUFR_BYTES8,
2368 & int(KEEP(2)+1,8)*int(KEEP(142),8)*int(KEEP(35),8)
2390.EQ.
IF (KEEP(48)5) THEN
2396 CMUMPS_LBUFR_BYTES8 = CMUMPS_LBUFR_BYTES8
2397 & + int( 2.0E0 * real(max(PERLU,MIN_PERLU))*
2398 & real(CMUMPS_LBUFR_BYTES8)/100E0, 8)
2399 CMUMPS_LBUFR_BYTES8 = min(CMUMPS_LBUFR_BYTES8,
2400 & int(huge(I4)-100,8))
2401 CMUMPS_LBUFR_BYTES = int( CMUMPS_LBUFR_BYTES8 )
2402 IF (KEEP(48)==5) THEN
2407 id%KEEP8(21) = id%KEEP8(22) +
2408 & int( real(max(PERLU,MIN_PERLU))*
2409 & real(id%KEEP8(22))/100E0,8)
2419.NE.
IF (KEEP(486)0) THEN
2420 CMUMPS_LBUF8 = int( real(KEEP(213)) / 100.0E0 *
2421 & real(KEEP(379)) * real(KEEP(35)), 8 )
2423 CMUMPS_LBUF8 = int( real(KEEP(213)) / 100.0E0 *
2424 & real(KEEP(43)) * real(KEEP(35)), 8 )
2426 CMUMPS_LBUF8 = max( CMUMPS_LBUF8, 100000_8 )
2427 CMUMPS_LBUF8 = CMUMPS_LBUF8
2428 & + int( 2.0E0 * real(max(PERLU,MIN_PERLU))*
2429 & real(CMUMPS_LBUF8)/100E0, 8)
2431 CMUMPS_LBUF8 = min(CMUMPS_LBUF8, int(huge(I4)-100,8))
2436 CMUMPS_LBUF8 = max(CMUMPS_LBUF8, CMUMPS_LBUFR_BYTES8+3*KEEP(34))
2437 CMUMPS_LBUF = int(CMUMPS_LBUF8)
2438.EQ.
IF(id%KEEP(48)4)THEN
2439 CMUMPS_LBUFR_BYTES=CMUMPS_LBUFR_BYTES*5
2440 CMUMPS_LBUF=CMUMPS_LBUF*5
2452 CMUMPS_LBUF_INT = ( KEEP(56) + id%NSLAVES * id%NSLAVES ) * 5
2454.NE.
IF ( KEEP( 38 ) 0 ) THEN
2457 KKKK = MUMPS_PROCNODE( id%PROCNODE_STEPS(id%STEP(KEEP(38))),
2459.EQ.
IF ( KKKK id%MYID_NODES ) THEN
2460 CMUMPS_LBUF_INT = CMUMPS_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 ) CMUMPS_LBUFR_BYTES,
2471 & CMUMPS_LBUF, CMUMPS_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)
2482 CALL CMUMPS_BUF_ALLOC_SMALL_BUF( CMUMPS_LBUF_INT, IERR )
2483.NE.
IF ( IERR 0 ) THEN
2486 id%INFO(2)= (CMUMPS_LBUF_INT+KEEP(34)-1)/KEEP(34)
2488 WRITE(LP,*) id%MYID,
2499 CMUMPS_LBUFR = (CMUMPS_LBUFR_BYTES+KEEP(34)-1)/KEEP(34)
2500 ALLOCATE( BUFR( CMUMPS_LBUFR ),stat=IERR )
2501.NE.
IF ( IERR 0 ) THEN
2503 id%INFO(2) = CMUMPS_LBUFR
2506 & ': allocation error
for bufr(
', CMUMPS_LBUFR,
2507 & ') on mpi process
',id%MYID
2518.GT.
IF (KEEP(201)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.NE.
IF ( IERR 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.NE.
IF ( IERR 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.NE.
IF ( IERR 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.NE.
IF ( IERR 0 ) THEN
2594 id%INFO(2)=2 * id%KEEP(28)
2596 WRITE(LP,*) id%MYID,
2597 & ': allocation error
for iwkb(
', 2*id%KEEP(28),')
'
2610 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
2611 & id%COMM, id%MYID )
2612.LT.
IF ( id%INFO( 1 ) 0 ) GOTO 500
2614 IF ( I_AM_SLAVE ) THEN
2616 CALL CMUMPS_BUF_DIST_IRECV_SIZE( CMUMPS_LBUFR_BYTES )
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.eq.
IF ( KEEP(55) 0 ) THEN
2647 LDPTRAR = id%NELT + 1
2649.NE.
IF ( id%KEEP(55) 0 ) THEN
2659 IF (I_AM_SLAVE) THEN
2660 IF (associated(id%L0_OMP_MAPPING))
2661 & DEALLOCATE(id%L0_OMP_MAPPING)
2662.GT.
IF (KEEP(400) 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
2674 CALL CMUMPS_FREE_L0_OMP_FACTORS(id%L0_OMP_FACTORS)
2676.GT.
IF (KEEP(400) 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
2687 CALL CMUMPS_INIT_L0_OMP_FACTORS(id%L0_OMP_FACTORS)
2690 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
2691 & id%COMM, id%MYID )
2692.LT.
IF ( id%INFO( 1 ) 0 ) GOTO 500
2694 AVG_FLOPS = RINFOG(1)/(real(id%NSLAVES))
2695 id%DKEEP(17) = max ( id%DKEEP(18), AVG_FLOPS/real(50) )
2697.AND..EQ.
IF (PROKid%MYIDMASTER) THEN
2698.LE.
IF (id%NSLAVES1) 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 CMUMPS_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,CMUMPS_LBUFR
2728 & , CMUMPS_LBUFR_BYTES, CMUMPS_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(1),
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.eq.
IF ( KEEP(55) 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.eq.
IF ( id%MYID_NODES MASTER
2784.AND..eq.
& KEEP(46) 1
2785.AND..eq.
& KEEP(52) 0 ) THEN
2786 NULLIFY( id%DBLARR )
2788 IF (associated( id%DBLARR)) THEN
2789 DEALLOCATE(id%DBLARR)
2802.NE.
IF ( KEEP(19) 0 ) THEN
2803.NE.
IF ( KEEP(46) 1 ) THEN
2806.eq.
IF ( id%MYID 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.EQ.
ELSE IF ( id%MYID 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)
2825 CALL CMUMPS_BUF_DEALL_SMALL_BUF( IERR )
2827.NE.
IF (KEEP(219)0) THEN
2828 CALL CMUMPS_BUF_DEALL_MAX_ARRAY()
2835 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
2836 & id%COMM, id%MYID )
2838 CALL CMUMPS_EXTRACT_SCHUR_REDRHS(id)
2839.GT.
IF (KEEP(201) 0) THEN
2840.EQ..OR..EQ.
IF ((KEEP(201)1) (KEEP(201)2)) THEN
2841 IF ( I_AM_SLAVE ) THEN
2842 CALL CMUMPS_OOC_CLEAN_PENDING(IERR)
2848 CALL MUMPS_PROPINFO( id%ICNTL(1), id%INFO(1),
2849 & id%COMM, id%MYID )
2856.EQ.
IF (id%MYIDMASTER) THEN
2857 CALL MUMPS_SECFIN(TIME)
2858 id%DKEEP(94)=real(TIME)
2859.GT.
IF (KEEP(400)0) THEN
2861 id%DKEEP(96)=id%DKEEP(94)-id%DKEEP(95)
2867 MEM_EFF_ALLOCATED = .TRUE.
2868 CALL CMUMPS_MAX_MEM( id%KEEP(1),id%KEEP8(1),
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
2874 & , .FALSE. ! UNDER_L0_OMP
2875 & , id%I8_L0_OMP(1,1), size(id%I8_L0_OMP,1),
2876 & size(id%I8_L0_OMP,2)
2878.GT.
IF (KEEP(400) 0 ) THEN ! L0 activated
2879 CALL CMUMPS_MAX_MEM( id%KEEP(1),id%KEEP8(1),
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
2885 & , .TRUE. ! UNDER_L0_OMP
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.NE.
IF (id%KEEP8(24)0) THEN
2895 id%INFO(16) = TOTAL_MBYTES
2900 id%INFO(16) = TOTAL_MBYTES
2909 CALL MUMPS_MEM_CENTRALIZE( id%MYID, id%COMM,
2910 & id%INFO(16), id%INFOG(18), IRANK )
2911 CALL CMUMPS_PRINT_ALLOCATED_MEM( PROK, PROKG, PRINT_MAXAVG,
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.
2927 CALL CMUMPS_MAX_MEM( id%KEEP(1),id%KEEP8(1),
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
2933 & , .FALSE. ! UNDER_L0_OMP
2934 & , id%I8_L0_OMP(1,1), size(id%I8_L0_OMP,1),
2935 & size(id%I8_L0_OMP,2)
2937.GT.
IF (KEEP(400) 0 ) THEN ! L0 activated
2938 CALL CMUMPS_MAX_MEM( id%KEEP(1),id%KEEP8(1),
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
2944 & , .TRUE. ! UNDER_L0_OMP
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
2965 CALL MUMPS_MEM_CENTRALIZE( id%MYID, id%COMM,
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.0E0
3010 id%DKEEP(16) = 0.0E0
3012.GT.
IF (id%NPROCS 1) THEN
3014 CALL MPI_REDUCE(id%DKEEP(95), TMPTIME, 1,
3015 & MPI_REAL, MPI_SUM, MASTER, id%COMM, IERR)
3016.EQ.
IF (id%MYIDMASTER) TIMEAVG=dble(TMPTIME)
3017 CALL MPI_REDUCE(id%DKEEP(16), TMPFLOP, 1,
3018 & MPI_REAL, MPI_SUM, MASTER, id%COMM, IERR)
3019.EQ.
IF (id%MYIDMASTER) FLOPAVG=dble(TMPFLOP)
3020.EQ.
IF (id%MYIDMASTER) THEN
3021 TIMEAVG = TIMEAVG / id%NSLAVES
3022 FLOPAVG = FLOPAVG / id%NSLAVES
3024 CALL MPI_REDUCE(id%DKEEP(95), TMPTIME, 1,
3025 & MPI_REAL, MPI_MAX, MASTER, id%COMM, IERR)
3026.EQ.
IF (id%MYIDMASTER) TIMEMAX=dble(TMPTIME)
3027 CALL MPI_REDUCE(id%DKEEP(16), TMPFLOP, 1,
3028 & MPI_REAL, MPI_MAX, MASTER, id%COMM, IERR)
3029.EQ.
IF (id%MYIDMASTER) FLOPMAX=dble(TMPFLOP)
3032 WRITE(MPG,190) FLOPAVG, FLOPMAX
3033 WRITE(MPG,188) TIMEAVG, TIMEMAX
3038 WRITE(MPG,189) id%DKEEP(16)
3039 WRITE(MPG,187) id%DKEEP(95)
3044.GE.
IF (id%INFO(1) 0) THEN
3045 WRITE(MPG,180) id%DKEEP(94)
3047 WRITE(MPG,185) id%DKEEP(94)
3058 CALL MPI_REDUCE( RINFO(2), RINFOG(2), 2,
3060 & MPI_SUM, MASTER, id%COMM, IERR)
3064 CALL MPI_REDUCE( KEEP(246), KEEP(247), 1, MPI_INTEGER,
3065 & MPI_MAX, MASTER, id%COMM, IERR)
3068 CALL MPI_REDUCE( id%DKEEP(97), id%DKEEP(98), 1,
3070 & MPI_MAX, MASTER, id%COMM, IERR)
3072 CALL MPI_REDUCE( RINFO(2), RINFOG(2), 2,
3074 & MPI_SUM, MASTER, id%COMM, IERR)
3075 CALL MUMPS_REDUCEI8( id%KEEP8(31)+id%KEEP8(64),id%KEEP8(6),
3076 & MPI_SUM, MASTER, id%COMM )
3078.EQ.
IF (id%MYID0) THEN
3080 RINFOG(16) = real(id%KEEP8(6)*int(KEEP(35),8))/real(1E6)
3081.LE.
IF (KEEP(201)0) THEN
3085 CALL MUMPS_REDUCEI8( id%KEEP8(48),id%KEEP8(148), MPI_SUM,
3087 CALL MUMPS_SETI8TOI4(id%KEEP8(148), INFOG(9))
3089 CALL MPI_REDUCE( int(id%INFO(10),8), id%KEEP8(128),
3091 & MPI_SUM, MASTER, id%COMM, IERR)
3092.EQ.
IF (id%MYIDMASTER) THEN
3093 CALL MUMPS_SETI8TOI4(id%KEEP8(128), id%INFOG(10))
3096 CALL MPI_ALLREDUCE( id%INFO(11), INFOG(11), 1, MPI_INTEGER,
3097 & MPI_MAX, id%COMM, IERR)
3101 KEEP(133) = INFOG(11)
3102 CALL MPI_REDUCE( id%INFO(12), INFOG(12), 3, MPI_INTEGER,
3103 & MPI_SUM, MASTER, id%COMM, IERR)
3104 CALL MPI_REDUCE( KEEP(103), INFOG(25), 1, MPI_INTEGER,
3105 & MPI_SUM, MASTER, id%COMM, IERR)
3106 KEEP(229) = INFOG(25)
3107 CALL MPI_REDUCE( KEEP(105), INFOG(25), 1, MPI_INTEGER,
3108 & MPI_SUM, MASTER, id%COMM, IERR)
3109 KEEP(230) = INFOG(25)
3111 id%INFO(25) = KEEP(98)
3112 CALL MPI_ALLREDUCE( id%INFO(25), INFOG(25), 1, MPI_INTEGER,
3113 & MPI_SUM, id%COMM, IERR)
3115 CALL MUMPS_REDUCEI8( id%KEEP8(8), id%KEEP8(108), MPI_SUM,
3118 CALL MUMPS_SETI8TOI4(id%KEEP8(10), id%INFO(27))
3119 CALL MUMPS_REDUCEI8( id%KEEP8(10),id%KEEP8(110), MPI_SUM,
3121 CALL MUMPS_SETI8TOI4(id%KEEP8(110), INFOG(29))
3123 id%INFO(28) = id%INFO(27)
3124 INFOG(35) = INFOG(29)
3128.NE.
IF ( KEEP(486) 0 ) THEN !LR is activated
3130 RINFO(4) = real(FLOP_FRFRONTS + FLOP_FACTO_FR - FLOP_LRGAIN
3131 & + FLOP_COMPRESS + FLOP_FRFRONTS)
3135 ITMP8 = id%KEEP8(10) - int(MRY_LU_LRGAIN,8)
3136 CALL MUMPS_SETI8TOI4( ITMP8, id%INFO(28))
3138 CALL MPI_REDUCE( MRY_LU_LRGAIN, TMP_MRY_LU_LRGAIN
3139 & , 1, MPI_DOUBLE_PRECISION,
3140 & MPI_SUM, MASTER, id%COMM, IERR)
3141 CALL MPI_REDUCE( MRY_LU_FR, TMP_MRY_LU_FR
3142 & , 1, MPI_DOUBLE_PRECISION,
3143 & MPI_SUM, MASTER, id%COMM, IERR)
3144 CALL MPI_REDUCE( MRY_CB_FR, TMP_MRY_CB_FR
3145 & , 1, MPI_DOUBLE_PRECISION,
3146 & MPI_SUM, MASTER, id%COMM, IERR)
3147 CALL MPI_REDUCE( MRY_CB_LRGAIN, TMP_MRY_CB_LRGAIN
3148 & , 1, MPI_DOUBLE_PRECISION,
3149 & MPI_SUM, MASTER, id%COMM, IERR)
3150 CALL MPI_REDUCE( FLOP_LRGAIN, TMP_FLOP_LRGAIN
3151 & , 1, MPI_DOUBLE_PRECISION,
3152 & MPI_SUM, MASTER, id%COMM, IERR)
3153 CALL MPI_REDUCE( FLOP_TRSM_FR, TMP_FLOP_TRSM_FR
3154 & , 1, MPI_DOUBLE_PRECISION,
3155 & MPI_SUM, MASTER, id%COMM, IERR)
3156 CALL MPI_REDUCE( FLOP_TRSM_LR, TMP_FLOP_TRSM_LR
3157 & , 1, MPI_DOUBLE_PRECISION,
3158 & MPI_SUM, MASTER, id%COMM, IERR)
3159 CALL MPI_REDUCE( FLOP_UPDATE_FR, TMP_FLOP_UPDATE_FR
3160 & , 1, MPI_DOUBLE_PRECISION,
3161 & MPI_SUM, MASTER, id%COMM, IERR)
3162 CALL MPI_REDUCE( FLOP_UPDATE_LR, TMP_FLOP_UPDATE_LR
3163 & , 1, MPI_DOUBLE_PRECISION,
3164 & MPI_SUM, MASTER, id%COMM, IERR)
3165 CALL MPI_REDUCE( FLOP_FRSWAP_COMPRESS,
3166 & TMP_FLOP_FRSWAP_COMPRESS
3167 & , 1, MPI_DOUBLE_PRECISION,
3168 & MPI_SUM, MASTER, id%COMM, IERR)
3169 CALL MPI_REDUCE( FLOP_MIDBLK_COMPRESS,
3170 & TMP_FLOP_MIDBLK_COMPRESS
3171 & , 1, MPI_DOUBLE_PRECISION,
3172 & MPI_SUM, MASTER, id%COMM, IERR)
3173 CALL MPI_REDUCE( FLOP_UPDATE_LRLR3, TMP_FLOP_UPDATE_LRLR3
3174 & , 1, MPI_DOUBLE_PRECISION,
3175 & MPI_SUM, MASTER, id%COMM, IERR)
3176 CALL MPI_REDUCE(FLOP_ACCUM_COMPRESS, TMP_FLOP_ACCUM_COMPRESS
3177 & , 1, MPI_DOUBLE_PRECISION,
3178 & MPI_SUM, MASTER, id%COMM, IERR)
3179 CALL MPI_REDUCE( FLOP_TRSM, TMP_FLOP_TRSM
3180 & , 1, MPI_DOUBLE_PRECISION,
3181 & MPI_SUM, MASTER, id%COMM, IERR)
3182 CALL MPI_REDUCE( FLOP_PANEL, TMP_FLOP_PANEL
3183 & , 1, MPI_DOUBLE_PRECISION,
3184 & MPI_SUM, MASTER, id%COMM, IERR)
3185 CALL MPI_REDUCE( FLOP_FRFRONTS, TMP_FLOP_FRFRONTS
3186 & , 1, MPI_DOUBLE_PRECISION,
3187 & MPI_SUM, MASTER, id%COMM, IERR)
3188 CALL MPI_REDUCE( FLOP_COMPRESS, TMP_FLOP_COMPRESS
3189 & , 1, MPI_DOUBLE_PRECISION,
3190 & MPI_SUM, MASTER, id%COMM, IERR)
3191 CALL MPI_REDUCE( FLOP_DECOMPRESS, TMP_FLOP_DECOMPRESS
3192 & , 1, MPI_DOUBLE_PRECISION,
3193 & MPI_SUM, MASTER, id%COMM, IERR)
3194 CALL MPI_REDUCE( FLOP_CB_COMPRESS, TMP_FLOP_CB_COMPRESS
3195 & , 1, MPI_DOUBLE_PRECISION,
3196 & MPI_SUM, MASTER, id%COMM, IERR)
3197 CALL MPI_REDUCE( FLOP_CB_DECOMPRESS,TMP_FLOP_CB_DECOMPRESS
3198 & , 1, MPI_DOUBLE_PRECISION,
3199 & MPI_SUM, MASTER, id%COMM, IERR)
3200 CALL MPI_REDUCE( FLOP_FACTO_FR, TMP_FLOP_FACTO_FR
3201 & , 1, MPI_DOUBLE_PRECISION,
3202 & MPI_SUM, MASTER, id%COMM, IERR)
3203 CALL MPI_REDUCE( CNT_NODES,TMP_CNT_NODES
3205 & MPI_SUM, MASTER, id%COMM, IERR)
3206.GT.
IF (id%NPROCS1) THEN
3207 FLOP_FACTO_LR = FLOP_FACTO_FR - FLOP_LRGAIN
3208 & + FLOP_COMPRESS + FLOP_FRFRONTS
3209 CALL MPI_REDUCE( FLOP_FACTO_LR, AVG_FLOP_FACTO_LR
3210 & , 1, MPI_DOUBLE_PRECISION,
3211 & MPI_SUM, MASTER, id%COMM, IERR)
3212.EQ.
IF (id%MYIDMASTER) THEN
3213 AVG_FLOP_FACTO_LR = AVG_FLOP_FACTO_LR/id%NPROCS
3215 CALL MPI_REDUCE( FLOP_FACTO_LR, MIN_FLOP_FACTO_LR
3216 & , 1, MPI_DOUBLE_PRECISION,
3217 & MPI_MIN, MASTER, id%COMM, IERR)
3218 CALL MPI_REDUCE( FLOP_FACTO_LR, MAX_FLOP_FACTO_LR
3219 & , 1, MPI_DOUBLE_PRECISION,
3220 & MPI_MAX, MASTER, id%COMM, IERR)
3222 CALL MPI_REDUCE( TIME_UPDATE, TMP_TIME_UPDATE
3223 & , 1, MPI_DOUBLE_PRECISION,
3224 & MPI_SUM, MASTER, id%COMM, IERR)
3225 CALL MPI_REDUCE( TIME_UPDATE_LRLR1, TMP_TIME_UPDATE_LRLR1
3226 & , 1, MPI_DOUBLE_PRECISION,
3227 & MPI_SUM, MASTER, id%COMM, IERR)
3228 CALL MPI_REDUCE( TIME_UPDATE_LRLR2, TMP_TIME_UPDATE_LRLR2
3229 & , 1, MPI_DOUBLE_PRECISION,
3230 & MPI_SUM, MASTER, id%COMM, IERR)
3231 CALL MPI_REDUCE( TIME_UPDATE_LRLR3, TMP_TIME_UPDATE_LRLR3
3232 & , 1, MPI_DOUBLE_PRECISION,
3233 & MPI_SUM, MASTER, id%COMM, IERR)
3234 CALL MPI_REDUCE( TIME_UPDATE_FRLR, TMP_TIME_UPDATE_FRLR
3235 & , 1, MPI_DOUBLE_PRECISION,
3236 & MPI_SUM, MASTER, id%COMM, IERR)
3237 CALL MPI_REDUCE( TIME_UPDATE_FRFR, TMP_TIME_UPDATE_FRFR
3238 & , 1, MPI_DOUBLE_PRECISION,
3239 & MPI_SUM, MASTER, id%COMM, IERR)
3240 CALL MPI_REDUCE( TIME_DIAGCOPY, TMP_TIME_DIAGCOPY
3241 & , 1, MPI_DOUBLE_PRECISION,
3242 & MPI_SUM, MASTER, id%COMM, IERR)
3243 CALL MPI_REDUCE( TIME_COMPRESS,TMP_TIME_COMPRESS
3244 & , 1, MPI_DOUBLE_PRECISION,
3245 & MPI_SUM, MASTER, id%COMM, IERR)
3246 CALL MPI_REDUCE( TIME_MIDBLK_COMPRESS,
3247 & TMP_TIME_MIDBLK_COMPRESS
3248 & , 1, MPI_DOUBLE_PRECISION,
3249 & MPI_SUM, MASTER, id%COMM, IERR)
3250 CALL MPI_REDUCE( TIME_FRSWAP_COMPRESS,
3251 & TMP_TIME_FRSWAP_COMPRESS
3252 & , 1, MPI_DOUBLE_PRECISION,
3253 & MPI_SUM, MASTER, id%COMM, IERR)
3254 CALL MPI_REDUCE( TIME_CB_COMPRESS, TMP_TIME_CB_COMPRESS
3255 & , 1, MPI_DOUBLE_PRECISION,
3256 & MPI_SUM, MASTER, id%COMM, IERR)
3257 CALL MPI_REDUCE( TIME_DECOMP, TMP_TIME_DECOMP
3258 & , 1, MPI_DOUBLE_PRECISION,
3259 & MPI_SUM, MASTER, id%COMM, IERR)
3260 CALL MPI_REDUCE( TIME_DECOMP_UCFS, TMP_TIME_DECOMP_UCFS
3261 & , 1, MPI_DOUBLE_PRECISION,
3262 & MPI_SUM, MASTER, id%COMM, IERR)
3263 CALL MPI_REDUCE( TIME_DECOMP_ASM1, TMP_TIME_DECOMP_ASM1
3264 & , 1, MPI_DOUBLE_PRECISION,
3265 & MPI_SUM, MASTER, id%COMM, IERR)
3266 CALL MPI_REDUCE(TIME_DECOMP_LOCASM2, TMP_TIME_DECOMP_LOCASM2
3267 & , 1, MPI_DOUBLE_PRECISION,
3268 & MPI_SUM, MASTER, id%COMM, IERR)
3269 CALL MPI_REDUCE(TIME_DECOMP_MAPLIG1, TMP_TIME_DECOMP_MAPLIG1
3270 & , 1, MPI_DOUBLE_PRECISION,
3271 & MPI_SUM, MASTER, id%COMM, IERR)
3272 CALL MPI_REDUCE( TIME_DECOMP_ASMS2S, TMP_TIME_DECOMP_ASMS2S
3273 & , 1, MPI_DOUBLE_PRECISION,
3274 & MPI_SUM, MASTER, id%COMM, IERR)
3275 CALL MPI_REDUCE( TIME_DECOMP_ASMS2M, TMP_TIME_DECOMP_ASMS2M
3276 & , 1, MPI_DOUBLE_PRECISION,
3277 & MPI_SUM, MASTER, id%COMM, IERR)
3278 CALL MPI_REDUCE( TIME_PANEL, TMP_TIME_PANEL
3279 & , 1, MPI_DOUBLE_PRECISION,
3280 & MPI_SUM, MASTER, id%COMM, IERR)
3281 CALL MPI_REDUCE( TIME_FAC_I, TMP_TIME_FAC_I
3282 & , 1, MPI_DOUBLE_PRECISION,
3283 & MPI_SUM, MASTER, id%COMM, IERR)
3284 CALL MPI_REDUCE( TIME_FAC_MQ, TMP_TIME_FAC_MQ
3285 & , 1, MPI_DOUBLE_PRECISION,
3286 & MPI_SUM, MASTER, id%COMM, IERR)
3287 CALL MPI_REDUCE( TIME_FAC_SQ, TMP_TIME_FAC_SQ
3288 & , 1, MPI_DOUBLE_PRECISION,
3289 & MPI_SUM, MASTER, id%COMM, IERR)
3290 CALL MPI_REDUCE( TIME_LRTRSM, TMP_TIME_LRTRSM
3291 & , 1, MPI_DOUBLE_PRECISION,
3292 & MPI_SUM, MASTER, id%COMM, IERR)
3293 CALL MPI_REDUCE( TIME_FRTRSM, TMP_TIME_FRTRSM
3294 & , 1, MPI_DOUBLE_PRECISION,
3295 & MPI_SUM, MASTER, id%COMM, IERR)
3296 CALL MPI_REDUCE( TIME_FRFRONTS, TMP_TIME_FRFRONTS
3297 & , 1, MPI_DOUBLE_PRECISION,
3298 & MPI_SUM, MASTER, id%COMM, IERR)
3299 CALL MPI_REDUCE( TIME_LR_MODULE, TMP_TIME_LR_MODULE
3300 & , 1, MPI_DOUBLE_PRECISION,
3301 & MPI_SUM, MASTER, id%COMM, IERR)
3302.EQ.
IF (id%MYIDMASTER) THEN
3303.GT.
IF (id%NPROCS1) THEN
3306 MRY_LU_FR = TMP_MRY_LU_FR
3307 MRY_LU_LRGAIN = TMP_MRY_LU_LRGAIN
3308 MRY_CB_FR = TMP_MRY_CB_FR
3309 MRY_CB_LRGAIN = TMP_MRY_CB_LRGAIN
3310 FLOP_LRGAIN = TMP_FLOP_LRGAIN
3311 FLOP_PANEL = TMP_FLOP_PANEL
3312 FLOP_TRSM = TMP_FLOP_TRSM
3313 FLOP_TRSM_FR = TMP_FLOP_TRSM_FR
3314 FLOP_TRSM_LR = TMP_FLOP_TRSM_LR
3315 FLOP_UPDATE_FR = TMP_FLOP_UPDATE_FR
3316 FLOP_UPDATE_LR = TMP_FLOP_UPDATE_LR
3317 FLOP_UPDATE_LRLR3 = TMP_FLOP_UPDATE_LRLR3
3318 FLOP_COMPRESS = TMP_FLOP_COMPRESS
3319 FLOP_MIDBLK_COMPRESS = TMP_FLOP_MIDBLK_COMPRESS
3320 FLOP_FRSWAP_COMPRESS = TMP_FLOP_FRSWAP_COMPRESS
3321 FLOP_ACCUM_COMPRESS = TMP_FLOP_ACCUM_COMPRESS
3322 FLOP_CB_COMPRESS = TMP_FLOP_CB_COMPRESS
3323 FLOP_DECOMPRESS = TMP_FLOP_DECOMPRESS
3324 FLOP_CB_DECOMPRESS = TMP_FLOP_CB_DECOMPRESS
3325 FLOP_FRFRONTS = TMP_FLOP_FRFRONTS
3326 FLOP_FACTO_FR = TMP_FLOP_FACTO_FR
3327 CNT_NODES = TMP_CNT_NODES
3328 TIME_UPDATE = TMP_TIME_UPDATE /id%NPROCS
3329 TIME_UPDATE_LRLR1 = TMP_TIME_UPDATE_LRLR1 /id%NPROCS
3330 TIME_UPDATE_LRLR2 = TMP_TIME_UPDATE_LRLR2 /id%NPROCS
3331 TIME_UPDATE_LRLR3 = TMP_TIME_UPDATE_LRLR3 /id%NPROCS
3332 TIME_UPDATE_FRLR = TMP_TIME_UPDATE_FRLR /id%NPROCS
3333 TIME_UPDATE_FRFR = TMP_TIME_UPDATE_FRFR /id%NPROCS
3334 TIME_COMPRESS = TMP_TIME_COMPRESS /id%NPROCS
3335 TIME_MIDBLK_COMPRESS = TMP_TIME_MIDBLK_COMPRESS/id%NPROCS
3336 TIME_FRSWAP_COMPRESS = TMP_TIME_FRSWAP_COMPRESS/id%NPROCS
3337 TIME_DIAGCOPY = TMP_TIME_DIAGCOPY /id%NPROCS
3338 TIME_CB_COMPRESS = TMP_TIME_CB_COMPRESS /id%NPROCS
3339 TIME_PANEL = TMP_TIME_PANEL /id%NPROCS
3340 TIME_FAC_I = TMP_TIME_FAC_I /id%NPROCS
3341 TIME_FAC_MQ = TMP_TIME_FAC_MQ /id%NPROCS
3342 TIME_FAC_SQ = TMP_TIME_FAC_SQ /id%NPROCS
3343 TIME_LRTRSM = TMP_TIME_LRTRSM /id%NPROCS
3344 TIME_FRTRSM = TMP_TIME_FRTRSM /id%NPROCS
3345 TIME_FRFRONTS = TMP_TIME_FRFRONTS /id%NPROCS
3346 TIME_LR_MODULE = TMP_TIME_LR_MODULE /id%NPROCS
3347 TIME_DECOMP = TMP_TIME_DECOMP /id%NPROCS
3348 TIME_DECOMP_UCFS = TMP_TIME_DECOMP_UCFS /id%NPROCS
3349 TIME_DECOMP_ASM1 = TMP_TIME_DECOMP_ASM1 /id%NPROCS
3350 TIME_DECOMP_LOCASM2 = TMP_TIME_DECOMP_LOCASM2 /id%NPROCS
3351 TIME_DECOMP_MAPLIG1 = TMP_TIME_DECOMP_MAPLIG1 /id%NPROCS
3352 TIME_DECOMP_ASMS2S = TMP_TIME_DECOMP_ASMS2S /id%NPROCS
3353 TIME_DECOMP_ASMS2M = TMP_TIME_DECOMP_ASMS2M /id%NPROCS
3355 CALL COMPUTE_GLOBAL_GAINS(id%KEEP8(110),id%RINFOG(3),
3356 & id%KEEP8(49), PROKG, MPG)
3361 CALL MUMPS_SETI8TOI4(id%KEEP8(49), id%INFOG(35))
3365 IF (CNTL(7) < 0.0E0) THEN
3368 WRITE(LP,'(/a/,a/,a/,a,a)
')
3369 & ' warning in blr input setting
',
3370 & ' cntl(7) < 0 is experimental:
',
3371 & ' rrqr precision = |cntl(7| x ||a_pre||,
',
3372 & ' where a_pre is
the preprocessed matrix as defined
',
3373 & ' in
the users guide
'
3376 CALL SAVEandWRITE_GAINS(FRONTWISE,
3377 & KEEP(489), id%DKEEP, N, id%ICNTL(36),
3378 & KEEP(487), KEEP(488), KEEP(490),
3379 & KEEP(491), KEEP(50), KEEP(486),
3380 & KEEP(472), KEEP(475), KEEP(478), KEEP(480),
3382 & KEEP(483), KEEP(484),
3383 & id%KEEP8(110), id%KEEP8(49),
3384 & KEEP(28), id%NPROCS, MPG, PROKG)
3386 RINFOG(14) = id%DKEEP(56)
3394.EQ.
IF(KEEP(110) 1) THEN
3397 id%INFO(18) = KEEP(109)
3398 CALL MPI_ALLREDUCE( KEEP(109), KEEP(112), 1, MPI_INTEGER,
3399 & MPI_SUM, id%COMM, IERR)
3405.EQ.
IF (id%MYIDMASTER) THEN
3407 INFOG(28)=KEEP(112)+KEEP(17)
3416.NE.
IF (KEEP(17) 0) THEN
3417.EQ.
IF (id%MYID ID_ROOT) THEN
3421 id%INFO(18)=id%INFO(18)+KEEP(17)
3423.EQ.
IF (ID_ROOT MASTER) THEN
3424.EQ.
IF (id%MYIDMASTER) THEN
3433 DO I= KEEP(17), 1, -1
3436 id%PIVNUL_LIST(KEEP(112)+I)=id%PIVNUL_LIST(KEEP(109)+I)
3445.EQ.
IF (id%MYID ID_ROOT) THEN
3446 CALL MPI_SEND(id%PIVNUL_LIST(KEEP(109)+1), KEEP(17),
3447 & MPI_INTEGER, MASTER, ZERO_PIV,
3449.EQ.
ELSE IF (id%MYID MASTER) THEN
3450 CALL MPI_RECV(id%PIVNUL_LIST(KEEP(112)+1), KEEP(17),
3451 & MPI_INTEGER, ID_ROOT, ZERO_PIV,
3452 & id%COMM, STATUS, IERR )
3463.EQ.
IF(KEEP(110) 1) THEN
3464 ALLOCATE(ITMP2(id%NPROCS),stat = IERR ) ! deallocated in 490
3465.GT.
IF ( IERR 0 ) THEN
3467 id%INFO(2)=id%NPROCS
3469 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
3470 & id%COMM, id%MYID )
3471.LT.
IF (id%INFO(1)0) GOTO 490
3472 CALL MPI_GATHER ( KEEP(109),1, MPI_INTEGER,
3473 & ITMP2(1), 1, MPI_INTEGER,
3474 & MASTER, id%COMM, IERR)
3475.EQ.
IF(id%MYID MASTER) THEN
3480 DO I = 1,id%NPROCS-1
3481 CALL MPI_RECV(id%PIVNUL_LIST(POSBUF), ITMP2(I+1),
3483 & ZERO_PIV, id%COMM, STATUS, IERR)
3488 CALL MPI_SEND(POSBUF, 1, MPI_INTEGER, I, ZERO_PIV,
3490 POSBUF = POSBUF + ITMP2(I+1)
3493 CALL MPI_SEND( id%PIVNUL_LIST(1), KEEP(109), MPI_INTEGER,
3494 & MASTER,ZERO_PIV, id%COMM, IERR)
3495 CALL MPI_RECV( KEEP(220), 1, MPI_INTEGER, MASTER, ZERO_PIV,
3496 & id%COMM, STATUS, IERR )
3502 CALL MPI_REDUCE( id%DKEEP(19), RINFOG(19), 1,
3504 & MPI_MIN, MASTER, id%COMM, IERR )
3505 CALL MPI_REDUCE( id%DKEEP(20), RINFOG(20), 1,
3507 & MPI_MIN, MASTER, id%COMM, IERR )
3508 CALL MPI_REDUCE( id%DKEEP(21), RINFOG(21), 1,
3510 & MPI_MAX, MASTER, id%COMM, IERR )
3514 CALL MPI_REDUCE( id%KEEP8(80), ITEMP8, 1, MPI_INTEGER8,
3515 & MPI_SUM, MASTER, id%COMM, IERR )
3516.EQ.
IF (id%MYID MASTER) THEN
3517 CALL MUMPS_SETI8TOI4(ITEMP8,id%INFOG(48))
3522 CALL MPI_REDUCE( id%KEEP(425), id%INFOG(49), 1, MPI_INTEGER,
3523 & MPI_MAX, MASTER, id%COMM, IERR )
3536.EQ..AND..NE.
IF (id%MYIDMASTER LSCAL. AND. KEEP(258)0) THEN
3537 K = min(KEEP(143), KEEP(17))
3539 DO I = 1, KEEP(112)+ K
3541 CALL CMUMPS_UPDATEDETER_SCALING(
3542 & id%ROWSCA(id%PIVNUL_LIST(I)),
3543 & id%DKEEP(6), KEEP(259))
3544 CALL CMUMPS_UPDATEDETER_SCALING(
3545 & id%COLSCA(id%PIVNUL_LIST(I)),
3546 & id%DKEEP(6), KEEP(259))
3552.NE.
IF (KEEP(258)0) THEN
3554.EQ.
IF (KEEP(260)-1) THEN ! Local to each processor
3555 id%DKEEP(6)=-id%DKEEP(6)
3556 id%DKEEP(7)=-id%DKEEP(7)
3561 CALL CMUMPS_DETER_REDUCTION(
3562 & id%COMM, id%DKEEP(6), KEEP(259),
3563 & RINFOG(12), INFOG(34), id%NPROCS)
3567.EQ..AND..EQ.
IF (id%KEEP(50)0 id%MYID MASTER) THEN
3571.NE.
IF (id%KEEP(23)0) THEN
3572 CALL CMUMPS_DETER_SIGN_PERM(
3584 490 IF (allocated(ITMP2)) DEALLOCATE(ITMP2)
3589 WRITE(MPG,99984) RINFOG(2),RINFOG(3),KEEP(52),
3591 & id%KEEP8(128), INFOG(11), id%KEEP8(110)
3592 IF (id%KEEP(50) == 0) THEN
3594 WRITE(MPG, 99985) INFOG(12)
3596.NE.
IF (id%KEEP(50) 1) THEN
3598 WRITE(MPG, 99982) INFOG(13)
3600.NE.
IF (KEEP(97) 0) THEN
3602 WRITE(MPG, '(a,d16.4)
')
3603 & ' effective
static pivoting thresh., cntl(4) =
', SEUIL
3604 WRITE(MPG, 99986) INFOG(25)
3606 IF (id%KEEP(50) == 2) THEN
3607 !number of 2x2 pivots in type 1 nodes
3608 WRITE(MPG, 99988) KEEP(229)
3609 !number of 2x2 pivots in type 2 nodes
3610 WRITE(MPG, 99989) KEEP(230)
3612 !number of zero pivots
3613.NE.
IF (KEEP(110) 0) THEN
3614 WRITE(MPG, 99991) KEEP(112)
3617.ne.
IF ( KEEP(19) 0 )
3619 & WRITE(MPG, 99983) KEEP(17)
3621.NE..OR..NE.
IF (KEEP(110)0KEEP(19)0)
3623 & WRITE(MPG, 99992) KEEP(17)+KEEP(112)
3625 WRITE(MPG, 99981) INFOG(14)
3626 ! Extra copies due to ip stack in unsym case
3627 ! in core case (or OLD_OOC_PANEL)
3628.GT.
IF (id%KEEP8(108) 0_8) THEN
3629 WRITE(MPG, 99980) id%KEEP8(108)
3631.NE..AND..GT.
IF ((KEEP(60)0) INFOG(25)0) THEN
3632 ! Schur on and tiny pivots set in last level
3633 ! before the Schur if KEEP(114)=0
3635 & " ** Warning Static pivoting was necessary"
3637 & " ** to factor interior variables with Schur ON"
3639.NE.
IF (KEEP(258)0) THEN
3640 WRITE(MPG,99978) RINFOG(12)
3641 WRITE(MPG,99979) RINFOG(13)
3642 WRITE(MPG,99977) INFOG(34)
3655#if ! defined(NO_FDM_DESCBAND)
3658#if ! defined(NO_FDM_MAPROW)
3667.EQ..AND.
IF (id%KEEP(46)1
3668.NE..AND.
& id%KEEP(55)0
3669.EQ..AND.
& id%MYIDMASTER
3670.EQ.
& id%KEEP(52) 0) THEN
3673 IF (associated(id%DBLARR)) THEN
3674 DEALLOCATE(id%DBLARR)
3678#if ! defined(NO_FDM_DESCBAND)
3679 IF (I_AM_SLAVE) THEN
3680 CALL MUMPS_FDBD_END(id%INFO(1)) ! INFO(1): input only
3683#if ! defined(NO_FDM_MAPROW)
3684 IF (I_AM_SLAVE) THEN
3685 CALL MUMPS_FMRD_END(id%INFO(1)) ! INFO(1): input only
3688 IF (I_AM_SLAVE) THEN
3694.AND..GE.
& id%INFO(1)0
3698 CALL CMUMPS_BLR_MOD_TO_STRUC(id%BLRARRAY_ENCODING)
3701 CALL CMUMPS_BLR_END_MODULE(id%INFO(1), id%KEEP8, id%KEEP(34))
3704 IF (I_AM_SLAVE) THEN
3705 CALL MUMPS_FDM_END('a
')
3711.AND..GE.
& id%INFO(1)0
3713 CALL MUMPS_FDM_MOD_TO_STRUC('f
', id%FDM_F_ENCODING,
3715.NOT.
IF ( associated(id%FDM_F_ENCODING)) THEN
3716 WRITE(*,*) "Internal error 2 in CMUMPS_FAC_DRIVER"
3719 CALL MUMPS_FDM_END('f
')
3729 IF ( I_AM_SLAVE ) THEN
3730.EQ..OR..EQ.
IF ((KEEP(201)1)(KEEP(201)2)) THEN
3731 CALL CMUMPS_OOC_END_FACTO(id,IERR)
3732 IF (id%ASSOCIATED_OOC_FILES) THEN
3733 id%ASSOCIATED_OOC_FILES = .FALSE.
3735.LT..AND..GE.
IF (IERR0 id%INFO(1) 0) id%INFO(1) = IERR
3737 IF (WK_USER_PROVIDED) THEN
3740.NE.
ELSE IF (KEEP(201)0) THEN
3748 IF (associated(id%S)) DEALLOCATE(id%S)
3749 NULLIFY(id%S) ! in all cases
3752 ELSE ! host not working
3753 IF (WK_USER_PROVIDED) THEN
3757 IF (associated(id%S)) DEALLOCATE(id%S)
3758 NULLIFY(id%S) ! in all cases
3766 IF ( I_AM_SLAVE ) THEN
3767 CALL CMUMPS_LOAD_END( id%INFO(1), id%NSLAVES, IERR )
3768.LT..AND..GE.
IF (IERR0 id%INFO(1) 0) id%INFO(1) = IERR
3770 CALL MUMPS_PROPINFO( ICNTL(1), id%INFO(1),
3771 & id%COMM, id%MYID )
3783 IF (RHS_MUMPS_ALLOCATED) DEALLOCATE(RHS_MUMPS)
3786 id%KEEP8(26) = KEEP826_SAVE
3788 120 FORMAT(/' local redistrib:
data local/sent =
',I16,I16)
3789 125 FORMAT(/' redistrib: total
data local/sent =
',I16,I16)
3790 130 FORMAT(//'****** factorization step ********
'/)
3792 & /' elapsed time to reformat/distribute matrix =',f12.4)
3793 166
FORMAT(
' Max difference from 1 after scaling the entries',
3794 &
' for ONE-NORM (option 7/8) =',d9.2)
3795 170
FORMAT(
' STATISTICS PRIOR NUMERICAL FACTORIZATION ...'/
3796 &
' Size of internal working array S =',i16/
3797 &
' Size of internal working array IS =',i16/
3798 &
' Minimum (ICNTL(14)=0) size of S =',i16/
3799 &
' Minimum (ICNTL(14)=0) size of IS =',i16/
3800 &
' Real space for original matrix =',i16/
3801 &
' Integer space for original matrix =',i16/
3802 &
' INFO(3) Real space for factors (estimated) =',i16/
3803 &
' INFO(4) Integer space for factors (estim.) =',i16/
3804 &
' Maximum frontal size (estimated) =',i16)
3805 172
FORMAT(
' GLOBAL STATISTICS PRIOR NUMERICAL FACTORIZATION ...'/
3806 &
' Number of working processes =',i16/
3807 &
' ICNTL(22) Out-of-core option =',i16/
3808 &
' ICNTL(35) BLR activation (eff. choice) =',i16/
3809 &
' ICNTL(14) Memory relaxation =',i16/
3810 &
' INFOG(3) Real space for factors (estimated)=',i16/
3811 &
' INFOG(4) Integer space for factors (estim.)=',i16/
3812 &
' Maximum frontal size (estimated) =',i16/
3813 &
' Number of nodes in the tree =',i16/
3814 &
' ICNTL(23) Memory allowed (value on host) =',i16/
3815 &
' Sum over all procs =',i16/
3816 &
' Memory provided by user, sum of LWK_USER =',i16/
3817 &
' Effective threshold for pivoting, CNTL(1) =',d16.4)
3818 173
FORMAT(
' Perform forward during facto, NRHS =',i16)
3819 174
FORMAT(
' KEEP(268) Relaxed pivoting effective value =',i16)
3820 180
FORMAT(/
' Elapsed time for factorization =',f12.4)
3821 185
FORMAT(/
' Elapsed time for (failed) factorization =',f12.4)
3822 187
FORMAT(
' Elapsed time under L0 =',f12.4)
3823 188
FORMAT(
' Elapsed time under L0 (avg/max across MPI) =',
3825 189
FORMAT(/
' Flops under L0 layer =',1pd12.3)
3826 190
FORMAT(/
' Flops under L0 Layer (avg/max across MPI) =',
382899977
FORMAT(
' INFOG(34) Determinant (base 2 exponent) =',i16)
382999978
FORMAT(
' RINFOG(12) Determinant (real part) =',f16.8)
383099979
FORMAT(
' RINFOG(12) Determinant (imaginary part) =',f16.8)
383199980
FORMAT(
' Extra copies due to In-Place stacking =',i16)
383299981
FORMAT(
' INFOG(14) Number of memory compress =',i16)
383399982
FORMAT(
' INFOG(13) Number of delayed pivots =',i16)
383499983
FORMAT(
' Nb of singularities detected by ICNTL(56) =',i16)
383599991
FORMAT(
' Nb of null pivots detected by ICNTL(24) =',i16)
383699992
FORMAT(
' INFOG(28) Estimated deficiency =',i16)
383799984
FORMAT(/
'Leaving factorization with ...'/
3838 &
' RINFOG(2) Operations in node assembly =',1pd10.3/
3839 &
' ------(3) Operations in node elimination =',1pd10.3/
3840 &
' ICNTL (8) Scaling effectively used =',i16/
3841 &
' INFOG (9) Real space for factors =',i16/
3842 &
' INFOG(10) Integer space for factors =',i16/
3843 &
' INFOG(11) Maximum front size =',i16/
3844 &
' INFOG(29) Number of entries in factors =',i16)
384599985
FORMAT(
' INFOG(12) Number of off diagonal pivots =',i16)
384699986
FORMAT(
' INFOG(25) Number of tiny pivots(static) =',i16)
384799988
FORMAT(
' Number of 2x2 pivots in type 1 nodes =',i16)
384899989
FORMAT(
' Number of 2x2 pivots in type 2 nodes =',i16)