17!$ & omp_init_lock, omp_destroy_lock, omp_test_lock
31 INTEGER,
DIMENSION(:),
ALLOCATABLE ::
io_req
71 & STRAT_IO_ASYNC_ARG, WITH_BUF_ARG, LOW_LEVEL_STRAT_IO_ARG )
73 INTEGER,
intent(out) :: LOW_LEVEL_STRAT_IO_ARG
74 LOGICAL,
intent(out) :: STRAT_IO_ASYNC_ARG, WITH_BUF_ARG
75 INTEGER,
intent(in) :: STRAT_IO_ARG
77 CALL mumps_ooc_is_async_avail(tmp)
78 strat_io_async_arg=.false.
81 IF((strat_io_arg.EQ.1).OR.(strat_io_arg.EQ.2))
THEN
84 ELSEIF((strat_io_arg.EQ.4).OR.(strat_io_arg.EQ.5))
THEN
85 strat_io_async_arg=.true.
87 ELSEIF(strat_io_arg.EQ.3)
THEN
88 strat_io_async_arg=.false.
91 low_level_strat_io_arg=mod(strat_io_arg,3)
93 low_level_strat_io_arg=0
94 IF(strat_io_arg.GE.3)
THEN
117 INTEGER tmpdir_max_length, prefix_max_length
118 parameter(tmpdir_max_length=255, prefix_max_length
119 INTEGER(8),
intent(in) ::
120 TYPE(cmumps_struc),
TARGET ::
id
124 CHARACTER(len=1):: tmp_dir(tmpdir_max_length),
125 & tmp_prefix(prefix_max_length)
126 INTEGER dim_dir,dim_prefix
127 INTEGER,
DIMENSION(:),
ALLOCATABLE ::
136 IF (
id%KEEP(400).GT.0)
THEN
137!$
CALL omp_init_lock( lock_for_l0omp )
174 CALL MUMPS_OOC_INIT_FILETYPE(TYPEF_L, TYPEF_U, TYPEF_CB,
175 & id%KEEP(201), id%KEEP(251), id%KEEP(50), TYPEF_INVALID )
176.EQ.
IF (id%KEEP(201)2) THEN
180 PROCNODE_OOC=>id%PROCNODE_STEPS
182 SLAVEF_OOC=id%NSLAVES
184 SIZE_OF_BLOCK=>id%OOC_SIZE_OF_BLOCK
185 OOC_VADDR=>id%OOC_VADDR
186.GT.
IF(id%KEEP(107)0)THEN
187 SIZE_SOLVE_EMM=max(id%KEEP8(19),int(dble(MAXS)*
189 SIZE_ZONE_SOLVE=max(SIZE_SOLVE_EMM,
190 & int((dble(MAXS)*0.9d0-
191 & dble(SIZE_SOLVE_EMM))/dble(id%KEEP(107)),8))
192.EQ.
IF(SIZE_ZONE_SOLVESIZE_SOLVE_EMM)THEN
193 SIZE_SOLVE_EMM=id%KEEP8(19)
194 SIZE_ZONE_SOLVE=int((dble(MAXS)*0.9d0-
195 & dble(SIZE_SOLVE_EMM))/dble(id%KEEP(107)),8)
198 SIZE_ZONE_SOLVE=int(dble(MAXS)*0.9d0,8)
199 SIZE_SOLVE_EMM=SIZE_ZONE_SOLVE
201 CMUMPS_ELEMENTARY_DATA_SIZE = id%KEEP(35)
203 ALLOCATE(id%OOC_NB_FILES(OOC_NB_FILE_TYPE), stat=allocok)
204.GT.
IF (allocok 0) THEN
205.GT.
IF (ICNTL10) THEN
206 WRITE(ICNTL1,*) 'pb allocation in cmumps_init_ooc
'
209 id%INFO(2) = OOC_NB_FILE_TYPE
214 CALL CMUMPS_SET_STRAT_IO_FLAGS( id%KEEP(99), STRAT_IO_ASYNC,
215 & WITH_BUF, LOW_LEVEL_STRAT_IO )
218 MAX_NB_NODES_FOR_ZONE=0
219 OOC_INODE_SEQUENCE=>id%OOC_INODE_SEQUENCE
220 ALLOCATE(I_CUR_HBUF_NEXTPOS(OOC_NB_FILE_TYPE),
222.GT.
IF (allocok 0) THEN
223.GT.
IF (ICNTL10) THEN
224 WRITE(ICNTL1,*) 'pb allocation in cmumps_init_ooc
'
227 id%INFO(2) = OOC_NB_FILE_TYPE
230 I_CUR_HBUF_NEXTPOS = 1
232 CALL CMUMPS_INIT_OOC_BUF(id%INFO(1),id%INFO(2),IERR)
237 IF(STRAT_IO_ASYNC)THEN
240 DIM_ERR_STR_OOC = ERR_STR_OOC_MAX_LEN
241 CALL MUMPS_LOW_LEVEL_INIT_ERR_STR(DIM_ERR_STR_OOC,ERR_STR_OOC)
242 DIM_DIR=len(trim(id%OOC_TMPDIR))
243 DIM_PREFIX=len(trim(id%OOC_PREFIX))
244 CALL CMUMPS_CONVERT_STR_TO_CHR_ARRAY(TMP_DIR(1),
245 & id%OOC_TMPDIR, TMPDIR_MAX_LENGTH, DIM_DIR )
246 CALL CMUMPS_CONVERT_STR_TO_CHR_ARRAY(TMP_PREFIX(1),
247 & id%OOC_PREFIX, PREFIX_MAX_LENGTH, DIM_PREFIX)
248 CALL MUMPS_LOW_LEVEL_INIT_PREFIX(DIM_PREFIX, TMP_PREFIX)
249 CALL MUMPS_LOW_LEVEL_INIT_TMPDIR(DIM_DIR, TMP_DIR)
250 ALLOCATE(FILE_FLAG_TAB(OOC_NB_FILE_TYPE),
252.GT.
IF (allocok 0) THEN
253.GT.
IF (ICNTL1 0) THEN
254 WRITE(ICNTL1,*) 'pb allocation in cmumps_init_ooc
'
257 id%INFO(2) = OOC_NB_FILE_TYPE
260 FILE_FLAG_TAB(1:OOC_NB_FILE_TYPE)=0
262 TMP=int(id%KEEP8(11)/1000000_8)+1
263.EQ..AND..EQ.
IF((id%KEEP(201)1)(id%KEEP(50)0)
267 CALL MUMPS_LOW_LEVEL_INIT_OOC_C(MYID_OOC,TMP,
268 & id%KEEP(35),LOW_LEVEL_STRAT_IO,K211_LOC,OOC_NB_FILE_TYPE,
269 & FILE_FLAG_TAB,IERR)
271.GT.
IF (ICNTL1 0 ) THEN
272 WRITE(ICNTL1,*)MYID_OOC,': pb in mumps_low_level_init_ooc_c
'
273 WRITE(ICNTL1,*)MYID_OOC,':
',ERR_STR_OOC(1:DIM_ERR_STR_OOC)
279 CALL MUMPS_GET_MAX_FILE_SIZE_C(MAX_OOC_FILE_SIZE)
280 DEALLOCATE(FILE_FLAG_TAB)
282 END SUBROUTINE CMUMPS_OOC_INIT_FACTO
283 SUBROUTINE CMUMPS_NEW_FACTOR(INODE,PTRFAC,KEEP,KEEP8,
285 USE CMUMPS_OOC_BUFFER
287 INTEGER INODE,KEEP(500)
289 INTEGER(8) KEEP8(150)
290 INTEGER(8) :: PTRFAC(KEEP(28)), SIZE
292 INTEGER IERR,NODE,ASYNC,REQUEST
294 INTEGER ADDR_INT1,ADDR_INT2
296 INTEGER SIZE_INT1,SIZE_INT2
298 IF(STRAT_IO_ASYNC)THEN
305 SIZE_OF_BLOCK(STEP_OOC(INODE),OOC_FCT_TYPE)=SIZE
306 MAX_SIZE_FACTOR_OOC=max(MAX_SIZE_FACTOR_OOC,SIZE)
307 OOC_VADDR(STEP_OOC(INODE),OOC_FCT_TYPE)=OOC_VADDR_PTR
308 OOC_VADDR_PTR=OOC_VADDR_PTR+SIZE
309 TMP_SIZE_FACT=TMP_SIZE_FACT+SIZE
310 TMP_NB_NODES=TMP_NB_NODES+1
311.GT.
IF(TMP_SIZE_FACTSIZE_ZONE_SOLVE)THEN
312 MAX_NB_NODES_FOR_ZONE=max(MAX_NB_NODES_FOR_ZONE,TMP_NB_NODES)
316.NOT.
IF ( WITH_BUF) THEN
317 CALL MUMPS_OOC_CONVERT_BIGINTTO2INT(ADDR_INT1,ADDR_INT2,
318 & OOC_VADDR(STEP_OOC(INODE),OOC_FCT_TYPE))
319 CALL MUMPS_OOC_CONVERT_BIGINTTO2INT(SIZE_INT1,SIZE_INT2,
321 CALL MUMPS_LOW_LEVEL_WRITE_OOC_C(LOW_LEVEL_STRAT_IO,
322 & A(PTRFAC(STEP_OOC(INODE))),SIZE_INT1,SIZE_INT2,
323 & INODE,REQUEST,TYPE,ADDR_INT1,ADDR_INT2,IERR)
326 & WRITE(ICNTL1,*)MYID_OOC,':
',ERR_STR_OOC(1:DIM_ERR_STR_OOC)
329.GT.
IF(I_CUR_HBUF_NEXTPOS(OOC_FCT_TYPE)KEEP_OOC(28))THEN
330 WRITE(*,*)MYID_OOC,': internal error(37) in ooc
'
333 OOC_INODE_SEQUENCE(I_CUR_HBUF_NEXTPOS(OOC_FCT_TYPE),
334 & OOC_FCT_TYPE)=INODE
335 I_CUR_HBUF_NEXTPOS(OOC_FCT_TYPE)=
336 & I_CUR_HBUF_NEXTPOS(OOC_FCT_TYPE)+1
338.LE.
IF(SIZEHBUF_SIZE)THEN
339 CALL CMUMPS_OOC_COPY_DATA_TO_BUFFER
340 & (A(PTRFAC(STEP_OOC(INODE))),SIZE,IERR)
341 OOC_INODE_SEQUENCE(I_CUR_HBUF_NEXTPOS(OOC_FCT_TYPE),
342 & OOC_FCT_TYPE) = INODE
343 I_CUR_HBUF_NEXTPOS(OOC_FCT_TYPE) =
344 & I_CUR_HBUF_NEXTPOS(OOC_FCT_TYPE) + 1
345 PTRFAC(STEP_OOC(INODE))=-777777_8
348 CALL CMUMPS_OOC_DO_IO_AND_CHBUF(OOC_FCT_TYPE,IERR)
352 CALL CMUMPS_OOC_DO_IO_AND_CHBUF(OOC_FCT_TYPE,IERR)
356 CALL MUMPS_OOC_CONVERT_BIGINTTO2INT(ADDR_INT1,ADDR_INT2,
357 & OOC_VADDR(STEP_OOC(INODE),OOC_FCT_TYPE))
358 CALL MUMPS_OOC_CONVERT_BIGINTTO2INT(SIZE_INT1,SIZE_INT2,
360 CALL MUMPS_LOW_LEVEL_WRITE_OOC_C(LOW_LEVEL_STRAT_IO,
361 & A(PTRFAC(STEP_OOC(INODE))),SIZE_INT1,SIZE_INT2,
362 & INODE,REQUEST,TYPE,ADDR_INT1,ADDR_INT2,IERR)
365 & WRITE(*,*)MYID_OOC,':
',ERR_STR_OOC(1:DIM_ERR_STR_OOC)
368.GT.
IF(I_CUR_HBUF_NEXTPOS(OOC_FCT_TYPE)KEEP_OOC(28))THEN
369 WRITE(*,*)MYID_OOC,': internal error(38) in ooc '
383 CALL mumps_wait_request(request,ierr)
400 INTEGER addr_int1,addr_int2
402 INTEGER size_int1,size_int2
420 CALL mumps_low_level_direct_read(dest,
421 & size_int1,size_int2,
422 &
TYPE,addr_int1,addr_int2,ierr)
427 &
': Problem in MUMPS_LOW_LEVEL_DIRECT_READ'
448 INTEGER,
intent(out):: IERR
462 TYPE(cmumps_struc),
TARGET ::
463 INTEGER,
intent(out) :: IERR
464 INTEGER I,SOLVE_OR_FACTO
466 IF (
id%KEEP(400).GT.0)
THEN
493 CALL mumps_ooc_end_write_c(ierr)
514 CALL mumps_clean_io_data_c(
myid_ooc,solve_or_facto,ierr)
521 END SUBROUTINE CMUMPS_OOC_END_FACTO
522 SUBROUTINE CMUMPS_OOC_CLEAN_FILES(id,IERR)
525 EXTERNAL MUMPS_OOC_REMOVE_FILE_C
526 TYPE(CMUMPS_STRUC), TARGET :: id
529 CHARACTER(len=1):: TMP_NAME(350)
532.NOT.
IF( id%ASSOCIATED_OOC_FILES) THEN
533.AND.
IF(associated(id%OOC_FILE_NAMES)
534 & associated(id%OOC_FILE_NAME_LENGTH))THEN
535 DO I1=1,id%OOC_NB_FILE_TYPE
536 DO I=1,id%OOC_NB_FILES(I1)
537 DO J=1,id%OOC_FILE_NAME_LENGTH(K)
538 TMP_NAME(J)=id%OOC_FILE_NAMES(K,J)
540 CALL MUMPS_OOC_REMOVE_FILE_C(IERR, TMP_NAME(1))
543 WRITE(ICNTL1,*)MYID_OOC,':
',
544 & ERR_STR_OOC(1:DIM_ERR_STR_OOC)
553 IF(associated(id%OOC_FILE_NAMES))THEN
554 DEALLOCATE(id%OOC_FILE_NAMES)
555 NULLIFY(id%OOC_FILE_NAMES)
557 IF(associated(id%OOC_FILE_NAME_LENGTH))THEN
558 DEALLOCATE(id%OOC_FILE_NAME_LENGTH)
559 NULLIFY(id%OOC_FILE_NAME_LENGTH)
561 IF(associated(id%OOC_NB_FILES))THEN
562 DEALLOCATE(id%OOC_NB_FILES)
563 NULLIFY(id%OOC_NB_FILES)
566 END SUBROUTINE CMUMPS_OOC_CLEAN_FILES
567 SUBROUTINE CMUMPS_CLEAN_OOC_DATA(id,IERR)
570 TYPE(CMUMPS_STRUC), TARGET :: id
573 CALL CMUMPS_OOC_CLEAN_FILES(id,IERR)
574 IF(associated(id%OOC_TOTAL_NB_NODES))THEN
575 DEALLOCATE(id%OOC_TOTAL_NB_NODES)
576 NULLIFY(id%OOC_TOTAL_NB_NODES)
578 IF(associated(id%OOC_INODE_SEQUENCE))THEN
579 DEALLOCATE(id%OOC_INODE_SEQUENCE)
580 NULLIFY(id%OOC_INODE_SEQUENCE)
582 IF(associated(id%OOC_SIZE_OF_BLOCK))THEN
583 DEALLOCATE(id%OOC_SIZE_OF_BLOCK)
584 NULLIFY(id%OOC_SIZE_OF_BLOCK)
586 IF(associated(id%OOC_VADDR))THEN
587 DEALLOCATE(id%OOC_VADDR)
588 NULLIFY(id%OOC_VADDR)
591 END SUBROUTINE CMUMPS_CLEAN_OOC_DATA
592 SUBROUTINE CMUMPS_OOC_INIT_SOLVE(id)
596 TYPE(CMUMPS_STRUC), TARGET :: id
598 INTEGER(8) :: TMP_SIZE8
600 EXTERNAL MUMPS_PROCNODE
601 INTEGER MUMPS_PROCNODE
607 IF(allocated(LRLUS_SOLVE))THEN
608 DEALLOCATE(LRLUS_SOLVE)
610 IF(allocated(LRLU_SOLVE_T))THEN
611 DEALLOCATE(LRLU_SOLVE_T)
613 IF(allocated(LRLU_SOLVE_B))THEN
614 DEALLOCATE(LRLU_SOLVE_B)
616 IF(allocated(POSFAC_SOLVE))THEN
617 DEALLOCATE(POSFAC_SOLVE)
619 IF(allocated(IDEB_SOLVE_Z))THEN
620 DEALLOCATE(IDEB_SOLVE_Z)
622 IF(allocated(PDEB_SOLVE_Z))THEN
623 DEALLOCATE(PDEB_SOLVE_Z)
625 IF(allocated(SIZE_SOLVE_Z))THEN
626 DEALLOCATE(SIZE_SOLVE_Z)
628 IF(allocated(CURRENT_POS_T))THEN
629 DEALLOCATE(CURRENT_POS_T)
631 IF(allocated(CURRENT_POS_B))THEN
632 DEALLOCATE(CURRENT_POS_B)
634 IF(allocated(POS_HOLE_T))THEN
635 DEALLOCATE(POS_HOLE_T)
637 IF(allocated(POS_HOLE_B))THEN
638 DEALLOCATE(POS_HOLE_B)
640 IF(allocated(OOC_STATE_NODE))THEN
641 DEALLOCATE(OOC_STATE_NODE)
643 IF(allocated(POS_IN_MEM))THEN
644 DEALLOCATE(POS_IN_MEM)
646 IF(allocated(INODE_TO_POS))THEN
647 DEALLOCATE(INODE_TO_POS)
649 IF(allocated(SIZE_OF_READ))THEN
650 DEALLOCATE(SIZE_OF_READ)
652 IF(allocated(FIRST_POS_IN_READ))THEN
653 DEALLOCATE(FIRST_POS_IN_READ)
655 IF(allocated(READ_DEST))THEN
656 DEALLOCATE(READ_DEST)
658 IF(allocated(READ_MNG))THEN
661 IF(allocated(REQ_TO_ZONE))THEN
662 DEALLOCATE(REQ_TO_ZONE)
664 IF(allocated(REQ_ID))THEN
667 IF(allocated(IO_REQ))THEN
670 IF(associated(KEEP_OOC))THEN
673 IF(associated(STEP_OOC))THEN
676 IF(associated(PROCNODE_OOC))THEN
677 NULLIFY(PROCNODE_OOC)
679 IF(associated(TOTAL_NB_OOC_NODES))THEN
680 NULLIFY(TOTAL_NB_OOC_NODES)
682 IF(associated(SIZE_OF_BLOCK))THEN
683 NULLIFY(SIZE_OF_BLOCK)
685 IF(associated(OOC_INODE_SEQUENCE))THEN
686 NULLIFY(OOC_INODE_SEQUENCE)
688 OOC_NB_FILE_TYPE=id%OOC_NB_FILE_TYPE
689 CALL MUMPS_OOC_INIT_FILETYPE(TYPEF_L, TYPEF_U, TYPEF_CB,
690 & id%KEEP(201), id%KEEP(251), id%KEEP(50), TYPEF_INVALID )
691 DIM_ERR_STR_OOC = ERR_STR_OOC_MAX_LEN
692 CALL MUMPS_LOW_LEVEL_INIT_ERR_STR(DIM_ERR_STR_OOC,ERR_STR_OOC)
693 CALL CMUMPS_OOC_OPEN_FILES_FOR_SOLVE(id)
694.LT.
IF(id%INFO(1)0)THEN
698 PROCNODE_OOC=>id%PROCNODE_STEPS
699 SLAVEF_OOC=id%NSLAVES
702 SIZE_OF_BLOCK=>id%OOC_SIZE_OF_BLOCK
703 OOC_INODE_SEQUENCE=>id%OOC_INODE_SEQUENCE
704 OOC_VADDR=>id%OOC_VADDR
705 ALLOCATE(IO_REQ(id%KEEP(28)),
707.GT.
IF (allocok 0) THEN
708.GT.
IF (ICNTL10) THEN
712 id%INFO(2) = id%KEEP(28)
715 CMUMPS_ELEMENTARY_DATA_SIZE = id%KEEP(35)
716 MAX_NB_NODES_FOR_ZONE=id%OOC_MAX_NB_NODES_FOR_ZONE
717 TOTAL_NB_OOC_NODES=>id%OOC_TOTAL_NB_NODES
718 CALL CMUMPS_SET_STRAT_IO_FLAGS( id%KEEP(204), STRAT_IO_ASYNC,
719 & WITH_BUF, LOW_LEVEL_STRAT_IO)
720.GT.
IF(id%KEEP(107)0)THEN
721 SIZE_SOLVE_EMM=max(id%KEEP8(20),
722 & FACT_AREA_SIZE / 5_8)
723 SIZE_ZONE_SOLVE=max(SIZE_SOLVE_EMM,
724 & int((dble(FACT_AREA_SIZE)-
725 & dble(SIZE_SOLVE_EMM))/dble(id%KEEP(107)),8))
726 SIZE_ZONE_SOLVE=max(SIZE_ZONE_SOLVE,0_8)
727.EQ.
IF(SIZE_ZONE_SOLVESIZE_SOLVE_EMM)THEN
728 SIZE_SOLVE_EMM=id%KEEP8(20)
729 SIZE_ZONE_SOLVE=int((real(FACT_AREA_SIZE)-
730 & real(SIZE_SOLVE_EMM))/real(id%KEEP(107)),8)
731 SIZE_ZONE_SOLVE=max(SIZE_ZONE_SOLVE,0_8)
734 SIZE_ZONE_SOLVE=FACT_AREA_SIZE
735 SIZE_SOLVE_EMM=SIZE_ZONE_SOLVE
737.LT.
IF(SIZE_SOLVE_EMMid%KEEP8(20))THEN
739 & WRITE(ICNTL1,*)MYID_OOC,': more space needed
for
742 CALL MUMPS_SET_IERROR(id%KEEP8(20), id%INFO(2))
744 TMP=MAX_NB_NODES_FOR_ZONE
745 CALL MPI_ALLREDUCE(TMP,MAX_NB_NODES_FOR_ZONE,1,
746 & MPI_INTEGER,MPI_MAX,id%COMM_NODES, IERR)
748 ALLOCATE(POS_IN_MEM(MAX_NB_NODES_FOR_ZONE*NB_Z),
749 & INODE_TO_POS(KEEP_OOC(28)),
751.GT.
IF (allocok 0) THEN
752.GT.
IF (ICNTL10) THEN
756 id%INFO(2) = id%KEEP(28)+(MAX_NB_NODES_FOR_ZONE*NB_Z)
759 ALLOCATE(OOC_STATE_NODE(KEEP_OOC(28)),stat=allocok)
760.GT.
IF (allocok 0) THEN
761.GT.
IF (ICNTL10) THEN
765 id%INFO(2) = id%KEEP(28)
768 OOC_STATE_NODE(1:KEEP_OOC(28))=0
771 ALLOCATE(LRLUS_SOLVE(NB_Z), LRLU_SOLVE_T(NB_Z),LRLU_SOLVE_B(NB_Z),
772 & POSFAC_SOLVE(NB_Z),IDEB_SOLVE_Z(NB_Z),
773 & PDEB_SOLVE_Z(NB_Z),SIZE_SOLVE_Z(NB_Z),
774 & CURRENT_POS_T(NB_Z),CURRENT_POS_B(NB_Z),
775 & POS_HOLE_T(NB_Z),POS_HOLE_B(NB_Z),
777.GT.
IF (allocok 0) THEN
778.GT.
IF (ICNTL10) THEN
782 id%INFO(2) = 9*(NB_Z+1)
786 CALL MUMPS_GET_MAX_NB_REQ_C(MAX_NB_REQ,IERR)
787 ALLOCATE(SIZE_OF_READ(MAX_NB_REQ),FIRST_POS_IN_READ(MAX_NB_REQ),
788 & READ_DEST(MAX_NB_REQ),READ_MNG(MAX_NB_REQ),
789 & REQ_TO_ZONE(MAX_NB_REQ),REQ_ID(MAX_NB_REQ),stat=allocok)
791 FIRST_POS_IN_READ=-9999
796.GT.
IF (allocok 0) THEN
797.GT.
IF (ICNTL10) THEN
801 id%INFO(2) = 6*(NB_Z+1)
804 MIN_SIZE_READ=min(max((1024_8*1024_8)/int(id%KEEP(35),8),
805 & SIZE_ZONE_SOLVE/3_8),
810 IDEB_SOLVE_Z(I)=TMP_SIZE8
811 POSFAC_SOLVE(I)=TMP_SIZE8
812 LRLUS_SOLVE(I)=SIZE_ZONE_SOLVE
813 LRLU_SOLVE_T(I)=SIZE_ZONE_SOLVE
815 SIZE_SOLVE_Z(I)=SIZE_ZONE_SOLVE
821 J=J+MAX_NB_NODES_FOR_ZONE
822 TMP_SIZE8=TMP_SIZE8+SIZE_ZONE_SOLVE
824 IDEB_SOLVE_Z(NB_Z)=TMP_SIZE8
826 POSFAC_SOLVE(NB_Z)=TMP_SIZE8
827 LRLUS_SOLVE(NB_Z)=SIZE_SOLVE_EMM
828 LRLU_SOLVE_T(NB_Z)=SIZE_SOLVE_EMM
829 LRLU_SOLVE_B(NB_Z)=0_8
830 SIZE_SOLVE_Z(NB_Z)=SIZE_SOLVE_EMM
831 CURRENT_POS_T(NB_Z)=J
832 CURRENT_POS_B(NB_Z)=J
837 OOC_STATE_NODE(1:KEEP_OOC(28))=NOT_IN_MEM
838.NE.
IF(KEEP_OOC(38)0)THEN
839 MASTER_ROOT=MUMPS_PROCNODE(
840 & PROCNODE_OOC(STEP_OOC( KEEP_OOC(38))),
842 SPECIAL_ROOT_NODE=KEEP_OOC(38)
843.NE.
ELSEIF(KEEP_OOC(20)0)THEN
844 MASTER_ROOT=MUMPS_PROCNODE(
845 & PROCNODE_OOC(STEP_OOC( KEEP_OOC(20))),
847 SPECIAL_ROOT_NODE=KEEP_OOC(20)
850 SPECIAL_ROOT_NODE=-2222222
852.EQ..AND.
IF ( KEEP_OOC(60)0
854.NE..AND.
& (KEEP_OOC(38)0 id%root%yes)
856.NE..AND..EQ.
& (KEEP_OOC(20)0 MYID_OOCMASTER_ROOT))
859 IS_ROOT_SPECIAL = .TRUE.
861 IS_ROOT_SPECIAL = .FALSE.
865 CURRENT_SOLVE_READ_ZONE=0
870 END SUBROUTINE CMUMPS_OOC_INIT_SOLVE
871 SUBROUTINE CMUMPS_INITIATE_READ_OPS(A,LA,PTRFAC,NSTEPS,IERR)
876 INTEGER(8) :: PTRFAC(NSTEPS)
880 IF(STRAT_IO_ASYNC)THEN
882 CALL CMUMPS_SUBMIT_READ_FOR_Z(A,LA,PTRFAC,NSTEPS,IERR)
888 CALL CMUMPS_SUBMIT_READ_FOR_Z(A,LA,PTRFAC,NSTEPS,IERR)
895 END SUBROUTINE CMUMPS_INITIATE_READ_OPS
896 SUBROUTINE CMUMPS_SUBMIT_READ_FOR_Z(A,LA,PTRFAC,NSTEPS,IERR)
901 INTEGER(8) :: PTRFAC(NSTEPS)
903 CALL CMUMPS_SOLVE_SELECT_ZONE(ZONE)
905 CALL CMUMPS_SOLVE_ZONE_READ(ZONE,A,LA,PTRFAC,NSTEPS,IERR)
907 END SUBROUTINE CMUMPS_SUBMIT_READ_FOR_Z
908 SUBROUTINE CMUMPS_READ_SOLVE_BLOCK(DEST,INDICE,SIZE,
909 & ZONE,PTRFAC,NSTEPS,POS_SEQ,NB_NODES,FLAG,IERR)
912 INTEGER ZONE,NSTEPS,FLAG,POS_SEQ,NB_NODES
914 INTEGER (8) :: INDICE, SIZE, PTRFAC(NSTEPS)
915 INTEGER REQUEST,INODE,IERR
916 INTEGER ADDR_INT1,ADDR_INT2
918 INTEGER SIZE_INT1,SIZE_INT2
919 TYPE=
OOC_SOLVE_TYPE_FCT
921 INODE=OOC_INODE_SEQUENCE(POS_SEQ,OOC_FCT_TYPE)
922 CALL MUMPS_OOC_CONVERT_BIGINTTO2INT(ADDR_INT1,ADDR_INT2,
923 & OOC_VADDR(STEP_OOC(INODE),OOC_FCT_TYPE))
924 CALL MUMPS_OOC_CONVERT_BIGINTTO2INT(SIZE_INT1,SIZE_INT2,
926 CALL MUMPS_LOW_LEVEL_READ_OOC_C(LOW_LEVEL_STRAT_IO,
927 & DEST,SIZE_INT1,SIZE_INT2,
928 & INODE,REQUEST,TYPE,ADDR_INT1,ADDR_INT2,IERR)
931 & WRITE(ICNTL1,*)MYID_OOC,':
',ERR_STR_OOC(1:DIM_ERR_STR_OOC)
934 IF(STRAT_IO_ASYNC)THEN
935 CALL CMUMPS_UPDATE_READ_REQ_NODE(INODE,SIZE,INDICE,ZONE,
936 & REQUEST,POS_SEQ,NB_NODES,FLAG,PTRFAC,NSTEPS,IERR)
941 CALL CMUMPS_UPDATE_READ_REQ_NODE(INODE,SIZE,INDICE,ZONE,
942 & REQUEST,POS_SEQ,NB_NODES,FLAG,PTRFAC,NSTEPS,IERR)
946 CALL CMUMPS_SOLVE_UPDATE_POINTERS(IO_REQ(STEP_OOC(INODE)),
950 END SUBROUTINE CMUMPS_READ_SOLVE_BLOCK
951 SUBROUTINE CMUMPS_SOLVE_UPDATE_POINTERS(REQUEST,PTRFAC,
954 INTEGER NSTEPS,REQUEST
955 INTEGER (8) :: PTRFAC(NSTEPS)
956 INTEGER (8) :: LAST, POS_IN_S, J
958 INTEGER POS_REQ,I,TMP_NODE,POS_IN_MANAGE
961 EXTERNAL MUMPS_TYPENODE,MUMPS_PROCNODE
962 INTEGER MUMPS_TYPENODE,MUMPS_PROCNODE
963 POS_REQ=mod(REQUEST,MAX_NB_REQ)+1
964 SIZE=SIZE_OF_READ(POS_REQ)
965 I=FIRST_POS_IN_READ(POS_REQ)
966 POS_IN_S=READ_DEST(POS_REQ)
967 POS_IN_MANAGE=READ_MNG(POS_REQ)
968 ZONE=REQ_TO_ZONE(POS_REQ)
971.LT..AND..LE.
DO WHILE((JSIZE)(ITOTAL_NB_OOC_NODES(OOC_FCT_TYPE)))
972 TMP_NODE=OOC_INODE_SEQUENCE(I,OOC_FCT_TYPE)
973 LAST=SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE)
978.NE..AND.
IF((INODE_TO_POS(STEP_OOC(TMP_NODE))0)
979.LT.
& (INODE_TO_POS(STEP_OOC(TMP_NODE))
980 & -((N_OOC+1)*NB_Z)))THEN
982.EQ..AND..EQ..AND.
& (((MTYPE_OOC1)(KEEP_OOC(50)0)
983.EQ..AND.
& (SOLVE_STEP1)
984 & ((MUMPS_TYPENODE(PROCNODE_OOC(STEP_OOC(TMP_NODE)),
985.EQ..AND.
& KEEP_OOC(199))2)(MUMPS_PROCNODE(
986.NE.
& PROCNODE_OOC(STEP_OOC(TMP_NODE)),KEEP_OOC(199))
989.NE..AND..EQ..AND.
& ((MTYPE_OOC1)(KEEP_OOC(50)0)
990.EQ..AND.
& (SOLVE_STEP0)
991 & ((MUMPS_TYPENODE(PROCNODE_OOC(STEP_OOC(TMP_NODE)),
992.EQ..AND.
& KEEP_OOC(199))2)(MUMPS_PROCNODE(
993.NE.
& PROCNODE_OOC(STEP_OOC(TMP_NODE)),KEEP_OOC(199))
995.EQ.
& (OOC_STATE_NODE(STEP_OOC(TMP_NODE))ALREADY_USED)
997 PTRFAC(STEP_OOC(TMP_NODE))=-POS_IN_S
999 PTRFAC(STEP_OOC(TMP_NODE))=POS_IN_S
1001.LT.
IF(abs(PTRFAC(STEP_OOC(TMP_NODE)))
1002 & IDEB_SOLVE_Z(ZONE))THEN
1003 WRITE(*,*)MYID_OOC,': inernal error(42) in ooc
',
1004 & PTRFAC(STEP_OOC(TMP_NODE)),IDEB_SOLVE_Z(ZONE)
1007.GT.
IF(abs(PTRFAC(STEP_OOC(TMP_NODE)))
1008 & (IDEB_SOLVE_Z(ZONE)+SIZE_SOLVE_Z(ZONE)-1_8))THEN
1009 WRITE(*,*)MYID_OOC,': inernal error(43) in ooc
'
1013 POS_IN_MEM(POS_IN_MANAGE)=-TMP_NODE
1014 INODE_TO_POS(STEP_OOC(TMP_NODE))=-POS_IN_MANAGE
1015.NE.
IF(OOC_STATE_NODE(STEP_OOC(TMP_NODE))
1017 OOC_STATE_NODE(STEP_OOC(TMP_NODE))=USED_NOT_PERMUTED
1019 LRLUS_SOLVE(ZONE)=LRLUS_SOLVE(ZONE)+LAST
1021 POS_IN_MEM(POS_IN_MANAGE)=TMP_NODE
1022 INODE_TO_POS(STEP_OOC(TMP_NODE))=POS_IN_MANAGE
1023 OOC_STATE_NODE(STEP_OOC(TMP_NODE))=NOT_USED
1025 IO_REQ(STEP_OOC(TMP_NODE))=-7777
1027 POS_IN_MEM(POS_IN_MANAGE)=0
1029 POS_IN_S=POS_IN_S+LAST
1030 POS_IN_MANAGE=POS_IN_MANAGE+1
1034 SIZE_OF_READ(POS_REQ)=-9999_8
1035 FIRST_POS_IN_READ(POS_REQ)=-9999
1036 READ_DEST(POS_REQ)=-9999_8
1037 READ_MNG(POS_REQ)=-9999
1038 REQ_TO_ZONE(POS_REQ)=-9999
1039 REQ_ID(POS_REQ)=-9999
1041 END SUBROUTINE CMUMPS_SOLVE_UPDATE_POINTERS
1042 SUBROUTINE CMUMPS_UPDATE_READ_REQ_NODE(INODE,SIZE,DEST,ZONE,
1043 & REQUEST,POS_SEQ,NB_NODES,FLAG,PTRFAC,NSTEPS,IERR)
1045 INTEGER INODE,ZONE,REQUEST,FLAG,POS_SEQ,NB_NODES,NSTEPS
1047 INTEGER(8) :: PTRFAC(NSTEPS)
1048 INTEGER(8) :: DEST, LOCAL_DEST, J8
1049 INTEGER I,TMP_NODE,LOC_I,POS_REQ,NB
1051 INTEGER, intent(out) :: IERR
1053.GT.
IF(CUR_POS_SEQUENCETOTAL_NB_OOC_NODES(OOC_FCT_TYPE))THEN
1059 POS_REQ=mod(REQUEST,MAX_NB_REQ)+1
1060.NE.
IF(REQ_ID(POS_REQ)-9999)THEN
1061 CALL MUMPS_WAIT_REQUEST(REQ_ID(POS_REQ),IERR)
1064 & WRITE(ICNTL1,*)MYID_OOC,':
',ERR_STR_OOC(1:DIM_ERR_STR_OOC)
1067 CALL CMUMPS_SOLVE_UPDATE_POINTERS(REQUEST,PTRFAC,NSTEPS)
1070 SIZE_OF_READ(POS_REQ)=SIZE
1071 FIRST_POS_IN_READ(POS_REQ)=I
1072 READ_DEST(POS_REQ)=DEST
1074 READ_MNG(POS_REQ)=CURRENT_POS_B(ZONE)-NB_NODES+1
1075.EQ.
ELSEIF(FLAG1)THEN
1076 READ_MNG(POS_REQ)=CURRENT_POS_T(ZONE)
1078 REQ_TO_ZONE(POS_REQ)=ZONE
1079 REQ_ID(POS_REQ)=REQUEST
1082 LOC_I=CURRENT_POS_B(ZONE)-NB_NODES+1
1084.LT..AND..LE.
DO WHILE((J8SIZE)(ITOTAL_NB_OOC_NODES(OOC_FCT_TYPE)))
1085 TMP_NODE=OOC_INODE_SEQUENCE(I,OOC_FCT_TYPE)
1086 LAST=SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE)
1088 INODE_TO_POS(STEP_OOC(TMP_NODE))=1
1089 OOC_STATE_NODE(STEP_OOC(TMP_NODE))=NOT_USED
1093.GE..OR.
IF((IO_REQ(STEP_OOC(TMP_NODE))0)
1094.NE.
& (INODE_TO_POS(STEP_OOC(TMP_NODE))0))THEN
1096 POS_IN_MEM(CURRENT_POS_T(ZONE))=0
1097.EQ.
ELSEIF(FLAG0)THEN
1098 POS_IN_MEM(CURRENT_POS_B(ZONE))=0
1101 IO_REQ(STEP_OOC(TMP_NODE))=REQUEST
1102 LRLUS_SOLVE(ZONE)=LRLUS_SOLVE(ZONE)-LAST
1104.EQ.
IF(POSFAC_SOLVE(ZONE)IDEB_SOLVE_Z(ZONE))THEN
1105 POS_HOLE_B(ZONE)=-9999
1106 CURRENT_POS_B(ZONE)=-9999
1107 LRLU_SOLVE_B(ZONE)=0_8
1109 POSFAC_SOLVE(ZONE)=POSFAC_SOLVE(ZONE)+LAST
1110 LRLU_SOLVE_T(ZONE)=LRLU_SOLVE_T(ZONE)-LAST
1111 POS_IN_MEM(CURRENT_POS_T(ZONE))=-TMP_NODE-
1113 INODE_TO_POS(STEP_OOC(TMP_NODE))=-CURRENT_POS_T(ZONE)-
1115 OOC_STATE_NODE(STEP_OOC(TMP_NODE))=BEING_READ
1116 PTRFAC(STEP_OOC(TMP_NODE))=-LOCAL_DEST
1117 LOCAL_DEST=LOCAL_DEST+SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),
1119.EQ.
ELSEIF(FLAG0)THEN
1120 LRLU_SOLVE_B(ZONE)=LRLU_SOLVE_B(ZONE)-LAST
1121 POS_IN_MEM(LOC_I)=-TMP_NODE-((N_OOC+1)*NB_Z)
1122.EQ.
IF(LOC_IPOS_HOLE_T(ZONE))THEN
1123.LT.
IF(POS_HOLE_T(ZONE)CURRENT_POS_T(ZONE))THEN
1124 POS_HOLE_T(ZONE)=POS_HOLE_T(ZONE)+1
1127 INODE_TO_POS(STEP_OOC(TMP_NODE))=-LOC_I-((N_OOC+1)*NB_Z)
1128 OOC_STATE_NODE(STEP_OOC(TMP_NODE))=BEING_READ
1129 PTRFAC(STEP_OOC(TMP_NODE))=-LOCAL_DEST
1130 LOCAL_DEST=LOCAL_DEST+SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),
1133 WRITE(*,*)MYID_OOC,': internal error(39) in ooc
',
1134 & ' invalid flag
Value in
',
1139.NE.
IF(POS_IN_MEM(CURRENT_POS_T(ZONE))0)THEN
1140.EQ.
IF(POS_IN_MEM(CURRENT_POS_T(ZONE))
1141 & POS_IN_MEM(PDEB_SOLVE_Z(ZONE)))THEN
1142.NE.
IF(CURRENT_POS_T(ZONE)PDEB_SOLVE_Z(ZONE))THEN
1143 WRITE(*,*)MYID_OOC,': internal error(40) in ooc
',
1144 & CURRENT_POS_T(ZONE),
1145 & PDEB_SOLVE_Z(ZONE),
1146 & POS_IN_MEM(CURRENT_POS_T(ZONE)),
1147 & POS_IN_MEM(PDEB_SOLVE_Z(ZONE))
1153.LT.
IF(LRLUS_SOLVE(ZONE)0_8)THEN
1154 WRITE(*,*)MYID_OOC,': internal error(41) in ooc
',
1161 CURRENT_POS_T(ZONE)=CURRENT_POS_T(ZONE)+1
1162.GT.
IF(CURRENT_POS_T(ZONE)
1163 & MAX_NB_NODES_FOR_ZONE+PDEB_SOLVE_Z(ZONE))THEN
1164 WRITE(*,*)MYID_OOC,': internal error(1) in ooc
'
1167 POS_HOLE_T(ZONE)=CURRENT_POS_T(ZONE)
1168.EQ.
ELSEIF(FLAG0)THEN
1169.LT.
IF(POS_HOLE_B(ZONE)PDEB_SOLVE_Z(ZONE))THEN
1170 WRITE(*,*)MYID_OOC,': internal error(2) in ooc
',
1171 & POS_HOLE_B(ZONE),LOC_I
1174 CURRENT_POS_B(ZONE)=CURRENT_POS_B(ZONE)-1
1175 POS_HOLE_B(ZONE)=CURRENT_POS_B(ZONE)
1176.LT.
IF(POS_HOLE_B(ZONE)PDEB_SOLVE_Z(ZONE))THEN
1177 POS_HOLE_B(ZONE)=-9999
1178 LRLU_SOLVE_B(ZONE)=0_8
1181 WRITE(*,*)MYID_OOC,': internal error(3) in ooc
',
1182 & ' invalid flag
Value in
',
1191.NE.
IF(NBNB_NODES)THEN
1192 WRITE(*,*)MYID_OOC,': internal error(4) in ooc
',
1195.EQ.
IF(SOLVE_STEP0)THEN
1198 CUR_POS_SEQUENCE=POS_SEQ-1
1201 END SUBROUTINE CMUMPS_UPDATE_READ_REQ_NODE
1202 SUBROUTINE CMUMPS_FREE_FACTORS_FOR_SOLVE(INODE,PTRFAC,NSTEPS,A,
1206 INTEGER, intent(out):: IERR
1208 INTEGER INODE,NSTEPS
1209 INTEGER(8) :: PTRFAC(NSTEPS)
1211 INTEGER(8) FREE_SIZE
1212 INTEGER TMP,TMP_NODE,I,ZONE,J, FREE_HOLE_FLAG
1214 INTEGER(8) :: DUMMY_SIZE
1218.LE.
IF(INODE_TO_POS(STEP_OOC(INODE))0)THEN
1219 WRITE(*,*)MYID_OOC,': internal error (5) in ooc
',
1221 & INODE, STEP_OOC(INODE), INODE_TO_POS(STEP_OOC(INODE))
1224.EQ.
IF(SIZE_OF_BLOCK(STEP_OOC(INODE),OOC_FCT_TYPE)0_8)THEN
1225 INODE_TO_POS(STEP_OOC(INODE))=0
1226 OOC_STATE_NODE(STEP_OOC(INODE))=ALREADY_USED
1229 CALL CMUMPS_SOLVE_FIND_ZONE(INODE,ZONE,PTRFAC,NSTEPS)
1230 TMP=INODE_TO_POS(STEP_OOC(INODE))
1231 INODE_TO_POS(STEP_OOC(INODE))=-TMP
1232 POS_IN_MEM(TMP)=-INODE
1233 PTRFAC(STEP_OOC(INODE))=-PTRFAC(STEP_OOC(INODE))
1234.eq.
IF (KEEP_OOC(237)0) THEN
1235.NE.
IF(OOC_STATE_NODE(STEP_OOC(INODE))PERMUTED)THEN
1236 WRITE(*,*)MYID_OOC,': internal error(53) in ooc
',INODE,
1237 & OOC_STATE_NODE(STEP_OOC(INODE))
1241 OOC_STATE_NODE(STEP_OOC(INODE))=USED
1242 LRLUS_SOLVE(ZONE)=LRLUS_SOLVE(ZONE)+
1243 & SIZE_OF_BLOCK(STEP_OOC(INODE),OOC_FCT_TYPE)
1244.LT.
IF(LRLUS_SOLVE(ZONE)0_8)THEN
1245 WRITE(*,*)MYID_OOC,': internal error(6) in ooc ',
1246 &
': LRLUS_SOLVE must be (2) > 0'
1249 IF(zone.EQ.
nb_z)
THEN
1252 & dummy_size,ptrfac,
keep_ooc(28),zone,ierr)
1285 ELSEIF(which.EQ.0)
THEN
1309 IF((
nb_z.GT.1).AND.flag)
THEN
1327 INTEGER inode,nsteps
1329 INTEGER,
INTENT(out)::ierr
1331 INTEGER (8) :: ptrfac(nsteps)
1357 & ERR_STR_OOC(1:DIM_ERR_STR_OOC)
1360 CALL CMUMPS_SOLVE_UPDATE_POINTERS(IO_REQ(STEP_OOC(INODE)),
1364 CALL CMUMPS_SOLVE_UPD_NODE_INFO(INODE,PTRFAC,NSTEPS)
1365.NOT.
IF(CMUMPS_SOLVE_IS_END_REACHED())THEN
1366.EQ.
IF(OOC_INODE_SEQUENCE(CUR_POS_SEQUENCE,OOC_FCT_TYPE)
1368.EQ.
IF(SOLVE_STEP0)THEN
1369 CUR_POS_SEQUENCE=CUR_POS_SEQUENCE+1
1370.EQ.
ELSEIF(SOLVE_STEP1)THEN
1371 CUR_POS_SEQUENCE=CUR_POS_SEQUENCE-1
1373 CALL CMUMPS_OOC_SKIP_NULL_SIZE_NODE()
1377.EQ.
IF(OOC_STATE_NODE(STEP_OOC(INODE))PERMUTED)THEN
1378 CMUMPS_SOLVE_IS_INODE_IN_MEM=OOC_NODE_PERMUTED
1380 CMUMPS_SOLVE_IS_INODE_IN_MEM=OOC_NODE_NOT_PERMUTED
1383 CMUMPS_SOLVE_IS_INODE_IN_MEM=OOC_NODE_NOT_IN_MEM
1386 END FUNCTION CMUMPS_SOLVE_IS_INODE_IN_MEM
1387 SUBROUTINE CMUMPS_SOLVE_MODIFY_STATE_NODE(INODE)
1390.EQ.
IF ( (KEEP_OOC(237)0)
1391.AND..EQ.
& (KEEP_OOC(235)0) ) THEN
1392.NE.
IF(OOC_STATE_NODE(STEP_OOC(INODE))NOT_USED)THEN
1393 WRITE(*,*)MYID_OOC,': internal error(51) in ooc
',INODE,
1394 & OOC_STATE_NODE(STEP_OOC(INODE))
1398 OOC_STATE_NODE(STEP_OOC(INODE))=PERMUTED
1399 END SUBROUTINE CMUMPS_SOLVE_MODIFY_STATE_NODE
1400 SUBROUTINE CMUMPS_SOLVE_UPD_NODE_INFO(INODE,PTRFAC,NSTEPS)
1402 INTEGER INODE,NSTEPS
1403 INTEGER (8) :: PTRFAC(NSTEPS)
1405 INODE_TO_POS(STEP_OOC(INODE))=-INODE_TO_POS(STEP_OOC(INODE))
1406 POS_IN_MEM(INODE_TO_POS(STEP_OOC(INODE)))=
1407 & -POS_IN_MEM(INODE_TO_POS(STEP_OOC(INODE)))
1408 PTRFAC(STEP_OOC(INODE))=-PTRFAC(STEP_OOC(INODE))
1409.EQ.
IF(OOC_STATE_NODE(STEP_OOC(INODE))USED_NOT_PERMUTED)THEN
1410 OOC_STATE_NODE(STEP_OOC(INODE))=NOT_USED
1411.EQ.
ELSEIF(OOC_STATE_NODE(STEP_OOC(INODE))USED)THEN
1412 OOC_STATE_NODE(STEP_OOC(INODE))=PERMUTED
1414 WRITE(*,*)MYID_OOC,': internal error(52) in ooc
',INODE,
1415 & OOC_STATE_NODE(STEP_OOC(INODE)),
1416 & INODE_TO_POS(STEP_OOC(INODE))
1419 CALL CMUMPS_SEARCH_SOLVE(PTRFAC(STEP_OOC(INODE)),ZONE)
1420.LE.
IF(INODE_TO_POS(STEP_OOC(INODE))POS_HOLE_B(ZONE))THEN
1421.GT.
IF(INODE_TO_POS(STEP_OOC(INODE))
1422 & PDEB_SOLVE_Z(ZONE))THEN
1424 & INODE_TO_POS(STEP_OOC(INODE))-1
1426 CURRENT_POS_B(ZONE)=-9999
1427 POS_HOLE_B(ZONE)=-9999
1428 LRLU_SOLVE_B(ZONE)=0_8
1431.GE.
IF(INODE_TO_POS(STEP_OOC(INODE))POS_HOLE_T(ZONE))THEN
1432.LT.
IF(INODE_TO_POS(STEP_OOC(INODE))
1433 & CURRENT_POS_T(ZONE)-1)THEN
1434 POS_HOLE_T(ZONE)=INODE_TO_POS(STEP_OOC(INODE))+1
1436 POS_HOLE_T(ZONE)=CURRENT_POS_T(ZONE)
1439 CALL CMUMPS_OOC_UPDATE_SOLVE_STAT(INODE,PTRFAC,NSTEPS,1)
1440 END SUBROUTINE CMUMPS_SOLVE_UPD_NODE_INFO
1441 SUBROUTINE CMUMPS_SOLVE_FIND_ZONE(INODE,ZONE,PTRFAC,NSTEPS)
1443 INTEGER INODE,ZONE,NSTEPS
1444 INTEGER (8) :: PTRFAC(NSTEPS)
1446.LE.
DO WHILE (ZONENB_Z)
1447.LT.
IF(PTRFAC(STEP_OOC(INODE))IDEB_SOLVE_Z(ZONE))THEN
1453.EQ.
IF(ZONENB_Z+1)THEN
1456 END SUBROUTINE CMUMPS_SOLVE_FIND_ZONE
1457 SUBROUTINE CMUMPS_SOLVE_TRY_ZONE_FOR_READ(ZONE)
1460 ZONE=mod((CURRENT_SOLVE_READ_ZONE+1),NB_Z-1)+1
1461 END SUBROUTINE CMUMPS_SOLVE_TRY_ZONE_FOR_READ
1462 SUBROUTINE CMUMPS_SOLVE_SELECT_ZONE(ZONE)
1466 CURRENT_SOLVE_READ_ZONE=mod((CURRENT_SOLVE_READ_ZONE+1),NB_Z-1)
1467 ZONE=CURRENT_SOLVE_READ_ZONE+1
1471 END SUBROUTINE CMUMPS_SOLVE_SELECT_ZONE
1472 SUBROUTINE CMUMPS_SOLVE_ALLOC_FACTOR_SPACE(INODE,PTRFAC,
1476 INTEGER INODE,KEEP(500)
1477 INTEGER, intent(out)::IERR
1478 INTEGER(8) KEEP8(150)
1479 INTEGER(8) :: PTRFAC(KEEP(28))
1480 COMPLEX A(FACT_AREA_SIZE)
1481 INTEGER(8) :: REQUESTED_SIZE
1485 IF(SIZE_OF_BLOCK(STEP_OOC(INODE),OOC_FCT_TYPE)
1487 INODE_TO_POS(STEP_OOC(INODE))=1
1488 OOC_STATE_NODE(STEP_OOC(INODE))=NOT_USED
1489 PTRFAC(STEP_OOC(INODE))=1_8
1492 REQUESTED_SIZE=SIZE_OF_BLOCK(STEP_OOC(INODE),OOC_FCT_TYPE)
1494.GT.
IF(CURRENT_POS_T(ZONE)
1495 & (PDEB_SOLVE_Z(ZONE)+MAX_NB_NODES_FOR_ZONE-1))THEN
1496 CALL CMUMPS_FREE_SPACE_FOR_SOLVE(A,FACT_AREA_SIZE,
1497 & REQUESTED_SIZE,PTRFAC,KEEP(28),ZONE,IERR)
1502.GT.
IF((LRLU_SOLVE_T(ZONE)SIZE_OF_BLOCK(STEP_OOC(INODE),
1503.AND.
& OOC_FCT_TYPE))
1504.LE.
& (CURRENT_POS_T(ZONE)
1505 & (PDEB_SOLVE_Z(ZONE)+MAX_NB_NODES_FOR_ZONE-1)))THEN
1506 CALL CMUMPS_SOLVE_ALLOC_PTR_UPD_T(INODE,PTRFAC,
1507 & KEEP,KEEP8,A,ZONE)
1508.GT.
ELSEIF(LRLU_SOLVE_B(ZONE)SIZE_OF_BLOCK(STEP_OOC(INODE),
1509.AND.
& OOC_FCT_TYPE)
1510.GT.
& (CURRENT_POS_B(ZONE)0))THEN
1511 CALL CMUMPS_SOLVE_ALLOC_PTR_UPD_B(INODE,PTRFAC,
1512 & KEEP,KEEP8,A,ZONE)
1514 IF(CMUMPS_IS_THERE_FREE_SPACE(INODE,ZONE))THEN
1515.EQ.
IF(SOLVE_STEP0)THEN
1516 CALL CMUMPS_GET_TOP_AREA_SPACE(A,FACT_AREA_SIZE,
1517 & REQUESTED_SIZE,PTRFAC,
1518 & KEEP(28),ZONE,IFLAG,IERR)
1523 CALL CMUMPS_SOLVE_ALLOC_PTR_UPD_T(INODE,PTRFAC,
1524 & KEEP,KEEP8,A,ZONE)
1525.EQ.
ELSEIF(IFLAG0)THEN
1526 CALL CMUMPS_GET_BOTTOM_AREA_SPACE(A,FACT_AREA_SIZE,
1527 & REQUESTED_SIZE,PTRFAC,
1528 & KEEP(28),ZONE,IFLAG,IERR)
1533 CALL CMUMPS_SOLVE_ALLOC_PTR_UPD_B(INODE,PTRFAC,
1534 & KEEP,KEEP8,A,ZONE)
1538 CALL CMUMPS_GET_BOTTOM_AREA_SPACE(A,FACT_AREA_SIZE,
1539 & REQUESTED_SIZE,PTRFAC,
1540 & KEEP(28),ZONE,IFLAG,IERR)
1545 CALL CMUMPS_SOLVE_ALLOC_PTR_UPD_B(INODE,PTRFAC,
1546 & KEEP,KEEP8,A,ZONE)
1547.EQ.
ELSEIF(IFLAG0)THEN
1548 CALL CMUMPS_GET_TOP_AREA_SPACE(A,FACT_AREA_SIZE,
1549 & REQUESTED_SIZE,PTRFAC,
1550 & KEEP(28),ZONE,IFLAG,IERR)
1555 CALL CMUMPS_SOLVE_ALLOC_PTR_UPD_T(INODE,PTRFAC,
1556 & KEEP,KEEP8,A,ZONE)
1561 CALL CMUMPS_FREE_SPACE_FOR_SOLVE(A,FACT_AREA_SIZE,
1562 & REQUESTED_SIZE,PTRFAC,KEEP(28),ZONE,IERR)
1566 CALL CMUMPS_SOLVE_ALLOC_PTR_UPD_T(INODE,PTRFAC,
1567 & KEEP,KEEP8,A,ZONE)
1570 WRITE(*,*)MYID_OOC,': internal error(8) in ooc
',
1571 & ' not enough space
for solve',INODE,
1572 & SIZE_OF_BLOCK(STEP_OOC(INODE),OOC_FCT_TYPE),
1577.LT.
IF(LRLUS_SOLVE(ZONE)0_8)THEN
1578 WRITE(*,*)MYID_OOC,': internal error(9) in ooc
',
1583 END SUBROUTINE CMUMPS_SOLVE_ALLOC_FACTOR_SPACE
1584 SUBROUTINE CMUMPS_GET_TOP_AREA_SPACE(A,LA,REQUESTED_SIZE,PTRFAC,
1585 & NSTEPS,ZONE,FLAG,IERR)
1587 INTEGER NSTEPS,ZONE,FLAG
1588 INTEGER(8) :: REQUESTED_SIZE, LA
1589 INTEGER(8) :: PTRFAC(NSTEPS)
1590 INTEGER(8) :: FREE_SIZE, FREE_HOLE, FREE_HOLE_POS
1592 INTEGER I,TMP_NODE,FREE_HOLE_FLAG, J
1593 INTEGER, intent(out)::IERR
1596.EQ..AND.
IF(LRLU_SOLVE_T(ZONE)SIZE_SOLVE_Z(ZONE)
1597.NOT.
& ((CURRENT_POS_T(ZONE)
1598.GT.
& PDEB_SOLVE_Z(ZONE)+MAX_NB_NODES_FOR_ZONE-1)))THEN
1601 J=max(POS_HOLE_B(ZONE),PDEB_SOLVE_Z(ZONE))
1602 J=min(J,PDEB_SOLVE_Z(ZONE)+MAX_NB_NODES_FOR_ZONE-1)
1603 DO I=POS_HOLE_T(ZONE)-1,J,-1
1604.LT..AND..GT.
IF((POS_IN_MEM(I)0)(POS_IN_MEM(I)
1605 & -(N_OOC+1)*NB_Z))THEN
1606 TMP_NODE=-POS_IN_MEM(I)
1607.NE.
ELSEIF(POS_IN_MEM(I)0)THEN
1611 POS_HOLE_T(ZONE)=I+1
1612.EQ..OR.
IF((POS_HOLE_T(ZONE)PDEB_SOLVE_Z(ZONE))
1613.LE..OR.
& (POS_HOLE_T(ZONE)POS_HOLE_B(ZONE))
1614.EQ.
& (POS_HOLE_T(ZONE)POS_HOLE_B(ZONE)+1))THEN
1615 CURRENT_POS_B(ZONE)=-9999
1616 POS_HOLE_B(ZONE)=-9999
1617 LRLU_SOLVE_B(ZONE)=0_8
1618 POS_HOLE_T(ZONE)=PDEB_SOLVE_Z(ZONE)
1623 FREE_HOLE_POS=POSFAC_SOLVE(ZONE)
1624 DO I=CURRENT_POS_T(ZONE)-1,POS_HOLE_T(ZONE),-1
1625.LT..AND..GT.
IF((POS_IN_MEM(I)0)(POS_IN_MEM(I)
1626 & -(N_OOC+1)*NB_Z))THEN
1627 TMP_NODE=-POS_IN_MEM(I)
1628.EQ.
IF(FREE_HOLE_FLAG1)THEN
1629 FREE_HOLE=FREE_HOLE_POS-
1630 & (abs(PTRFAC(STEP_OOC(TMP_NODE)))+
1631 & SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE))
1633 FREE_SIZE=FREE_SIZE+FREE_HOLE
1635 FREE_HOLE_POS=abs(PTRFAC(STEP_OOC(TMP_NODE)))
1636 PTRFAC(STEP_OOC(TMP_NODE))=-777777_8
1637 INODE_TO_POS(STEP_OOC(TMP_NODE))=0
1638 OOC_STATE_NODE(STEP_OOC(TMP_NODE))=ALREADY_USED
1640 FREE_SIZE=FREE_SIZE+SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),
1642.EQ.
ELSEIF(POS_IN_MEM(I)0)THEN
1644.NE.
ELSEIF(POS_IN_MEM(I)0)THEN
1645 WRITE(*,*)MYID_OOC,': internal error(10) in ooc
',
1647 & CURRENT_POS_T(ZONE)-1,POS_HOLE_T(ZONE),I
1651.EQ.
IF(POS_HOLE_T(ZONE)PDEB_SOLVE_Z(ZONE))THEN
1652.EQ.
IF(FREE_HOLE_FLAG0)THEN
1656.EQ.
IF(FREE_HOLE_FLAG1)THEN
1657.GT.
IF(POS_HOLE_T(ZONE)-1PDEB_SOLVE_Z(ZONE))THEN
1658 I=POS_HOLE_T(ZONE)-1
1659 TMP_NODE=abs(POS_IN_MEM(I))
1660.GT.
IF(TMP_NODE(N_OOC+1)*NB_Z)THEN
1661 TMP_NODE=TMP_NODE-(N_OOC+1)*NB_Z
1662 CALL MUMPS_WAIT_REQUEST(IO_REQ(STEP_OOC(TMP_NODE)),IERR)
1664 WRITE(*,*)MYID_OOC,': internal error(11) in ooc
',
1665 & ERR_STR_OOC(1:DIM_ERR_STR_OOC)
1670 CALL CMUMPS_SOLVE_UPDATE_POINTERS(
1671 & IO_REQ(STEP_OOC(TMP_NODE)),PTRFAC,NSTEPS)
1672 FREE_HOLE=FREE_HOLE_POS-
1673 & (abs(PTRFAC(STEP_OOC(TMP_NODE)))+
1674 & SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE))
1675.EQ.
ELSEIF(TMP_NODE0)THEN
1676 DO J=I,PDEB_SOLVE_Z(ZONE),-1
1677.NE.
IF(POS_IN_MEM(J)0) EXIT
1679.LT.
IF(POS_IN_MEM(J)0)THEN
1680 WRITE(*,*)MYID_OOC,': internal error (12) in ooc
',
1684.GE.
IF(JPDEB_SOLVE_Z(ZONE))THEN
1685 TMP_NODE=POS_IN_MEM(J)
1686 FREE_HOLE=FREE_HOLE_POS-
1687 & (abs(PTRFAC(STEP_OOC(TMP_NODE)))+
1688 & SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE))
1690 FREE_HOLE=FREE_HOLE_POS-IDEB_SOLVE_Z(ZONE)
1692.LT.
ELSEIF(TMP_NODE0)THEN
1693 WRITE(*,*)MYID_OOC,': internal error(13) in ooc
',
1697 FREE_HOLE=FREE_HOLE_POS-
1698 & (abs(PTRFAC(STEP_OOC(TMP_NODE)))+
1699 & SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE))
1702 FREE_HOLE=FREE_HOLE_POS-IDEB_SOLVE_Z(ZONE)
1704 FREE_SIZE=FREE_SIZE+FREE_HOLE
1706 CURRENT_POS_T(ZONE)=POS_HOLE_T(ZONE)
1707 LRLU_SOLVE_T(ZONE)=LRLU_SOLVE_T(ZONE)+FREE_SIZE
1708 POSFAC_SOLVE(ZONE)=POSFAC_SOLVE(ZONE)-FREE_SIZE
1710.LE.
IF(REQUESTED_SIZELRLU_SOLVE_T(ZONE))THEN
1716 END SUBROUTINE CMUMPS_GET_TOP_AREA_SPACE
1717 SUBROUTINE CMUMPS_GET_BOTTOM_AREA_SPACE(A,LA,REQUESTED_SIZE,
1718 & PTRFAC,NSTEPS,ZONE,FLAG,IERR)
1720 INTEGER NSTEPS,ZONE,FLAG
1721 INTEGER (8) :: REQUESTED_SIZE
1723 INTEGER (8) :: PTRFAC(NSTEPS)
1725 INTEGER(8) :: FREE_SIZE, FREE_HOLE_POS, FREE_HOLE
1726 INTEGER I,J,TMP_NODE,FREE_HOLE_FLAG
1727 INTEGER, intent(out) :: IERR
1730.EQ.
IF(LRLU_SOLVE_B(ZONE)SIZE_SOLVE_Z(ZONE))THEN
1733.EQ.
IF(POS_HOLE_B(ZONE)-9999)THEN
1736 J=max(PDEB_SOLVE_Z(ZONE),POS_HOLE_T(ZONE))
1737 J=min(J,PDEB_SOLVE_Z(ZONE)+MAX_NB_NODES_FOR_ZONE-1)
1739 DO I=POS_HOLE_B(ZONE)+1,J
1740.LT..AND..GT.
IF((POS_IN_MEM(I)0)(POS_IN_MEM(I)
1741 & -(N_OOC+1)*NB_Z))THEN
1742 TMP_NODE=-POS_IN_MEM(I)
1743 FREE_SIZE=FREE_SIZE+SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),
1745.NE.
ELSEIF(POS_IN_MEM(I)0)THEN
1749 POS_HOLE_B(ZONE)=I-1
1750.EQ..OR.
IF((POS_HOLE_T(ZONE)PDEB_SOLVE_Z(ZONE))
1751.LE..OR.
& (POS_HOLE_T(ZONE)POS_HOLE_B(ZONE))
1752.EQ.
& (POS_HOLE_T(ZONE)POS_HOLE_B(ZONE)+1))THEN
1753 CURRENT_POS_B(ZONE)=-9999
1754 POS_HOLE_B(ZONE)=-9999
1755 LRLU_SOLVE_B(ZONE)=0_8
1756 POS_HOLE_T(ZONE)=PDEB_SOLVE_Z(ZONE)
1761 FREE_HOLE_POS=IDEB_SOLVE_Z(ZONE)
1762.EQ.
IF(POS_HOLE_B(ZONE)-9999)THEN
1765 DO I=PDEB_SOLVE_Z(ZONE),POS_HOLE_B(ZONE)
1766.LE..AND..GT.
IF((POS_IN_MEM(I)0)(POS_IN_MEM(I)
1767 & -(N_OOC+1)*NB_Z))THEN
1768 TMP_NODE=-POS_IN_MEM(I)
1769.NE.
IF(TMP_NODE0)THEN
1770.EQ.
IF(IPDEB_SOLVE_Z(ZONE))THEN
1771.NE.
IF(abs(PTRFAC(STEP_OOC(TMP_NODE)))
1772 & IDEB_SOLVE_Z(ZONE))THEN
1773 FREE_SIZE=FREE_SIZE+abs(PTRFAC(STEP_OOC(TMP_NODE)))
1774 & -IDEB_SOLVE_Z(ZONE)
1777.EQ.
IF(FREE_HOLE_FLAG1)THEN
1778 FREE_HOLE=abs(PTRFAC(STEP_OOC(TMP_NODE)))-
1781 FREE_SIZE=FREE_SIZE+FREE_HOLE
1783 FREE_HOLE_POS=abs(PTRFAC(STEP_OOC(TMP_NODE)))+
1784 & SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE)
1785 PTRFAC(STEP_OOC(TMP_NODE))=-777777_8
1786 INODE_TO_POS(STEP_OOC(TMP_NODE))=0
1787 OOC_STATE_NODE(STEP_OOC(TMP_NODE))=ALREADY_USED
1788 FREE_SIZE=FREE_SIZE+SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),
1794.NE.
ELSEIF(POS_IN_MEM(I)0)THEN
1795 WRITE(*,*)MYID_OOC,': internal error(14) in ooc
',
1797 & CURRENT_POS_T(ZONE)-1,POS_HOLE_B(ZONE),I,POS_IN_MEM(I)
1801.EQ.
IF(FREE_HOLE_FLAG1)THEN
1802.LT.
IF(POS_HOLE_B(ZONE)+1CURRENT_POS_T(ZONE)-1)THEN
1803 I=POS_HOLE_B(ZONE)+1
1804 TMP_NODE=abs(POS_IN_MEM(I))
1805.GT.
IF(TMP_NODE(N_OOC+1)*NB_Z)THEN
1806 TMP_NODE=TMP_NODE-(N_OOC+1)*NB_Z
1807 CALL MUMPS_WAIT_REQUEST(IO_REQ(STEP_OOC(TMP_NODE)),IERR)
1809 WRITE(*,*)MYID_OOC,': internal error(15) in ooc
',
1810 & ERR_STR_OOC(1:DIM_ERR_STR_OOC)
1815 CALL CMUMPS_SOLVE_UPDATE_POINTERS(
1816 & IO_REQ(STEP_OOC(TMP_NODE)),PTRFAC,NSTEPS)
1817 FREE_HOLE=abs(PTRFAC(STEP_OOC(TMP_NODE)))-FREE_HOLE_POS
1818.EQ.
ELSEIF(TMP_NODE0)THEN
1819 DO J=I,CURRENT_POS_T(ZONE)-1
1820.NE.
IF(POS_IN_MEM(J)0) EXIT
1822.LT.
IF(POS_IN_MEM(J)0)THEN
1823 WRITE(*,*)MYID_OOC,': internal error(16) in ooc
',
1827.LE.
IF(JCURRENT_POS_T(ZONE)-1)THEN
1828 TMP_NODE=POS_IN_MEM(J)
1829 FREE_HOLE=abs(PTRFAC(STEP_OOC(TMP_NODE)))-
1832 FREE_HOLE=POSFAC_SOLVE(ZONE)-FREE_HOLE_POS
1834.LT.
ELSEIF(TMP_NODE0)THEN
1835 WRITE(*,*)MYID_OOC,': internal error(17) in ooc
',
1839 FREE_HOLE=abs(PTRFAC(STEP_OOC(TMP_NODE)))-
1843 FREE_HOLE=POSFAC_SOLVE(ZONE)-FREE_HOLE_POS
1845 FREE_SIZE=FREE_SIZE+FREE_HOLE
1847 LRLU_SOLVE_B(ZONE)=FREE_SIZE
1848.LT.
IF(POS_HOLE_B(ZONE)CURRENT_POS_T(ZONE)-1)THEN
1849 TMP_NODE=POS_IN_MEM(POS_HOLE_B(ZONE)+1)
1850.LT.
IF(TMP_NODE-(N_OOC+1)*NB_Z)THEN
1851 TMP_NODE=abs(TMP_NODE)-(N_OOC+1)*NB_Z
1852 CALL MUMPS_WAIT_REQUEST(IO_REQ(STEP_OOC(TMP_NODE)),IERR)
1854 WRITE(*,*)MYID_OOC,': internal error(18) in ooc
',
1855 & ERR_STR_OOC(1:DIM_ERR_STR_OOC)
1860 CALL CMUMPS_SOLVE_UPDATE_POINTERS(
1861 & IO_REQ(STEP_OOC(TMP_NODE)),PTRFAC,NSTEPS)
1863 LRLU_SOLVE_B(ZONE)=LRLU_SOLVE_B(ZONE)+
1864 & (abs(PTRFAC(STEP_OOC(abs(TMP_NODE))))-IDEB_SOLVE_Z(ZONE)-
1865 & LRLU_SOLVE_B(ZONE))
1867 CURRENT_POS_B(ZONE)=POS_HOLE_B(ZONE)
1869.EQ..AND.
IF((POS_HOLE_B(ZONE)-9999)
1870.NE.
& (LRLU_SOLVE_B(ZONE)0_8))THEN
1871 WRITE(*,*)MYID_OOC,': internal error(19) in ooc
',
1875.LE..AND.
IF((REQUESTED_SIZELRLU_SOLVE_B(ZONE))
1876.NE.
& (POS_HOLE_B(ZONE)-9999))THEN
1881 END SUBROUTINE CMUMPS_GET_BOTTOM_AREA_SPACE
1882 SUBROUTINE CMUMPS_SOLVE_ALLOC_PTR_UPD_T(INODE,PTRFAC,
1883 & KEEP,KEEP8, A,ZONE)
1885 INTEGER INODE,KEEP(500)
1886 INTEGER(8) KEEP8(150)
1887 INTEGER(8) :: PTRFAC(KEEP(28))
1888 COMPLEX A(FACT_AREA_SIZE)
1890 LRLU_SOLVE_T(ZONE)=LRLU_SOLVE_T(ZONE)-
1891 & SIZE_OF_BLOCK(STEP_OOC(INODE),OOC_FCT_TYPE)
1892 LRLUS_SOLVE(ZONE)=LRLUS_SOLVE(ZONE)-
1893 & SIZE_OF_BLOCK(STEP_OOC(INODE),OOC_FCT_TYPE)
1894 PTRFAC(STEP_OOC(INODE))=POSFAC_SOLVE(ZONE)
1895 OOC_STATE_NODE(STEP_OOC(INODE))=NOT_USED
1896.EQ.
IF(POSFAC_SOLVE(ZONE)IDEB_SOLVE_Z(ZONE))THEN
1897 POS_HOLE_B(ZONE)=-9999
1898 CURRENT_POS_B(ZONE)=-9999
1899 LRLU_SOLVE_B(ZONE)=0_8
1901.LT.
IF(PTRFAC(STEP_OOC(INODE))IDEB_SOLVE_Z(ZONE))THEN
1902 WRITE(*,*)MYID_OOC,': internal error(20) in ooc
',
1903 & ' problem avec debut(2)
',INODE,
1904 & PTRFAC(STEP_OOC(INODE)),IDEB_SOLVE_Z(ZONE),ZONE
1907 INODE_TO_POS(STEP_OOC(INODE))=CURRENT_POS_T(ZONE)
1908 POS_IN_MEM(CURRENT_POS_T(ZONE))=INODE
1909.GT.
IF(CURRENT_POS_T(ZONE)(PDEB_SOLVE_Z(ZONE)+
1910 & MAX_NB_NODES_FOR_ZONE-1))THEN
1911 WRITE(*,*)MYID_OOC,': internal error(21) in ooc
',
1913 & CURRENT_POS_T(ZONE),ZONE
1916 CURRENT_POS_T(ZONE)=CURRENT_POS_T(ZONE)+1
1917 POS_HOLE_T(ZONE)=CURRENT_POS_T(ZONE)
1918 POS_HOLE_T(ZONE)=CURRENT_POS_T(ZONE)
1919 POSFAC_SOLVE(ZONE)=POSFAC_SOLVE(ZONE)+
1920 & SIZE_OF_BLOCK(STEP_OOC(INODE),OOC_FCT_TYPE)
1921 END SUBROUTINE CMUMPS_SOLVE_ALLOC_PTR_UPD_T
1922 SUBROUTINE CMUMPS_SOLVE_ALLOC_PTR_UPD_B(INODE,PTRFAC,
1926 INTEGER INODE,KEEP(500)
1927 INTEGER(8) KEEP8(150)
1928 INTEGER(8) :: PTRFAC(KEEP(28))
1929 COMPLEX A(FACT_AREA_SIZE)
1931.EQ.
IF(POS_HOLE_B(ZONE)-9999)THEN
1932 WRITE(*,*)MYID_OOC,': internal error(22) in ooc
',
1936 LRLUS_SOLVE(ZONE)=LRLUS_SOLVE(ZONE)-
1937 & SIZE_OF_BLOCK(STEP_OOC(INODE),OOC_FCT_TYPE)
1938 LRLU_SOLVE_B(ZONE)=LRLU_SOLVE_B(ZONE)-
1939 & SIZE_OF_BLOCK(STEP_OOC(INODE),OOC_FCT_TYPE)
1940 PTRFAC(STEP_OOC(INODE))=IDEB_SOLVE_Z(ZONE)+
1941 & LRLU_SOLVE_B(ZONE)
1942 OOC_STATE_NODE(STEP_OOC(INODE))=NOT_USED
1943.LT.
IF(PTRFAC(STEP_OOC(INODE))IDEB_SOLVE_Z(ZONE))THEN
1944 WRITE(*,*)MYID_OOC,': internal error(23) in ooc
',
1945 & PTRFAC(STEP_OOC(INODE)),IDEB_SOLVE_Z(ZONE)
1948 INODE_TO_POS(STEP_OOC(INODE))=CURRENT_POS_B(ZONE)
1949.EQ.
IF(CURRENT_POS_B(ZONE)0)THEN
1950 WRITE(*,*)MYID_OOC,': internal error(23b) in
'
1953 POS_IN_MEM(CURRENT_POS_B(ZONE))=INODE
1954 CURRENT_POS_B(ZONE)=CURRENT_POS_B(ZONE)-1
1955 POS_HOLE_B(ZONE)=CURRENT_POS_B(ZONE)
1956 END SUBROUTINE CMUMPS_SOLVE_ALLOC_PTR_UPD_B
1957 SUBROUTINE CMUMPS_FREE_SPACE_FOR_SOLVE(A,LA,REQUESTED_SIZE,PTRFAC,
1960 INTEGER(8) :: LA, REQUESTED_SIZE
1962 INTEGER, intent(out) :: IERR
1963 INTEGER(8) :: PTRFAC(NSTEPS)
1965 INTEGER (8) :: APOS_FIRST_FREE,
1969 INTEGER J,I,TMP_NODE, NB_FREE, IPOS_FIRST_FREE
1970 INTEGER(8) :: K8, AREA_POINTER
1971 INTEGER FREE_HOLE_FLAG
1973.EQ.
IF(LRLU_SOLVE_T(ZONE)SIZE_SOLVE_Z(ZONE))THEN
1976 AREA_POINTER=IDEB_SOLVE_Z(ZONE)
1978 DO I=PDEB_SOLVE_Z(ZONE),CURRENT_POS_T(ZONE)-1
1979.LE..AND.
IF((POS_IN_MEM(I)0)
1980.GT.
& (POS_IN_MEM(I)-((N_OOC+1)*NB_Z))) GOTO 666
1981 TMP_NODE=abs(POS_IN_MEM(I))
1982.GT.
IF(TMP_NODE((N_OOC+1)*NB_Z))THEN
1983 TMP_NODE=TMP_NODE-((N_OOC+1)*NB_Z)
1985 AREA_POINTER=AREA_POINTER+
1986 & abs(SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE))
1989.EQ..AND.
IF((ICURRENT_POS_T(ZONE)-1)
1990.NE.
& (PDEB_SOLVE_Z(ZONE)CURRENT_POS_T(ZONE)-1))THEN
1991.GT..OR.
IF((POS_IN_MEM(I)0)
1992.LT.
& (POS_IN_MEM(I)-((N_OOC+1)*NB_Z)))THEN
1993 WRITE(*,*)MYID_OOC,': internal error(25) in ooc
',
1994 & ': there are no free blocks
',
1996 & CURRENT_POS_T(ZONE)
2000.EQ.
IF(POS_IN_MEM(I)0)THEN
2001 APOS_FIRST_FREE=AREA_POINTER
2002 FREE_HOLE_POS=AREA_POINTER
2004 TMP_NODE=abs(POS_IN_MEM(I))
2005 APOS_FIRST_FREE=abs(PTRFAC(STEP_OOC(TMP_NODE)))
2007.NE.
IF(POS_IN_MEM(PDEB_SOLVE_Z(ZONE))0)THEN
2008.LT.
IF(POS_IN_MEM(PDEB_SOLVE_Z(ZONE))-((N_OOC+1)*NB_Z))THEN
2009 TMP_NODE=abs(POS_IN_MEM(PDEB_SOLVE_Z(ZONE)))-
2011 CALL MUMPS_WAIT_REQUEST(IO_REQ(STEP_OOC(TMP_NODE)),IERR)
2016 CALL CMUMPS_SOLVE_UPDATE_POINTERS(
2017 & IO_REQ(STEP_OOC(TMP_NODE)),PTRFAC,NSTEPS)
2019 TMP_NODE=abs(POS_IN_MEM(PDEB_SOLVE_Z(ZONE)))
2021.NE.
IF(abs(PTRFAC(STEP_OOC(TMP_NODE)))IDEB_SOLVE_Z(ZONE))THEN
2022.NE..OR..EQ.
IF((POS_IN_MEM(I)0)(ICURRENT_POS_T(ZONE)))THEN
2023 SIZE_HOLE=abs(PTRFAC(STEP_OOC(TMP_NODE)))-
2024 & IDEB_SOLVE_Z(ZONE)
2026 APOS_FIRST_FREE=IDEB_SOLVE_Z(ZONE)
2027.GT.
IF(POS_IN_MEM(PDEB_SOLVE_Z(ZONE))0)THEN
2028 DO J=PDEB_SOLVE_Z(ZONE),I-1
2029 TMP_NODE=POS_IN_MEM(J)
2030.LE.
IF(TMP_NODE0)THEN
2031.LT.
IF(TMP_NODE-((N_OOC+1)*NB_Z))THEN
2032 TMP_NODE=abs(POS_IN_MEM(J))-((N_OOC+1)*NB_Z)
2033 CALL MUMPS_WAIT_REQUEST(
2034 & IO_REQ(STEP_OOC(TMP_NODE)),IERR)
2039 CALL CMUMPS_SOLVE_UPDATE_POINTERS(
2040 & IO_REQ(STEP_OOC(TMP_NODE)),PTRFAC,NSTEPS)
2041 TMP_NODE=POS_IN_MEM(J)
2043 WRITE(*,*)MYID_OOC,': internal error(26) in ooc
',
2045 & J,I-1,(N_OOC+1)*NB_Z
2050 & SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE)
2051 A(APOS_FIRST_FREE+K8-1_8)=
2052 & A(PTRFAC(STEP_OOC(TMP_NODE))+K8-1_8)
2054 PTRFAC(STEP_OOC(TMP_NODE))=APOS_FIRST_FREE
2055 APOS_FIRST_FREE=APOS_FIRST_FREE+
2056 & SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE)
2064 DO J=I,CURRENT_POS_T(ZONE)-1
2065 TMP_NODE=abs(POS_IN_MEM(J))
2066.LT.
IF(POS_IN_MEM(J)-((N_OOC+1)*NB_Z))THEN
2067 TMP_NODE=TMP_NODE-((N_OOC+1)*NB_Z)
2068 CALL MUMPS_WAIT_REQUEST(IO_REQ(STEP_OOC(TMP_NODE)),IERR)
2073 CALL CMUMPS_SOLVE_UPDATE_POINTERS(
2074 & IO_REQ(STEP_OOC(TMP_NODE)),PTRFAC,NSTEPS)
2075 TMP_NODE=abs(POS_IN_MEM(J))
2077.GT.
IF(POS_IN_MEM(J)0)THEN
2078 DO K8=1_8,SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE)
2079 A(APOS_FIRST_FREE+K8-1_8)=
2080 & A(PTRFAC(STEP_OOC(TMP_NODE))+K8-1_8)
2082.EQ.
IF(FREE_HOLE_FLAG1)THEN
2083 FREE_HOLE=abs(PTRFAC(STEP_OOC(TMP_NODE)))-
2086 SIZE_HOLE=SIZE_HOLE+FREE_HOLE
2088 FREE_HOLE_POS=abs(PTRFAC(STEP_OOC(TMP_NODE)))+
2089 & SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE)
2090 PTRFAC(STEP_OOC(TMP_NODE))=APOS_FIRST_FREE
2091 APOS_FIRST_FREE=APOS_FIRST_FREE+
2092 & SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE)
2093.EQ.
ELSEIF(POS_IN_MEM(J)0)THEN
2098.EQ.
IF(FREE_HOLE_FLAG1)THEN
2099 FREE_HOLE=abs(PTRFAC(STEP_OOC(TMP_NODE)))-
2102 SIZE_HOLE=SIZE_HOLE+FREE_HOLE
2104 FREE_HOLE_POS=abs(PTRFAC(STEP_OOC(TMP_NODE)))+
2105 & SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE)
2106 SIZE_HOLE=SIZE_HOLE+SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),
2108 PTRFAC(STEP_OOC(abs(POS_IN_MEM(J))))=-77777_8
2111.EQ.
IF(FREE_HOLE_FLAG1)THEN
2112 FREE_HOLE=POSFAC_SOLVE(ZONE)-FREE_HOLE_POS
2114 SIZE_HOLE=SIZE_HOLE+FREE_HOLE
2117 DO J=I,CURRENT_POS_T(ZONE)-1
2118.LT.
IF(POS_IN_MEM(J)0)THEN
2119 TMP_NODE=abs(POS_IN_MEM(J))
2120 INODE_TO_POS(STEP_OOC(TMP_NODE))=0
2122 OOC_STATE_NODE(STEP_OOC(TMP_NODE))=ALREADY_USED
2123.GT.
ELSEIF(POS_IN_MEM(J)0)THEN
2124 TMP_NODE=abs(POS_IN_MEM(J))
2125 POS_IN_MEM(IPOS_FIRST_FREE)=POS_IN_MEM(J)
2126 INODE_TO_POS(STEP_OOC(TMP_NODE))=IPOS_FIRST_FREE
2127 IPOS_FIRST_FREE=IPOS_FIRST_FREE+1
2130 LRLU_SOLVE_T(ZONE)=LRLU_SOLVE_T(ZONE)+SIZE_HOLE
2131 POSFAC_SOLVE(ZONE)=POSFAC_SOLVE(ZONE)-SIZE_HOLE
2132 CURRENT_POS_T(ZONE)=CURRENT_POS_T(ZONE)-NB_FREE
2133 POS_HOLE_T(ZONE)=CURRENT_POS_T(ZONE)
2134 LRLU_SOLVE_B(ZONE)=0_8
2135 POS_HOLE_B(ZONE)=-9999
2136 CURRENT_POS_B(ZONE)=-9999
2137 LRLU_SOLVE_B(ZONE)=0_8
2138.NE.
IF(LRLU_SOLVE_T(ZONE)LRLUS_SOLVE(ZONE))THEN
2139 WRITE(*,*)MYID_OOC,': internal error(27) in ooc
',
2140 & LRLU_SOLVE_T(ZONE),
2144 LRLU_SOLVE_T(ZONE)=LRLUS_SOLVE(ZONE)
2145.LT.
IF(LRLUS_SOLVE(ZONE)0_8)THEN
2146 WRITE(*,*)MYID_OOC,': internal error(28) in ooc
',
2150.LT.
IF(POSFAC_SOLVE(ZONE)IDEB_SOLVE_Z(ZONE))THEN
2151 WRITE(*,*)MYID_OOC,': internal error(29) in ooc
',
2152 & POSFAC_SOLVE(ZONE),IDEB_SOLVE_Z(ZONE)
2155.NE.
IF(POSFAC_SOLVE(ZONE)(IDEB_SOLVE_Z(ZONE)+SIZE_SOLVE_Z(ZONE)-
2156 & LRLUS_SOLVE(ZONE)))THEN
2157 WRITE(*,*)MYID_OOC,': internal error(30) in ooc
',
2159 & POSFAC_SOLVE(ZONE),(SIZE_SOLVE_Z(ZONE)-
2160 & LRLUS_SOLVE(ZONE))+IDEB_SOLVE_Z(ZONE),LRLUS_SOLVE(ZONE)
2163.GT.
IF(POSFAC_SOLVE(ZONE)
2164 & (IDEB_SOLVE_Z(ZONE)+SIZE_SOLVE_Z(ZONE)-1_8))THEN
2165 WRITE(*,*)MYID_OOC,': internal error(31) in ooc
',
2166 & POSFAC_SOLVE(ZONE),IDEB_SOLVE_Z(ZONE)+
2167 & SIZE_SOLVE_Z(ZONE)-1_8
2171 END SUBROUTINE CMUMPS_FREE_SPACE_FOR_SOLVE
2172 SUBROUTINE CMUMPS_OOC_UPDATE_SOLVE_STAT(INODE,PTRFAC,NSTEPS,FLAG)
2174 INTEGER INODE,NSTEPS,FLAG
2175 INTEGER (8) :: PTRFAC(NSTEPS)
2177.LT..OR..GT.
IF((FLAG0)(FLAG1))THEN
2178 WRITE(*,*)MYID_OOC,': internal error (32) in ooc
',
2182 CALL CMUMPS_SEARCH_SOLVE(PTRFAC(STEP_OOC(INODE)),ZONE)
2183.LT.
IF(LRLUS_SOLVE(ZONE)0_8)THEN
2184 WRITE(*,*)MYID_OOC,': internal error(33) in ooc
',
2189 LRLUS_SOLVE(ZONE)=LRLUS_SOLVE(ZONE)+
2190 & SIZE_OF_BLOCK(STEP_OOC(INODE),OOC_FCT_TYPE)
2192 LRLUS_SOLVE(ZONE)=LRLUS_SOLVE(ZONE)-
2193 & SIZE_OF_BLOCK(STEP_OOC(INODE),OOC_FCT_TYPE)
2195.LT.
IF(LRLUS_SOLVE(ZONE)0_8)THEN
2196 WRITE(*,*)MYID_OOC,': internal error(34) in ooc
',
2200 END SUBROUTINE CMUMPS_OOC_UPDATE_SOLVE_STAT
2201 SUBROUTINE CMUMPS_SEARCH_SOLVE(ADDR,ZONE)
2207.LE.
DO WHILE (INB_Z)
2208.LT.
IF(ADDRIDEB_SOLVE_Z(I))THEN
2214 END SUBROUTINE CMUMPS_SEARCH_SOLVE
2215 FUNCTION CMUMPS_SOLVE_IS_END_REACHED()
2217 LOGICAL CMUMPS_SOLVE_IS_END_REACHED
2218 CMUMPS_SOLVE_IS_END_REACHED=.FALSE.
2219.EQ.
IF(SOLVE_STEP0)THEN
2220.GT.
IF(CUR_POS_SEQUENCETOTAL_NB_OOC_NODES(OOC_FCT_TYPE))THEN
2221 CMUMPS_SOLVE_IS_END_REACHED=.TRUE.
2223.EQ.
ELSEIF(SOLVE_STEP1)THEN
2224.LT.
IF(CUR_POS_SEQUENCE1)THEN
2225 CMUMPS_SOLVE_IS_END_REACHED=.TRUE.
2229 END FUNCTION CMUMPS_SOLVE_IS_END_REACHED
2230 SUBROUTINE CMUMPS_SOLVE_ZONE_READ(ZONE,A,LA,PTRFAC,NSTEPS,IERR)
2233 INTEGER(8), INTENT(IN) :: LA
2234 INTEGER, intent(out) :: IERR
2236 INTEGER(8) :: PTRFAC(NSTEPS)
2237 INTEGER(8) :: SIZE, DEST
2238 INTEGER(8) :: NEEDED_SIZE
2239 INTEGER FLAG,TMP_FLAG,POS_SEQ,TMP_NODE,
2244 IF(CMUMPS_SOLVE_IS_END_REACHED())THEN
2247.EQ.
IF(SOLVE_STEP0)THEN
2248.LE.
IF(CUR_POS_SEQUENCETOTAL_NB_OOC_NODES(OOC_FCT_TYPE))THEN
2249 TMP_NODE=OOC_INODE_SEQUENCE(CUR_POS_SEQUENCE,
2251.GT.
DO WHILE(SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE)
2252 & SIZE_SOLVE_Z(ZONE))
2253 CUR_POS_SEQUENCE=CUR_POS_SEQUENCE+1
2254 IF(CMUMPS_SOLVE_IS_END_REACHED())THEN
2257 TMP_NODE=OOC_INODE_SEQUENCE(CUR_POS_SEQUENCE,
2260 CALL CMUMPS_OOC_SKIP_NULL_SIZE_NODE()
2261 NEEDED_SIZE=max(MIN_SIZE_READ,
2262 & SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE))
2264 NEEDED_SIZE=MIN_SIZE_READ
2266.EQ.
ELSEIF(SOLVE_STEP1)THEN
2267.GE.
IF(CUR_POS_SEQUENCE1)THEN
2268 TMP_NODE=OOC_INODE_SEQUENCE(CUR_POS_SEQUENCE,
2270.GT.
DO WHILE(SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE)
2271 & SIZE_SOLVE_Z(ZONE))
2272 CUR_POS_SEQUENCE=CUR_POS_SEQUENCE-1
2273 IF(CMUMPS_SOLVE_IS_END_REACHED())THEN
2276 TMP_NODE=OOC_INODE_SEQUENCE(CUR_POS_SEQUENCE,
2279 CALL CMUMPS_OOC_SKIP_NULL_SIZE_NODE()
2280 NEEDED_SIZE=max(MIN_SIZE_READ,
2281 & SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE))
2283 NEEDED_SIZE=MIN_SIZE_READ
2286.LT.
IF(LRLUS_SOLVE(ZONE)NEEDED_SIZE)THEN
2288.LT..AND.
ELSEIF((LRLU_SOLVE_T(ZONE)NEEDED_SIZE)
2289.LT..AND.
& (LRLU_SOLVE_B(ZONE)NEEDED_SIZE)
2290.LT.
& (dble(LRLUS_SOLVE(ZONE))0.3d0*
2291 & dble(SIZE_SOLVE_Z(ZONE)))) THEN
2294.GT..AND..EQ..AND.
IF((LRLU_SOLVE_T(ZONE)NEEDED_SIZE)(SOLVE_STEP0)
2295.LT.
& ((CURRENT_POS_T(ZONE)-PDEB_SOLVE_Z(ZONE)+1)
2296 & MAX_NB_NODES_FOR_ZONE))THEN
2299.EQ.
IF(SOLVE_STEP0)THEN
2300 CALL CMUMPS_GET_TOP_AREA_SPACE(A,FACT_AREA_SIZE,
2301 & NEEDED_SIZE,PTRFAC,NSTEPS,ZONE,TMP_FLAG,IERR)
2306.EQ.
IF(TMP_FLAG0)THEN
2307 CALL CMUMPS_GET_BOTTOM_AREA_SPACE(A,FACT_AREA_SIZE,
2308 & NEEDED_SIZE,PTRFAC,NSTEPS,ZONE,TMP_FLAG,IERR)
2315 CALL CMUMPS_GET_BOTTOM_AREA_SPACE(A,FACT_AREA_SIZE,
2316 & NEEDED_SIZE,PTRFAC,NSTEPS,ZONE,TMP_FLAG,IERR)
2321.EQ.
IF(TMP_FLAG0)THEN
2322 CALL CMUMPS_GET_TOP_AREA_SPACE(A,FACT_AREA_SIZE,
2323 & NEEDED_SIZE,PTRFAC,NSTEPS,ZONE,TMP_FLAG,IERR)
2330.EQ.
IF(TMP_FLAG0)THEN
2331 CALL CMUMPS_FREE_SPACE_FOR_SOLVE(A,FACT_AREA_SIZE,
2332 & NEEDED_SIZE,PTRFAC,NSTEPS,ZONE,IERR)
2339 CALL CMUMPS_SOLVE_COMPUTE_READ_SIZE(ZONE,SIZE,DEST,POS_SEQ,
2340 & NB_NODES,FLAG,PTRFAC,NSTEPS)
2344 NB_ZONE_REQ=NB_ZONE_REQ+1
2345 SIZE_ZONE_REQ=SIZE_ZONE_REQ+SIZE
2347 CALL CMUMPS_READ_SOLVE_BLOCK(A(DEST),DEST,SIZE,ZONE,PTRFAC,NSTEPS,
2348 & POS_SEQ,NB_NODES,FLAG,IERR)
2352 END SUBROUTINE CMUMPS_SOLVE_ZONE_READ
2353 SUBROUTINE CMUMPS_SOLVE_COMPUTE_READ_SIZE(ZONE,SIZE,DEST,POS_SEQ,
2354 & NB_NODES,FLAG,PTRFAC,NSTEPS)
2356 INTEGER(8) :: SIZE, DEST
2357 INTEGER ZONE,FLAG,POS_SEQ,NSTEPS
2358 INTEGER(8) :: PTRFAC(NSTEPS), MAX_SIZE, LAST, J8
2359 INTEGER I,START_NODE,K,MAX_NB,
2361 INTEGER NB_NODES_LOC
2363 IF(CMUMPS_SOLVE_IS_END_REACHED())THEN
2368 MAX_SIZE=LRLU_SOLVE_B(ZONE)
2369 MAX_NB=max(0,CURRENT_POS_B(ZONE)-PDEB_SOLVE_Z(ZONE)+1)
2370.EQ.
ELSEIF(FLAG1)THEN
2371 MAX_SIZE=LRLU_SOLVE_T(ZONE)
2372 MAX_NB=MAX_NB_NODES_FOR_ZONE
2374 WRITE(*,*)MYID_OOC,': internal error(35) in ooc
',
2375 & ' unknown flag
value in
',
2379 CALL CMUMPS_OOC_SKIP_NULL_SIZE_NODE()
2381 START_NODE=OOC_INODE_SEQUENCE(I,OOC_FCT_TYPE)
2385.EQ.
IF(ZONENB_Z)THEN
2386 SIZE=SIZE_OF_BLOCK(STEP_OOC(START_NODE),OOC_FCT_TYPE)
2391.EQ.
ELSEIF(FLAG1)THEN
2392 K=CURRENT_POS_T(ZONE)-PDEB_SOLVE_Z(ZONE)+1
2394.EQ.
IF(SOLVE_STEP0)THEN
2396.LE.
DO WHILE(ITOTAL_NB_OOC_NODES(OOC_FCT_TYPE))
2397 IF(SIZE_OF_BLOCK(STEP_OOC(OOC_INODE_SEQUENCE(I,
2405 CUR_POS_SEQUENCE=min(I,TOTAL_NB_OOC_NODES(OOC_FCT_TYPE))
2407.LE..AND.
DO WHILE((J8MAX_SIZE)
2408.LE..AND.
& (ITOTAL_NB_OOC_NODES(OOC_FCT_TYPE))
2410 LAST=SIZE_OF_BLOCK(STEP_OOC(OOC_INODE_SEQUENCE(I,
2414.NOT.
IF(ALREADY)THEN
2415 CUR_POS_SEQUENCE=CUR_POS_SEQUENCE+1
2418 NB_NODES_LOC=NB_NODES_LOC+1
2421 IF((INODE_TO_POS(STEP_OOC(OOC_INODE_SEQUENCE(I,
2424 & (IO_REQ(STEP_OOC(OOC_INODE_SEQUENCE(I,
2425.GE.
& OOC_FCT_TYPE)))
2427.NOT.
IF(ALREADY)THEN
2428 CUR_POS_SEQUENCE=CUR_POS_SEQUENCE+1
2439 NB_NODES_LOC=NB_NODES_LOC+1
2442.GT.
IF(J8MAX_SIZE)THEN
2445 NB_NODES_LOC=NB_NODES_LOC-1
2449.GE.
DO WHILE (CUR_POS_SEQUENCE+NB_NODES_LOC-1
2451 IF(SIZE_OF_BLOCK(STEP_OOC(
2452 & OOC_INODE_SEQUENCE(CUR_POS_SEQUENCE+NB_NODES-1,
2458 NB_NODES_LOC=NB_NODES_LOC-1
2460 POS_SEQ=CUR_POS_SEQUENCE
2461.EQ.
ELSEIF(SOLVE_STEP1)THEN
2463 IF(SIZE_OF_BLOCK(STEP_OOC(OOC_INODE_SEQUENCE(I,
2471 CUR_POS_SEQUENCE=max(I,1)
2473.LE..AND..GE..AND.
DO WHILE((J8MAX_SIZE)(I1)
2475 LAST=SIZE_OF_BLOCK(STEP_OOC(OOC_INODE_SEQUENCE(I,
2479.NOT.
IF(ALREADY)THEN
2480 CUR_POS_SEQUENCE=CUR_POS_SEQUENCE-1
2482 NB_NODES_LOC=NB_NODES_LOC+1
2486 IF((INODE_TO_POS(STEP_OOC(OOC_INODE_SEQUENCE(I,
2489 & (IO_REQ(STEP_OOC(OOC_INODE_SEQUENCE(I,
2490.GE.
& OOC_FCT_TYPE)))
2492.NOT.
IF(ALREADY)THEN
2494 CUR_POS_SEQUENCE=CUR_POS_SEQUENCE-1
2505 NB_NODES_LOC=NB_NODES_LOC+1
2507.GT.
IF(J8MAX_SIZE)THEN
2510 NB_NODES_LOC=NB_NODES_LOC-1
2514 I=CUR_POS_SEQUENCE-NB_NODES_LOC+1
2515.LE.
DO WHILE (ICUR_POS_SEQUENCE)
2516 IF(SIZE_OF_BLOCK(STEP_OOC(
2517 & OOC_INODE_SEQUENCE(I,OOC_FCT_TYPE)),
2518.NE.
& OOC_FCT_TYPE)0_8)THEN
2522 NB_NODES_LOC=NB_NODES_LOC-1
2524 POS_SEQ=CUR_POS_SEQUENCE-NB_NODES_LOC+1
2528 DEST=IDEB_SOLVE_Z(ZONE)+LRLU_SOLVE_B(ZONE)-SIZE
2530 DEST=POSFAC_SOLVE(ZONE)
2532 END SUBROUTINE CMUMPS_SOLVE_COMPUTE_READ_SIZE
2533 SUBROUTINE CMUMPS_OOC_END_SOLVE(IERR)
2535 INTEGER SOLVE_OR_FACTO
2536 INTEGER, intent(out) :: IERR
2538 IF(allocated(LRLUS_SOLVE))THEN
2539 DEALLOCATE(LRLUS_SOLVE)
2541 IF(allocated(LRLU_SOLVE_T))THEN
2542 DEALLOCATE(LRLU_SOLVE_T)
2544 IF(allocated(LRLU_SOLVE_B))THEN
2545 DEALLOCATE(LRLU_SOLVE_B)
2547 IF(allocated(POSFAC_SOLVE))THEN
2548 DEALLOCATE(POSFAC_SOLVE)
2550 IF(allocated(IDEB_SOLVE_Z))THEN
2551 DEALLOCATE(IDEB_SOLVE_Z)
2553 IF(allocated(PDEB_SOLVE_Z))THEN
2554 DEALLOCATE(PDEB_SOLVE_Z)
2556 IF(allocated(SIZE_SOLVE_Z))THEN
2557 DEALLOCATE(SIZE_SOLVE_Z)
2559 IF(allocated(CURRENT_POS_T))THEN
2560 DEALLOCATE(CURRENT_POS_T)
2562 IF(allocated(CURRENT_POS_B))THEN
2563 DEALLOCATE(CURRENT_POS_B)
2565 IF(allocated(POS_HOLE_T))THEN
2566 DEALLOCATE(POS_HOLE_T)
2568 IF(allocated(POS_HOLE_B))THEN
2569 DEALLOCATE(POS_HOLE_B)
2571 IF(allocated(OOC_STATE_NODE))THEN
2572 DEALLOCATE(OOC_STATE_NODE)
2574 IF(allocated(POS_IN_MEM))THEN
2575 DEALLOCATE(POS_IN_MEM)
2577 IF(allocated(INODE_TO_POS))THEN
2578 DEALLOCATE(INODE_TO_POS)
2580 IF(allocated(IO_REQ))THEN
2583 IF(allocated(SIZE_OF_READ))THEN
2584 DEALLOCATE(SIZE_OF_READ)
2586 IF(allocated(FIRST_POS_IN_READ))THEN
2587 DEALLOCATE(FIRST_POS_IN_READ)
2589 IF(allocated(READ_DEST))THEN
2590 DEALLOCATE(READ_DEST)
2592 IF(allocated(READ_MNG))THEN
2593 DEALLOCATE(READ_MNG)
2595 IF(allocated(REQ_TO_ZONE))THEN
2596 DEALLOCATE(REQ_TO_ZONE)
2598 IF(allocated(REQ_ID))THEN
2602 CALL MUMPS_CLEAN_IO_DATA_C(MYID_OOC,SOLVE_OR_FACTO,IERR)
2605 & WRITE(ICNTL1,*)MYID_OOC,':
',ERR_STR_OOC(1:DIM_ERR_STR_OOC)
2608 END SUBROUTINE CMUMPS_OOC_END_SOLVE
2609 SUBROUTINE CMUMPS_SOLVE_PREPARE_PREF(PTRFAC,NSTEPS,
2612 INTEGER, INTENT(in) :: NSTEPS
2613 INTEGER(8), INTENT(INOUT) :: PTRFAC(NSTEPS)
2614 INTEGER(8), INTENT(IN) :: LA
2616 INTEGER :: I, TMP, ZONE, IPAS, IBEG, IEND
2617 INTEGER(8) :: SAVE_PTR
2618 LOGICAL :: COMPRESS_TO_BE_DONE, SET_POS_SEQUENCE
2620 INTEGER(8) :: DUMMY_SIZE
2621 COMPRESS_TO_BE_DONE = .FALSE.
2624 SET_POS_SEQUENCE = .TRUE.
2625.EQ.
IF(SOLVE_STEP0)THEN
2627 IEND = TOTAL_NB_OOC_NODES(OOC_FCT_TYPE)
2630 IBEG = TOTAL_NB_OOC_NODES(OOC_FCT_TYPE)
2635 J = OOC_INODE_SEQUENCE(I,OOC_FCT_TYPE)
2636 TMP=INODE_TO_POS(STEP_OOC(J))
2638 IF (SET_POS_SEQUENCE) THEN
2639 SET_POS_SEQUENCE = .FALSE.
2640 CUR_POS_SEQUENCE = I
2642.EQ..AND..EQ.
IF (KEEP_OOC(237)0 KEEP_OOC(235)0) THEN
2643 OOC_STATE_NODE(STEP_OOC(J)) = NOT_IN_MEM
2646.LT.
ELSE IF(TMP0)THEN
2647.GT.
IF(TMP-(N_OOC+1)*NB_Z)THEN
2648 SAVE_PTR=PTRFAC(STEP_OOC(J))
2649 PTRFAC(STEP_OOC(J)) = abs(SAVE_PTR)
2650 CALL CMUMPS_SOLVE_FIND_ZONE(J,
2651 & ZONE,PTRFAC,NSTEPS)
2652 PTRFAC(STEP_OOC(J)) = SAVE_PTR
2653.EQ.
IF(ZONENB_Z)THEN
2654.NE.
IF(JSPECIAL_ROOT_NODE)THEN
2655 WRITE(*,*)MYID_OOC,': internal error 6
',
2658 & emmergency buffer
'
2662.NE..OR..NE.
IF (KEEP_OOC(237)0 KEEP_OOC(235)0)
2664.EQ.
IF (OOC_STATE_NODE(STEP_OOC(J))NOT_IN_MEM) THEN
2665 OOC_STATE_NODE(STEP_OOC(J)) = USED
2666.NE..AND..NE.
IF((SOLVE_STEP0)(JSPECIAL_ROOT_NODE)
2667.AND..NE.
& (ZONENB_Z))THEN
2668 CALL CMUMPS_SOLVE_UPD_NODE_INFO(J,PTRFAC,NSTEPS)
2671.EQ.
ELSEIF(OOC_STATE_NODE(STEP_OOC(J))USED)
2673 COMPRESS_TO_BE_DONE = .TRUE.
2675 WRITE(*,*)MYID_OOC,': internal error mila 4
',
2676 & ' wrong node status :
', OOC_STATE_NODE(STEP_OOC(J)),
2681.EQ..AND..EQ.
IF (KEEP_OOC(237)0 KEEP_OOC(235)0) THEN
2682 CALL CMUMPS_SOLVE_UPD_NODE_INFO(J,PTRFAC,NSTEPS)
2687.NE..OR..NE.
IF (KEEP_OOC(237)0 KEEP_OOC(235)0)
2689 IF (COMPRESS_TO_BE_DONE) THEN
2691 CALL CMUMPS_FREE_SPACE_FOR_SOLVE(A,LA,
2692 & DUMMY_SIZE,PTRFAC,
2694.LT.
IF (IERR 0) THEN
2695 WRITE(*,*)MYID_OOC,': internal error mila 5
',
2704 END SUBROUTINE CMUMPS_SOLVE_PREPARE_PREF
2705 SUBROUTINE CMUMPS_SOLVE_INIT_OOC_FWD(PTRFAC,NSTEPS,MTYPE,
2706 & A,LA,DOPREFETCH,IERR)
2708 INTEGER NSTEPS,MTYPE
2709 INTEGER, intent(out)::IERR
2712 INTEGER(8) :: PTRFAC(NSTEPS)
2714 INTEGER MUMPS_OOC_GET_FCT_TYPE
2715 EXTERNAL MUMPS_OOC_GET_FCT_TYPE
2717 OOC_FCT_TYPE=MUMPS_OOC_GET_FCT_TYPE("F",MTYPE,KEEP_OOC(201),
2719 OOC_SOLVE_TYPE_FCT = OOC_FCT_TYPE - 1
2720.NE.
IF (KEEP_OOC(201)1) THEN
2721 OOC_SOLVE_TYPE_FCT = FCT
2726.NE.
IF ( KEEP_OOC(201)1
2727.OR..NE.
& KEEP_OOC(50)0
2729 CALL CMUMPS_SOLVE_PREPARE_PREF(PTRFAC,NSTEPS,A,LA)
2731 CALL CMUMPS_SOLVE_STAT_REINIT_PANEL(KEEP_OOC(28),
2732 & KEEP_OOC(38), KEEP_OOC(20) )
2734 IF (DOPREFETCH) THEN
2735 CALL CMUMPS_INITIATE_READ_OPS(A,LA,PTRFAC,
2736 & KEEP_OOC(28),IERR)
2738 CUR_POS_SEQUENCE = TOTAL_NB_OOC_NODES(OOC_FCT_TYPE)
2741 END SUBROUTINE CMUMPS_SOLVE_INIT_OOC_FWD
2742 SUBROUTINE CMUMPS_SOLVE_INIT_OOC_BWD(PTRFAC,NSTEPS,MTYPE,
2743 & I_WORKED_ON_ROOT,IROOT,A,LA,IERR)
2747 INTEGER(8) :: PTRFAC(NSTEPS)
2750 LOGICAL I_WORKED_ON_ROOT
2751 INTEGER, intent(out):: IERR
2753 INTEGER(8) :: DUMMY_SIZE
2755 INTEGER MUMPS_OOC_GET_FCT_TYPE
2756 EXTERNAL MUMPS_OOC_GET_FCT_TYPE
2758 OOC_FCT_TYPE=MUMPS_OOC_GET_FCT_TYPE("B",MTYPE,KEEP_OOC(201),
2760 OOC_SOLVE_TYPE_FCT = OOC_FCT_TYPE - 1
2761.NE.
IF (KEEP_OOC(201)1) OOC_SOLVE_TYPE_FCT=FCT
2763 CUR_POS_SEQUENCE=TOTAL_NB_OOC_NODES(OOC_FCT_TYPE)
2765.NE.
IF ( KEEP_OOC(201)1
2766.OR..NE.
& KEEP_OOC(50)0
2768 CALL CMUMPS_SOLVE_PREPARE_PREF(PTRFAC,NSTEPS,A,LA)
2769.AND.
IF (I_WORKED_ON_ROOT
2770.GT.
$ ((IROOT0)))THEN
2771.NE.
IF(SIZE_OF_BLOCK(STEP_OOC(IROOT),OOC_FCT_TYPE)0) THEN
2772.NOT..NE..OR..NE.
IF ((KEEP_OOC(237)0 KEEP_OOC(235)0))
2774 CALL CMUMPS_FREE_FACTORS_FOR_SOLVE ( IROOT,
2775 & PTRFAC, KEEP_OOC(28), A, LA,.FALSE.,IERR)
2776.LT.
IF (IERR 0) RETURN
2778 CALL CMUMPS_SOLVE_FIND_ZONE(IROOT,
2779 & ZONE,PTRFAC,NSTEPS)
2780.EQ.
IF(ZONENB_Z)THEN
2782 CALL CMUMPS_FREE_SPACE_FOR_SOLVE(A,LA,
2783 & DUMMY_SIZE,PTRFAC,
2785.LT.
IF (IERR 0) THEN
2786 WRITE(*,*)MYID_OOC,': internal error in
2795 CALL CMUMPS_SUBMIT_READ_FOR_Z(A,LA,PTRFAC,
2796 & KEEP_OOC(28),IERR)
2797.LT.
IF (IERR 0) RETURN
2800 CALL CMUMPS_SOLVE_STAT_REINIT_PANEL(KEEP_OOC(28),
2801 & KEEP_OOC(38), KEEP_OOC(20) )
2802 CALL CMUMPS_INITIATE_READ_OPS(A,LA,PTRFAC,KEEP_OOC(28),IERR)
2803.LT.
IF (IERR 0 ) RETURN
2806 END SUBROUTINE CMUMPS_SOLVE_INIT_OOC_BWD
2807 SUBROUTINE CMUMPS_STRUC_STORE_FILE_NAME(id,IERR)
2808 USE CMUMPS_STRUC_DEF
2810 TYPE(CMUMPS_STRUC), TARGET :: id
2811 INTEGER, intent(out) :: IERR
2812 INTEGER I,DIM,J,TMP,SIZE,K,I1
2813 CHARACTER(len=1):: TMP_NAME(350)
2814 EXTERNAL MUMPS_OOC_GET_NB_FILES_C, MUMPS_OOC_GET_FILE_NAME_C
2817 DO J=1,OOC_NB_FILE_TYPE
2819 CALL MUMPS_OOC_GET_NB_FILES_C(TMP,I)
2820 id%OOC_NB_FILES(J)=I
2823 IF(associated(id%OOC_FILE_NAMES))THEN
2824 DEALLOCATE(id%OOC_FILE_NAMES)
2825 NULLIFY(id%OOC_FILE_NAMES)
2827 ALLOCATE(id%OOC_FILE_NAMES(SIZE,350),stat=IERR)
2828.GT.
IF (IERR 0) THEN
2829.GT.
IF (ICNTL10) THEN
2830 WRITE(ICNTL1,*) 'pb allocation in
',
2834.GE.
IF(id%INFO(1)0)THEN
2836 id%INFO(2) = SIZE*350
2840 IF(associated(id%OOC_FILE_NAME_LENGTH))THEN
2841 DEALLOCATE(id%OOC_FILE_NAME_LENGTH)
2842 NULLIFY(id%OOC_FILE_NAME_LENGTH)
2844 ALLOCATE(id%OOC_FILE_NAME_LENGTH(SIZE),stat=IERR)
2845.GT.
IF (IERR 0) THEN
2847.GE.
IF(id%INFO(1)0) THEN
2848.GT.
IF (ICNTL10) THEN
2858 DO I1=1,OOC_NB_FILE_TYPE
2860 DO I=1,id%OOC_NB_FILES(I1)
2861 CALL MUMPS_OOC_GET_FILE_NAME_C(TMP,I,DIM,TMP_NAME(1))
2863 id%OOC_FILE_NAMES(K,J)=TMP_NAME(J)
2865 id%OOC_FILE_NAME_LENGTH(K)=DIM+1
2869 END SUBROUTINE CMUMPS_STRUC_STORE_FILE_NAME
2870 SUBROUTINE CMUMPS_OOC_OPEN_FILES_FOR_SOLVE(id)
2871 USE CMUMPS_STRUC_DEF
2873 TYPE(CMUMPS_STRUC), TARGET :: id
2874 CHARACTER(len=1):: TMP_NAME(350)
2875 INTEGER I,I1,TMP,J,K,L,DIM,IERR
2876 INTEGER, DIMENSION(:),ALLOCATABLE :: NB_FILES
2878 ALLOCATE(NB_FILES(OOC_NB_FILE_TYPE),stat=IERR)
2879.GT.
IF (IERR 0) THEN
2881.GE.
IF(id%INFO(1)0)THEN
2882.GT.
IF (ICNTL10) THEN
2887 id%INFO(2) = OOC_NB_FILE_TYPE
2892 NB_FILES=id%OOC_NB_FILES
2895 L=mod(id%KEEP(204),3)
2897 CALL MUMPS_OOC_ALLOC_POINTERS_C(OOC_NB_FILE_TYPE,NB_FILES,IERR)
2900 & WRITE(ICNTL1,*)MYID_OOC,':
',ERR_STR_OOC(1:DIM_ERR_STR_OOC)
2904 CALL MUMPS_OOC_INIT_VARS_C(I,K,L,K211,IERR)
2907 & WRITE(ICNTL1,*)MYID_OOC,':
',ERR_STR_OOC(1:DIM_ERR_STR_OOC)
2912 DO I1=1,OOC_NB_FILE_TYPE
2914 DIM=id%OOC_FILE_NAME_LENGTH(K)
2916 TMP_NAME(J)=id%OOC_FILE_NAMES(K,J)
2919 CALL MUMPS_OOC_SET_FILE_NAME_C(TMP,I,DIM,IERR,TMP_NAME(1))
2922 & WRITE(ICNTL1,*)MYID_OOC,':
',
2923 & ERR_STR_OOC(1:DIM_ERR_STR_OOC)
2930 CALL MUMPS_OOC_START_LOW_LEVEL(IERR)
2937 DEALLOCATE(nb_files)
2943 CHARACTER(LEN=NB):: SRC
2944 CHARACTER(len=1):: DEST(NB)
2953 INTEGER,
intent(out) :: IERR
2967 INTEGER,
intent(out) :: IERR
2975 IF (ierr < 0)
RETURN
2984 INTEGER(8) :: TMP_SIZE8
2985 INTEGER KEEP38, KEEP20
3027 & ( strat, typefile,
3028 & afac, lafac, monbloc,
3029 & lnextpiv2bewritten, unextpiv2bewritten,
3031 & myid, filesize, ierr , last_call)
3033 TYPE(
io_block),
INTENT(INOUT):: monbloc
3035 INTEGER,
INTENT(IN) :: strat, liwfac,
3037 INTEGER,
INTENT(INOUT) :: iw(0:liwfac-1)
3038 COMPLEX,
INTENT(IN) :: afac(lafac)
3039 INTEGER,
INTENT(INOUT) :: lnextpiv2bewritten,
3040 & unextpiv2bewritten
3041 INTEGER(8),
INTENT(INOUT) :: filesize
3042 INTEGER,
INTENT(OUT) :: ierr
3043 LOGICAL,
INTENT(IN) :: last_call
3044 INTEGER(8) :: tmpsize_of_block
3045 INTEGER :: tempftype
3046 LOGICAL write_l, write_u
3048 include
'mumps_headers.h'
3060 CALL omp_set_lock(lock_for_l0omp)
3064 ELSE IF ( .NOT. omp_test_lock(lock_for_l0omp ))
THEN
3070 do_u_first = .false.
3072 IF ( lnextpiv2bewritten .GT. unextpiv2bewritten )
THEN
3076 IF (do_u_first)
GOTO 200
3077 100
IF (write_l .AND.
typef_l > 0 )
THEN
3079 IF ((monbloc%Typenode.EQ.2).AND.(.NOT.monbloc%MASTER))
3083 IF (tmpsize_of_block .LT. 0_8)
THEN
3084 tmpsize_of_block = -tmpsize_of_block - 1_8
3086 lnextpiv2bewritten =
3089 & / int(monbloc%NROW,8)
3094 & tempftype, afac, lafac, monbloc,
3096 & lnextpiv2bewritten,
3099 & filesize, last_call )
3100 IF (ierr .LT. 0)
RETURN
3101 IF (do_u_first)
GOTO 300
3103 200
IF (write_u)
THEN
3106 & tempftype, afac, lafac, monbloc,
3108 & unextpiv2bewritten,
3111 & filesize, last_call)
3112 IF (ierr .LT. 0)
RETURN
3113 IF (do_u_first)
GOTO 100
3118 CALL omp_unset_lock(lock_for_l0omp)
3124 & AFAC, LAFAC, MonBloc,
3126 & LorU_NextPiv2beWritten,
3127 & LorU_AddVirtNodeI8, LorUSIZE_OF_BLOCK,
3128 & FILESIZE, LAST_CALL
3132 INTEGER,
INTENT(IN) :: strat
3133 INTEGER,
INTENT(IN) :: typef
3134 INTEGER(8),
INTENT(INOUT) :: filesize
3135 INTEGER(8),
INTENT(IN) ::
3136 COMPLEX,
INTENT(IN) :: (lafac)
3137 INTEGER,
INTENT(INOUT) :: loru_nextpiv2bewritten
3138 INTEGER(8),
INTENT(INOUT) :: loru_addvirtnodei8
3139 INTEGER(8),
INTENT(INOUT) :: lorusize_of_block
3140 TYPE(
io_block),
INTENT(INOUT) :: monbloc
3141 INTEGER,
INTENT(OUT) :: ierr
3142 LOGICAL,
INTENT(IN) :: last_call
3144 INTEGER(8) :: totsize, effsize
3145 INTEGER(8) :: tailleecrite
3147 INTEGER(8) :: addvirtcour
3148 LOGICAL virt_add_reserved_bef_call
3149 LOGICAL virtual_address_just_reserved
3152 INTEGER icur, inode_cur, ilast
3153 INTEGER(8) :: addr_last
3156 nnmax = monbloc%NROW
3158 nnmax = monbloc%NCOL
3161 IF ( (.NOT.monbloc%Last) .AND.
3162 & (monbloc%LastPiv-loru_nextpiv2bewritten+1.LT.size_panel))
3168 & (monbloc%NFS, nnmax, size_panel, monbloc, tmp_estim)
3169 IF (monbloc%Last)
THEN
3172 & (monbloc%LastPiv, nnmax, size_panel, monbloc, tmp_estim)
3174 effsize = -1034039740327_8
3176 IF (monbloc%Typenode.EQ.3.AND. monbloc%NFS.NE.monbloc%NCOL)
THEN
3177 WRITE(*,*)
'Internal error in CMUMPS_OOC_STORE_LorU for type3',
3178 & monbloc%NFS,monbloc%NCOL
3181 IF (monbloc%Typenode.EQ.3.AND. typef.NE.
typef_l)
THEN
3182 WRITE(*,*)
'Internal error in CMUMPS_OOC_STORE_LorU,TYPEF=',
3183 & typef,
'for typenode=3'
3186 IF (monbloc%Typenode.EQ.2.AND.
3188 & .NOT. monbloc%MASTER )
THEN
3189 WRITE(*,*)
'Internal error in CMUMPS_OOC_STORE_LorU',
3190 & monbloc%MASTER,monbloc%Typenode, typef
3193 hole_processed_before_call = (lorusize_of_block .LT. 0_8)
3194 IF (hole_processed_before_call.AND.(.NOT.monbloc%Last))
THEN
3195 WRITE(6,*)
' Internal error in CMUMPS_OOC_STORE_LorU ',
3196 &
' last is false after earlier calls with last=true'
3199 IF (hole_processed_before_call)
THEN
3200 lorusize_of_block = - lorusize_of_block - 1_8
3201 totsize = -99999999_8
3203 virtual_address_just_reserved = .false.
3204 virt_add_reserved_bef_call =
3205 & ( lorusize_of_block .NE. 0_8 .OR.
3206 & hole_processed_before_call )
3207 IF (monbloc%Last .AND. .NOT. hole_processed_before_call)
THEN
3209 & (monbloc%LastPiv+size_panel-1) / size_panel)
3210 IF (virt_add_reserved_bef_call)
THEN
3212 & (loru_addvirtnodei8+totsize) )
THEN
3216 virtual_address_just_reserved = .true.
3217 IF (effsize .EQ. 0_8)
THEN
3218 loru_addvirtnodei8 = -9999_8
3225 IF (.NOT. virt_add_reserved_bef_call
3231 addvirtcour = loru_addvirtnodei8 + lorusize_of_block
3235 & loru_nextpiv2bewritten, addvirtcour,
3238 IF ( ierr .LT. 0 )
RETURN
3239 lorusize_of_block = lorusize_of_block + tailleecrite
3240 IF (lorusize_of_block.EQ.0_8 )
THEN
3241 IF ( .NOT. virt_add_reserved_bef_call
3242 & .AND. .NOT. virtual_address_just_reserved )
3245 loru_addvirtnodei8 = 0_8
3247 ELSE IF (.NOT. virt_add_reserved_bef_call )
THEN
3248 virtual_address_just_reserved = .true.
3250 IF ( virtual_address_just_reserved)
THEN
3252 & typef) = monbloc%INODE
3254 IF (monbloc%Last)
THEN
3269 IF (monbloc%Last)
THEN
3270 lorusize_of_block = - lorusize_of_block - 1_8
3273 IF (.NOT.monbloc%Last)
THEN
3274 WRITE(6,*)
' Internal error in CMUMPS_OOC_STORE_LorU ',
3275 &
' LAST and LAST_CALL are incompatible '
3278 lorusize_of_block = - lorusize_of_block - 1_8
3282 IF ( inode_cur .NE. monbloc%INODE .AND.
3291 IF (inode_cur .EQ. monbloc%INODE)
THEN
3295 IF (icur .LE. 1)
THEN
3296 WRITE(*,*)
"Internal error in CMUMPS_OOC_STORE_LorU"
3297 WRITE(*,*)
"Did not find current node in sequence"
3303 filesize = filesize + lorusize_of_block
3308 & STRAT, TYPEF, MonBloc,
3311 & NextPiv2beWritten, AddVirtCour,
3312 & TailleEcrite, IERR )
3315 INTEGER,
INTENT(IN) :: strat, typef,
3317 INTEGER(8),
INTENT(IN) :: addvirtcour
3318 COMPLEX,
INTENT(IN) :: afac(lafac)
3319 INTEGER,
INTENT(INOUT) :: nextpiv2bewritten
3320 TYPE(
io_block),
INTENT(INOUT) :: monbloc
3321 INTEGER(8),
INTENT(OUT) :: tailleecrite
3322 INTEGER,
INTENT(OUT) :: ierr
3323 INTEGER :: i, nbeff, lpaneleff, iend
3324 INTEGER(8) :: addvirtdeb
3327 addvirtdeb = addvirtcour
3328 i = nextpiv2bewritten
3329 IF ( nextpiv2bewritten .GT. monbloc%LastPiv )
THEN
3333 nbeff =
min(size_panel,monbloc%LastPiv-i+1 )
3334 IF ((nbeff.NE.size_panel) .AND. (.NOT.monbloc%Last))
THEN
3337 IF (typef.EQ.
typef_l.AND.monbloc%MASTER.AND.
3338 &
keep_ooc(50).EQ.2 .AND. monbloc%Typenode.NE.3)
THEN
3339 IF (monbloc%INDICES(nbeff+i-1) < 0)
3347 & addvirtdeb, i, iend, lpaneleff,
3349 IF ( ierr .LT. 0 )
THEN
3352 IF ( ierr .EQ. 1 )
THEN
3357 monbloc%LastPanelWritten_L = monbloc%LastPanelWritten_L+1
3359 monbloc%LastPanelWritten_U = monbloc%LastPanelWritten_U+1
3361 addvirtdeb = addvirtdeb + int(lpaneleff,8)
3362 tailleecrite = tailleecrite + int(lpaneleff,8)
3364 IF ( i .LE. monbloc%LastPiv )
GOTO 10
3366 nextpiv2bewritten = i
3370 & (nfsornpiv, nnmax, size_panel, monbloc, estim)
3372 TYPE(
io_block),
INTENT(IN):: monbloc
3373 INTEGER,
INTENT(IN) :: nfsornpiv, nnmax, size_panel
3374 LOGICAL,
INTENT(IN) :: estim
3376 INTEGER(8) :: totsize
3378 IF (nfsornpiv.EQ.0)
GOTO 100
3379 IF (.NOT. monbloc%MASTER .OR. monbloc%Typenode.EQ.3)
THEN
3380 totsize = int(nfsornpiv,8) * int(nnmax,8)
3389 IF (monbloc%INDICES(i+nbeff-1) < 0)
THEN
3395 & int(nnmax-i+1,8) * int(nbeff,8)
3397 IF ( i .LE. nfsornpiv )
GOTO 10
3405 INTEGER,
INTENT(IN) :: nnmax
3434 DO WHILE ((i.GE.1).AND.
3450 & Pruned_List,nb_prun_nodes,STEP)
3452 INTEGER,
INTENT(IN) :: N, KEEP201, nb_prun_nodes
3453 INTEGER,
INTENT(IN) :: STEP(N),
3454 & pruned_list(nb_prun_nodes)
3456 IF (keep201 .GT. 0)
THEN
3458 DO i = 1, nb_prun_nodes
3459 istep = step(pruned_list(i))
integer function cmumps_ooc_get_panel_size(hbuf_size, nnmax, k227, k50)
if(complex_arithmetic) id
end diagonal values have been computed in the(sparse) matrix id.SOL
for(i8=*sizetab-1;i8 >=0;i8--)
subroutine mumps_ooc_convert_bigintto2int(int1, int2, bigint)
subroutine cmumps_ooc_buf_clean_pending(ierr)
subroutine cmumps_ooc_next_hbuf(typef_arg)
integer, dimension(:), allocatable i_cur_hbuf_nextpos
subroutine cmumps_end_ooc_buf()
subroutine cmumps_copy_lu_to_buffer(strat, typef, monbloc, afac, lafac, addvirtcour, ipivbeg, ipivend, lpaneleff, ierr)
subroutine cmumps_ooc_do_io_and_chbuf(typef_arg, ierr)
integer(8), dimension(:), allocatable size_of_read
logical function, public cmumps_is_there_free_space(inode, zone)
subroutine, public cmumps_ooc_io_lu_panel(strat, typefile, afac, lafac, monbloc, lnextpiv2bewritten, unextpiv2bewritten, iw, liwfac, myid, filesize, ierr, last_call)
integer(8), save fact_area_size
integer(8), save ooc_vaddr_ptr
subroutine cmumps_ooc_end_facto(id, ierr)
integer function cmumps_solve_is_inode_in_mem(inode, ptrfac, nsteps, a, la, ierr)
integer(8), dimension(:), allocatable read_dest
subroutine, public cmumps_ooc_init_solve(id)
integer, save nb_zone_req
subroutine, public cmumps_solve_init_ooc_bwd(ptrfac, nsteps, mtype, i_worked_on_root, iroot, a, la, ierr)
integer used_not_permuted
integer, dimension(:), pointer total_nb_ooc_nodes
subroutine, public cmumps_solve_alloc_factor_space(inode, ptrfac, keep, keep8, a, ierr)
integer, dimension(:), allocatable ooc_state_node
subroutine, public cmumps_read_ooc(dest, inode, ierr)
integer, dimension(:), allocatable inode_to_pos
subroutine cmumps_submit_read_for_z(a, la, ptrfac, nsteps, ierr)
integer, dimension(:), allocatable read_mng
integer ooc_node_not_in_mem
subroutine, public cmumps_initiate_read_ops(a, la, ptrfac, nsteps, ierr)
subroutine cmumps_get_bottom_area_space(a, la, requested_size, ptrfac, nsteps, zone, flag, ierr)
integer, dimension(:), allocatable req_to_zone
subroutine, public cmumps_ooc_end_solve(ierr)
subroutine cmumps_solve_stat_reinit_panel(nsteps, keep38, keep20)
subroutine, private cmumps_ooc_store_loru(strat, typef, afac, lafac, monbloc, ierr, loru_nextpiv2bewritten, loru_addvirtnodei8, lorusize_of_block, filesize, last_call)
integer function, public cmumps_ooc_panel_size(nnmax)
integer, dimension(:), allocatable first_pos_in_read
integer, dimension(:), allocatable req_id
subroutine, public cmumps_ooc_init_facto(id, maxs)
subroutine cmumps_update_read_req_node(inode, size, dest, zone, request, pos_seq, nb_nodes, flag, ptrfac, nsteps, ierr)
integer, parameter, public typef_both_lu
subroutine cmumps_free_factors_for_solve(inode, ptrfac, nsteps, a, la, flag, ierr)
subroutine, private cmumps_ooc_wrt_in_panels_loru(strat, typef, monbloc, size_panel, afac, lafac, nextpiv2bewritten, addvirtcour, tailleecrite, ierr)
integer ooc_node_not_permuted
integer, dimension(:), allocatable current_pos_b
integer special_root_node
integer, dimension(:), allocatable pos_hole_b
integer, save max_nb_nodes_for_zone
subroutine cmumps_convert_str_to_chr_array(dest, src, nb, nb_eff)
integer(8), dimension(:), allocatable lrlus_solve
integer, dimension(:), allocatable pos_hole_t
integer, save cur_pos_sequence
integer(8), save size_solve_emm
integer, dimension(:), allocatable pdeb_solve_z
subroutine cmumps_solve_compute_read_size(zone, size, dest, pos_seq, nb_nodes, flag, ptrfac, nsteps)
double precision, save max_ooc_file_size
integer cmumps_elementary_data_size
integer, save current_solve_read_zone
subroutine cmumps_get_top_area_space(a, la, requested_size, ptrfac, nsteps, zone, flag, ierr)
subroutine cmumps_ooc_clean_pending(ierr)
integer, dimension(:), allocatable io_req
subroutine cmumps_solve_try_zone_for_read(zone)
subroutine cmumps_set_strat_io_flags(strat_io_arg, strat_io_async_arg, with_buf_arg, low_level_strat_io_arg)
integer(8), save tmp_size_fact
subroutine cmumps_free_space_for_solve(a, la, requested_size, ptrfac, nsteps, zone, ierr)
subroutine, public cmumps_new_factor(inode, ptrfac, keep, keep8, a, la, size, ierr)
subroutine cmumps_struc_store_file_name(id, ierr)
subroutine cmumps_init_fact_area_size_s(la)
integer(8), dimension(:), allocatable ideb_solve_z
integer, dimension(:), allocatable current_pos_t
integer, dimension(:), allocatable pos_in_mem
subroutine cmumps_force_write_buf(ierr)
integer(8), dimension(:), allocatable lrlu_solve_t
subroutine cmumps_solve_alloc_ptr_upd_b(inode, ptrfac, keep, keep8, a, zone)
integer ooc_node_permuted
integer(8), save max_size_factor_ooc
subroutine cmumps_ooc_update_solve_stat(inode, ptrfac, nsteps, flag)
integer, save tmp_nb_nodes
logical function cmumps_solve_is_end_reached()
integer(8), save min_size_read
integer(8), dimension(:), allocatable lrlu_solve_b
subroutine cmumps_solve_select_zone(zone)
subroutine cmumps_ooc_set_states_es(n, keep201, pruned_list, nb_prun_nodes, step)
subroutine cmumps_ooc_open_files_for_solve(id)
subroutine cmumps_ooc_skip_null_size_node()
integer(8), dimension(:), allocatable size_solve_z
integer(8), dimension(:,:), pointer size_of_block
integer(8) function cmumps_ooc_nbentries_panel_123(nfsornpiv, nnmax, size_panel, monbloc, estim)
subroutine cmumps_ooc_force_wrt_buf_panel(ierr)
integer(8), save size_zone_solve
integer(8), dimension(:), allocatable posfac_solve
integer ooc_solve_type_fct
subroutine, public cmumps_solve_init_ooc_fwd(ptrfac, nsteps, mtype, a, la, doprefetch, ierr)
integer(8), save size_zone_req
integer(8), dimension(:,:), pointer ooc_vaddr
character(len=1), dimension(err_str_ooc_max_len) err_str_ooc
logical, save strat_io_async
integer, dimension(:), pointer step_ooc
integer, public strat_write_max
integer(8), dimension(:), allocatable addvirtlibre
integer, dimension(:,:), pointer ooc_inode_sequence
integer, dimension(:), pointer procnode_ooc
integer, dimension(:), pointer keep_ooc