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.
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=63)
119 INTEGER(8),
intent(in) :: maxs
120 TYPE(smumps_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 :: file_flag_tab
136 IF (
id%KEEP(400).GT.0)
THEN
176 IF (
id%KEEP(201).EQ.2)
THEN
186 IF(
id%KEEP(107).GT.0)
THEN
190 & int((dble(maxs)*0.9d0-
204 IF (allocok .GT. 0)
THEN
206 WRITE(
icntl1,*)
'PB allocation in SMUMPS_INIT_OOC'
222 IF (allocok .GT. 0)
THEN
224 WRITE(
icntl1,*)
'PB allocation in SMUMPS_INIT_OOC'
242 dim_dir=len(trim(
id%OOC_TMPDIR
243 dim_prefix=len(trim(
id%OOC_PREFIX))
245 &
id%OOC_TMPDIR, tmpdir_max_length, dim_dir )
247 &
id%OOC_PREFIX, prefix_max_length, dim_prefix)
248 CALL mumps_low_level_init_prefix(dim_prefix
249 CALL mumps_low_level_init_tmpdir(dim_dir, tmp_dir)
252 IF (allocok .GT. 0)
THEN
254 WRITE(
icntl1,*)
'PB allocation in SMUMPS_INIT_OOC'
262 tmp=int(
id%KEEP8(11)/1000000_8)+1
263 IF((
id%KEEP(201).EQ.1).AND.(
id%KEEP(50).EQ.0)
267 CALL mumps_low_level_init_ooc_c(
myid_ooc,tmp,
269 & file_flag_tab,ierr)
280 DEALLOCATE(file_flag_tab)
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
322 & a(ptrfac(
step_ooc(inode))),size_int1,size_int2,
323 & inode,request,
TYPE,addr_int1,addr_int2,ierr)
330 WRITE(*,*)
myid_ooc,
': Internal error (37) in OOC '
340 & (a(ptrfac(
step_ooc(inode))),
SIZE,ierr)
361 & a(ptrfac(
step_ooc(inode))),size_int1,size_int2,
362 & inode,request,
TYPE,addr_int1,addr_int2,ierr)
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(smumps_struc),
TARGET :: id
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)
525 EXTERNAL mumps_ooc_remove_file_c
526 TYPE(smumps_struc),
TARGET :: id
529 CHARACTER(len=1):: TMP_NAME(350)
532 IF(.NOT. id%ASSOCIATED_OOC_FILES)
THEN
533 IF(
associated(id%OOC_FILE_NAMES).AND.
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))
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)
570 TYPE(smumps_struc),
TARGET :: id
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)
596 TYPE(smumps_struc),
TARGET ::
id
694 IF(
id%INFO(1).LT.0)
THEN
707 IF (allocok .GT. 0)
THEN
709 WRITE(
icntl1,*)
'PB allocation in SMUMPS_OOC_INIT_SOLVE'
712 id%INFO(2) =
id%KEEP(28)
720 IF(
id%KEEP(107).GT.0)
THEN
740 & solution step in SMUMPS_OOC_INIT_SOLVE'
746 & mpi_integer,mpi_max,
id%COMM_NODES, ierr)
751 IF (allocok .GT. 0)
THEN
753 WRITE(
icntl1,*)
'PB allocation in SMUMPS_OOC_INIT_SOLVE'
760 IF (allocok .GT. 0)
THEN
762 WRITE(
icntl1,*)
'PB allocation in SMUMPS_OOC_INIT_SOLVE'
765 id%INFO(2) =
id%KEEP(28)
777 IF (allocok .GT. 0)
THEN
779 WRITE(
icntl1,*)
'PB allocation in SMUMPS_OOC_INIT_SOLVE'
796 IF (allocok .GT. 0)
THEN
798 WRITE(
icntl1,*)
'PB allocation in SMUMPS_OOC_INIT_SOLVE'
876 INTEGER(8) :: ptrfac(nsteps)
901 INTEGER(8) :: PTRFAC(NSTEPS)
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
918 INTEGER SIZE_INT1,SIZE_INT2
927 & dest,size_int1,size_int2,
928 & inode,request,
TYPE,addr_int1,addr_int2,ierr)
936 & request,pos_seq,nb_nodes,flag,ptrfac,nsteps,ierr)
942 & request,pos_seq,nb_nodes,flag,ptrfac,nsteps,ierr)
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
962 INTEGER MUMPS_TYPENODE,MUMPS_PROCNODE
985 &
keep_ooc(199)).EQ.2).AND.(mumps_procnode(
992 &
keep_ooc(199)).EQ.2).AND.(mumps_procnode(
997 ptrfac(
step_ooc(tmp_node))=-pos_in_s
1001 IF(abs(ptrfac(
step_ooc(tmp_node))).LT.
1003 WRITE(*,*)
myid_ooc,
': Inernal error (42) in OOC ',
1007 IF(abs(ptrfac(
step_ooc(tmp_node))).GT.
1009 WRITE(*,*)
myid_ooc,
': Inernal error (43) in OOC '
1029 pos_in_s=pos_in_s+last
1030 pos_in_manage=pos_in_manage+1
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) ::
1060 IF(
req_id(pos_req).NE.-9999)
THEN
1061 CALL mumps_wait_request(
req_id(pos_req),ierr)
1075 ELSEIF(flag.EQ.1)
THEN
1097 ELSEIF(flag.EQ.0)
THEN
1116 ptrfac(
step_ooc(tmp_node))=-local_dest
1119 ELSEIF(flag.EQ.0)
THEN
1129 ptrfac(
step_ooc(tmp_node))=-local_dest
1133 WRITE(*,*)
myid_ooc,
': Internal error (39) in OOC ',
1134 &
' Invalid Flag Value in ',
1135 &
' SMUMPS_UPDATE_READ_REQ_NODE',flag
1143 WRITE(*,*)
myid_ooc,
': Internal error (40) in OOC ',
1154 WRITE(*,*)
myid_ooc,
': Internal error (41) in OOC ',
1155 &
' LRLUS_SOLVE must be (1) > 0',
1164 WRITE(*,*)
myid_ooc,
': Internal error (1) in OOC '
1168 ELSEIF(flag.EQ.0)
THEN
1170 WRITE(*,*)
myid_ooc,
': Internal error (2) in OOC ',
1181 WRITE(*,*)
myid_ooc,
': Internal error (3) in OOC ',
1182 &
' Invalid Flag Value in ',
1183 &
' SMUMPS_UPDATE_READ_REQ_NODE',flag
1191 IF(nb.NE.nb_nodes)
THEN
1192 WRITE(*,*)
myid_ooc,
': Internal error (4) in OOC ',
1193 &
' SMUMPS_UPDATE_READ_REQ_NODE ',nb,nb_nodes
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
1219 WRITE(*,*)
myid_ooc,
': Internal error (5) in OOC ',
1220 &
' Problem in SMUMPS_FREE_FACTORS_FOR_SOLVE',
1236 WRITE(*,*)
myid_ooc,
': INTERNAL ERROR (53) in OOC',inode,
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)
1391 & .AND. (
keep_ooc(235).EQ.0) )
THEN
1393 WRITE(*,*)
myid_ooc,
': INTERNAL ERROR (51) in OOC',inode,
1402 INTEGER INODE,NSTEPS
1403 INTEGER (8) :: PTRFAC(NSTEPS)
1414 WRITE(*,*)
myid_ooc,
': Internal error (52) in OOC',inode,
1443 INTEGER INODE,ZONE,NSTEPS
1444 INTEGER (8) :: PTRFAC(NSTEPS)
1446 DO WHILE (zone.LE.
nb_z)
1453 IF(zone.EQ.
nb_z+1)
THEN
1477 INTEGER,
intent(out)::ierr
1479INTEGER(8) :: ptrfac(keep(28))
1481 INTEGER(8) :: requested_size
1497 & requested_size,ptrfac,keep(28),zone,ierr)
1507 & keep,keep8,a,zone)
1512 & keep,keep8,a,zone)
1517 & requested_size,ptrfac,
1518 & keep(28),zone,iflag,ierr)
1524 & keep,keep8,a,zone)
1525 ELSEIF(iflag.EQ.0)
THEN
1527 & requested_size,ptrfac,
1528 & keep(28),zone,iflag,ierr)
1534 & keep,keep8,a,zone)
1539 & requested_size,ptrfac,
1540 & keep(28),zone,iflag,ierr)
1546 & keep,keep8,a,zone)
1547 ELSEIF(iflag.EQ.0)
THEN
1549 & requested_size,ptrfac,
1550 & keep(28),zone,iflag,ierr)
1556 & keep,keep8,a,zone)
1562 & requested_size,ptrfac,keep(28),zone,ierr)
1567 & keep,keep8,a,zone)
1570 WRITE(*,*)
myid_ooc,
': Internal error (8) in OOC ',
1571 &
' Not enough space for Solve',inode,
1578 WRITE(*,*)
myid_ooc,
': Internal error (9) in OOC ',
1579 &
' LRLUS_SOLVE must be (3) > 0'
1585 & NSTEPS,ZONE,FLAG,IERR)
1587 INTEGER NSTEPS,ZONE,FLAG
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
1628 IF(free_hole_flag.EQ.1)
THEN
1629 free_hole=free_hole_pos-
1630 & (abs(ptrfac(
step_ooc(tmp_node)))+
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
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 SMUMPS_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 SMUMPS_GET_TOP_AREA_SPACE
1717 SUBROUTINE SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_GET_BOTTOM_AREA_SPACE
1882 SUBROUTINE SMUMPS_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 REAL 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 SMUMPS_SOLVE_ALLOC_PTR_UPD_T
1922 SUBROUTINE SMUMPS_SOLVE_ALLOC_PTR_UPD_B(INODE,PTRFAC,
1926 INTEGER INODE,KEEP(500)
1927 INTEGER(8) KEEP8(150)
1928 INTEGER(8) :: PTRFAC(KEEP(28))
1929 REAL 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 ooc
'
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 SMUMPS_SOLVE_ALLOC_PTR_UPD_B
1957 SUBROUTINE SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_FREE_SPACE_FOR_SOLVE
2172 SUBROUTINE SMUMPS_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 SMUMPS_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 SMUMPS_OOC_UPDATE_SOLVE_STAT
2201 SUBROUTINE SMUMPS_SEARCH_SOLVE(ADDR,ZONE)
2207.LE.
DO WHILE (INB_Z)
2208.LT.
IF(ADDRIDEB_SOLVE_Z(I))THEN
2214 END SUBROUTINE SMUMPS_SEARCH_SOLVE
2215 FUNCTION SMUMPS_SOLVE_IS_END_REACHED()
2217 LOGICAL SMUMPS_SOLVE_IS_END_REACHED
2218 SMUMPS_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 SMUMPS_SOLVE_IS_END_REACHED=.TRUE.
2223.EQ.
ELSEIF(SOLVE_STEP1)THEN
2224.LT.
IF(CUR_POS_SEQUENCE1)THEN
2225 SMUMPS_SOLVE_IS_END_REACHED=.TRUE.
2229 END FUNCTION SMUMPS_SOLVE_IS_END_REACHED
2230 SUBROUTINE SMUMPS_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(SMUMPS_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(SMUMPS_SOLVE_IS_END_REACHED())THEN
2257 TMP_NODE=OOC_INODE_SEQUENCE(CUR_POS_SEQUENCE,
2260 CALL SMUMPS_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(SMUMPS_SOLVE_IS_END_REACHED())THEN
2276 TMP_NODE=OOC_INODE_SEQUENCE(CUR_POS_SEQUENCE,
2279 CALL SMUMPS_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 SMUMPS_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 SMUMPS_GET_BOTTOM_AREA_SPACE(A,FACT_AREA_SIZE,
2308 & NEEDED_SIZE,PTRFAC,NSTEPS,ZONE,TMP_FLAG,IERR)
2315 CALL SMUMPS_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 SMUMPS_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 SMUMPS_FREE_SPACE_FOR_SOLVE(A,FACT_AREA_SIZE,
2332 & NEEDED_SIZE,PTRFAC,NSTEPS,ZONE,IERR)
2339 CALL SMUMPS_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 SMUMPS_READ_SOLVE_BLOCK(A(DEST),DEST,SIZE,ZONE,PTRFAC,NSTEPS,
2348 & POS_SEQ,NB_NODES,FLAG,IERR)
2352 END SUBROUTINE SMUMPS_SOLVE_ZONE_READ
2353 SUBROUTINE SMUMPS_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(SMUMPS_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 SMUMPS_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 SMUMPS_SOLVE_COMPUTE_READ_SIZE
2533 SUBROUTINE SMUMPS_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 SMUMPS_OOC_END_SOLVE
2609 SUBROUTINE SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_SOLVE_PREPARE_PREF
2705 SUBROUTINE SMUMPS_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 SMUMPS_SOLVE_PREPARE_PREF(PTRFAC,NSTEPS,A,LA)
2731 CALL SMUMPS_SOLVE_STAT_REINIT_PANEL(KEEP_OOC(28),
2732 & KEEP_OOC(38), KEEP_OOC(20) )
2734 IF (DOPREFETCH) THEN
2735 CALL SMUMPS_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 SMUMPS_SOLVE_INIT_OOC_FWD
2742 SUBROUTINE SMUMPS_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 SMUMPS_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 SMUMPS_FREE_FACTORS_FOR_SOLVE ( IROOT,
2775 & PTRFAC, KEEP_OOC(28), A, LA,.FALSE.,IERR)
2776.LT.
IF (IERR 0) RETURN
2778 CALL SMUMPS_SOLVE_FIND_ZONE(IROOT,
2779 & ZONE,PTRFAC,NSTEPS)
2780.EQ.
IF(ZONENB_Z)THEN
2782 CALL SMUMPS_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 SMUMPS_SUBMIT_READ_FOR_Z(A,LA,PTRFAC,
2796 & KEEP_OOC(28),IERR)
2797.LT.
IF (IERR 0) RETURN
2800 CALL SMUMPS_SOLVE_STAT_REINIT_PANEL(KEEP_OOC(28),
2801 & KEEP_OOC(38), KEEP_OOC(20) )
2802 CALL SMUMPS_INITIATE_READ_OPS(A,LA,PTRFAC,KEEP_OOC(28),IERR)
2803.LT.
IF (IERR 0 ) RETURN
2806 END SUBROUTINE SMUMPS_SOLVE_INIT_OOC_BWD
2807 SUBROUTINE SMUMPS_STRUC_STORE_FILE_NAME(id,IERR)
2808 USE SMUMPS_STRUC_DEF
2810 TYPE(SMUMPS_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 SMUMPS_STRUC_STORE_FILE_NAME
2870 SUBROUTINE SMUMPS_OOC_OPEN_FILES_FOR_SOLVE(id)
2871 USE SMUMPS_STRUC_DEF
2873 TYPE(SMUMPS_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)
2933 & WRITE(ICNTL1,*)MYID_OOC,':
',ERR_STR_OOC(1:DIM_ERR_STR_OOC)
2937 DEALLOCATE(NB_FILES)
2939 END SUBROUTINE SMUMPS_OOC_OPEN_FILES_FOR_SOLVE
2940 SUBROUTINE SMUMPS_CONVERT_STR_TO_CHR_ARRAY(DEST,SRC,NB,NB_EFF)
2943 CHARACTER(LEN=NB):: SRC
2944 CHARACTER(len=1):: DEST(NB)
2949 END SUBROUTINE SMUMPS_CONVERT_STR_TO_CHR_ARRAY
2950 SUBROUTINE SMUMPS_FORCE_WRITE_BUF(IERR)
2951 USE SMUMPS_OOC_BUFFER
2953 INTEGER, intent(out) :: IERR
2955.NOT.
IF(WITH_BUF)THEN
2958 CALL SMUMPS_OOC_DO_IO_AND_CHBUF(OOC_FCT_TYPE,IERR)
2963 END SUBROUTINE SMUMPS_FORCE_WRITE_BUF
2964 SUBROUTINE SMUMPS_OOC_FORCE_WRT_BUF_PANEL(IERR)
2965 USE SMUMPS_OOC_BUFFER
2967 INTEGER, intent(out) :: IERR
2970.NOT.
IF(WITH_BUF)THEN
2973 DO I=1,OOC_NB_FILE_TYPE
2974 CALL SMUMPS_OOC_DO_IO_AND_CHBUF(I,IERR)
2975 IF (IERR < 0) RETURN
2978 END SUBROUTINE SMUMPS_OOC_FORCE_WRT_BUF_PANEL
2979 SUBROUTINE SMUMPS_SOLVE_STAT_REINIT_PANEL(NSTEPS,
2984 INTEGER(8) :: TMP_SIZE8
2985 INTEGER KEEP38, KEEP20
2988 OOC_STATE_NODE(1:NSTEPS)=0
2992 IDEB_SOLVE_Z(I)=TMP_SIZE8
2994 POSFAC_SOLVE(I)=TMP_SIZE8
2995 LRLUS_SOLVE(I) =SIZE_ZONE_SOLVE
2996 LRLU_SOLVE_T(I)=SIZE_ZONE_SOLVE
2998 SIZE_SOLVE_Z(I)=SIZE_ZONE_SOLVE
3003 J = J + MAX_NB_NODES_FOR_ZONE
3004 TMP_SIZE8 = TMP_SIZE8 + SIZE_ZONE_SOLVE
3006 IDEB_SOLVE_Z(NB_Z)=TMP_SIZE8
3007 PDEB_SOLVE_Z(NB_Z)=J
3008 POSFAC_SOLVE(NB_Z)=TMP_SIZE8
3009 LRLUS_SOLVE(NB_Z) =SIZE_SOLVE_EMM
3010 LRLU_SOLVE_T(NB_Z)=SIZE_SOLVE_EMM
3011 LRLU_SOLVE_B(NB_Z)=0_8
3012 SIZE_SOLVE_Z(NB_Z)=SIZE_SOLVE_EMM
3013 CURRENT_POS_T(NB_Z)=J
3014 CURRENT_POS_B(NB_Z)=J
3018 SIZE_OF_READ=-9999_8
3019 FIRST_POS_IN_READ=-9999
3025 END SUBROUTINE SMUMPS_SOLVE_STAT_REINIT_PANEL
3026 SUBROUTINE SMUMPS_OOC_IO_LU_PANEL
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 REAL, 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
'
3050.EQ.
IF (KEEP_OOC(50)0
3051.AND..EQ.
& KEEP_OOC(251)2) THEN
3054.EQ..OR..EQ.
WRITE_L = (TYPEFileTYPEF_BOTH_LU TYPEFileTYPEF_L)
3056.EQ..OR..EQ.
WRITE_U = (TYPEFileTYPEF_BOTH_LU TYPEFileTYPEF_U)
3058.GT..AND..GT.
IF (KEEP_OOC(400)0 KEEP_OOC(405) 0) THEN
3059.EQ..OR.
IF ( STRAT STRAT_WRITE_MAX LAST_CALL ) THEN
3060 CALL OMP_SET_LOCK(LOCK_FOR_L0OMP)
3064.NOT.
ELSE IF ( OMP_TEST_LOCK(LOCK_FOR_L0OMP )) THEN
3070 DO_U_FIRST = .FALSE.
3071.EQ.
IF ( TYPEFileTYPEF_BOTH_LU ) THEN
3072.GT.
IF ( LNextPiv2beWritten UNextPiv2beWritten ) THEN
3076 IF (DO_U_FIRST) GOTO 200
3077.AND.
100 IF (WRITE_L TYPEF_L > 0 ) THEN
3079.EQ..AND..NOT.
IF ((MonBloc%Typenode2)(MonBloc%MASTER))
3081 TMPSIZE_OF_BLOCK = SIZE_OF_BLOCK(STEP_OOC(MonBloc%INODE),
3083.LT.
IF (TMPSIZE_OF_BLOCK 0_8) THEN
3084 TMPSIZE_OF_BLOCK = -TMPSIZE_OF_BLOCK - 1_8
3086 LNextPiv2beWritten =
3089 & / int(MonBloc%NROW,8)
3093 CALL SMUMPS_OOC_STORE_LorU( STRAT,
3094 & TempFTYPE, AFAC, LAFAC, MonBloc,
3096 & LNextPiv2beWritten,
3097 & OOC_VADDR(STEP_OOC(MonBloc%INODE),TempFTYPE),
3098 & SIZE_OF_BLOCK(STEP_OOC(MonBloc%INODE),TempFTYPE),
3099 & FILESIZE, LAST_CALL )
3100.LT.
IF (IERR 0) RETURN
3101 IF (DO_U_FIRST) GOTO 300
3103 200 IF (WRITE_U) THEN
3105 CALL SMUMPS_OOC_STORE_LorU( STRAT,
3106 & TempFTYPE, AFAC, LAFAC, MonBloc,
3108 & UNextPiv2beWritten,
3109 & OOC_VADDR(STEP_OOC(MonBloc%INODE),TempFTYPE),
3110 & SIZE_OF_BLOCK(STEP_OOC(MonBloc%INODE),TempFTYPE),
3111 & FILESIZE, LAST_CALL)
3112.LT.
IF (IERR 0) RETURN
3113 IF (DO_U_FIRST) GOTO 100
3117.GT..AND..GT.
IF (KEEP_OOC(400)0 KEEP_OOC(405) 0) THEN
3118 CALL OMP_UNSET_LOCK(LOCK_FOR_L0OMP)
3122 END SUBROUTINE SMUMPS_OOC_IO_LU_PANEL
3123 SUBROUTINE SMUMPS_OOC_STORE_LorU( STRAT, TYPEF,
3124 & AFAC, LAFAC, MonBloc,
3126 & LorU_NextPiv2beWritten,
3127 & LorU_AddVirtNodeI8, LorUSIZE_OF_BLOCK,
3128 & FILESIZE, LAST_CALL
3130 USE SMUMPS_OOC_BUFFER
3132 INTEGER, INTENT(IN) :: STRAT
3133 INTEGER, INTENT(IN) :: TYPEF
3134 INTEGER(8), INTENT(INOUT) :: FILESIZE
3135 INTEGER(8), INTENT(IN) :: LAFAC
3136 REAL, INTENT(IN) :: AFAC(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
3150 LOGICAL HOLE_PROCESSED_BEFORE_CALL
3152 INTEGER ICUR, INODE_CUR, ILAST
3153 INTEGER(8) :: ADDR_LAST
3155 IF (TYPEF == TYPEF_L ) THEN
3156 NNMAX = MonBloc%NROW
3158 NNMAX = MonBloc%NCOL
3160 SIZE_PANEL = SMUMPS_OOC_PANEL_SIZE(NNMAX)
3161.NOT..AND.
IF ( (MonBloc%Last)
3162.LT.
& (MonBloc%LastPiv-LorU_NextPiv2beWritten+1SIZE_PANEL))
3167 TOTSIZE = SMUMPS_OOC_NBENTRIES_PANEL_123
3168 & (MonBloc%NFS, NNMAX, SIZE_PANEL, MonBloc, TMP_ESTIM)
3169 IF (MonBloc%Last) THEN
3171 EFFSIZE = SMUMPS_OOC_NBENTRIES_PANEL_123
3172 & (MonBloc%LastPiv, NNMAX, SIZE_PANEL, MonBloc, TMP_ESTIM)
3174 EFFSIZE = -1034039740327_8
3176.EQ..AND..NE.
IF (MonBloc%Typenode3 MonBloc%NFSMonBloc%NCOL) THEN
3178 & MonBloc%NFS,MonBloc%NCOL
3181.EQ..AND..NE.
IF (MonBloc%Typenode3 TYPEFTYPEF_L) THEN
3183 & TYPEF, 'for typenode=3
'
3186.EQ..AND.
IF (MonBloc%Typenode2
3187.EQ..AND.
& TYPEFTYPEF_U
3188.NOT.
& MonBloc%MASTER ) THEN
3190 & MonBloc%MASTER,MonBloc%Typenode, TYPEF
3193.LT.
HOLE_PROCESSED_BEFORE_CALL = (LorUSIZE_OF_BLOCK 0_8)
3194.AND..NOT.
IF (HOLE_PROCESSED_BEFORE_CALL(MonBloc%Last)) THEN
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.NE..OR.
& ( LorUSIZE_OF_BLOCK 0_8
3206 & HOLE_PROCESSED_BEFORE_CALL )
3207.AND..NOT.
IF (MonBloc%Last HOLE_PROCESSED_BEFORE_CALL) THEN
3208 KEEP_OOC(228) = max(KEEP_OOC(228),
3209 & (MonBloc%LastPiv+SIZE_PANEL-1) / SIZE_PANEL)
3210 IF (VIRT_ADD_RESERVED_BEF_CALL) THEN
3211.EQ.
IF (AddVirtLibre(TYPEF)
3212 & (LorU_AddVirtNodeI8+TOTSIZE) ) THEN
3213 AddVirtLibre(TYPEF) = LorU_AddVirtNodeI8 + EFFSIZE
3216 VIRTUAL_ADDRESS_JUST_RESERVED = .TRUE.
3217.EQ.
IF (EFFSIZE 0_8) THEN
3218 LorU_AddVirtNodeI8 = -9999_8
3220 LorU_AddVirtNodeI8 = AddVirtLibre(TYPEF)
3222 AddVirtLibre(TYPEF) = AddVirtLibre(TYPEF) + EFFSIZE
3225.NOT.
IF ( VIRT_ADD_RESERVED_BEF_CALL
3227 LorU_AddVirtNodeI8 = AddVirtLibre(TYPEF)
3228 AddVirtLibre(TYPEF) = AddVirtLibre(TYPEF) + TOTSIZE
3231 AddVirtCour = LorU_AddVirtNodeI8 + LorUSIZE_OF_BLOCK
3232 CALL SMUMPS_OOC_WRT_IN_PANELS_LorU( STRAT, TYPEF, MonBloc,
3235 & LorU_NextPiv2beWritten, AddVirtCour,
3238.LT.
IF ( IERR 0 ) RETURN
3239 LorUSIZE_OF_BLOCK = LorUSIZE_OF_BLOCK + TailleEcrite
3240.EQ.
IF (LorUSIZE_OF_BLOCK0_8 ) THEN
3241.NOT.
IF ( VIRT_ADD_RESERVED_BEF_CALL
3242.AND..NOT.
& VIRTUAL_ADDRESS_JUST_RESERVED )
3244 AddVirtLibre(TYPEF) = AddVirtLibre(TYPEF) - TOTSIZE
3245 LorU_AddVirtNodeI8 = 0_8
3247.NOT.
ELSE IF ( VIRT_ADD_RESERVED_BEF_CALL ) THEN
3248 VIRTUAL_ADDRESS_JUST_RESERVED = .TRUE.
3250 IF ( VIRTUAL_ADDRESS_JUST_RESERVED) THEN
3251 OOC_INODE_SEQUENCE(I_CUR_HBUF_NEXTPOS(TYPEF),
3252 & TYPEF) = MonBloc%INODE
3253 I_CUR_HBUF_NEXTPOS(TYPEF) = I_CUR_HBUF_NEXTPOS(TYPEF) + 1
3254 IF (MonBloc%Last) THEN
3255 MAX_SIZE_FACTOR_OOC=max(MAX_SIZE_FACTOR_OOC,EFFSIZE)
3256 TMP_SIZE_FACT=TMP_SIZE_FACT+EFFSIZE
3258 MAX_SIZE_FACTOR_OOC=max(MAX_SIZE_FACTOR_OOC,TOTSIZE)
3259 TMP_SIZE_FACT=TMP_SIZE_FACT+TOTSIZE
3261 TMP_NB_NODES=TMP_NB_NODES+1
3262.GT.
IF(TMP_SIZE_FACTSIZE_ZONE_SOLVE)THEN
3263 MAX_NB_NODES_FOR_ZONE=max(MAX_NB_NODES_FOR_ZONE,
3269 IF (MonBloc%Last) THEN
3270 LorUSIZE_OF_BLOCK = - LorUSIZE_OF_BLOCK - 1_8
3273.NOT.
IF (MonBloc%Last) THEN
3275 & ' last and last_call are incompatible
'
3278 LorUSIZE_OF_BLOCK = - LorUSIZE_OF_BLOCK - 1_8
3279 ICUR = I_CUR_HBUF_NEXTPOS(TYPEF) - 1
3280 INODE_CUR = OOC_INODE_SEQUENCE(ICUR,TYPEF)
3281 ADDR_LAST = AddVirtLibre(TYPEF)
3282.NE..AND.
IF ( INODE_CUR MonBloc%INODE
3283.NE.
& OOC_VADDR(STEP_OOC(MonBloc%INODE),TYPEF) -9999 ) THEN
3286.NE.
IF ( OOC_VADDR(STEP_OOC(INODE_CUR),TYPEF) -9999_8) THEN
3287 ADDR_LAST = OOC_VADDR(STEP_OOC(INODE_CUR), TYPEF)
3290 INODE_CUR = OOC_INODE_SEQUENCE(ICUR,TYPEF)
3291.EQ.
IF (INODE_CUR MonBloc%INODE) THEN
3292 LorUSIZE_OF_BLOCK = ADDR_LAST -
3293 & OOC_VADDR(STEP_OOC(INODE_CUR),TYPEF)
3295.LE.
IF (ICUR 1) THEN
3296 WRITE(*,*) "Internal error in SMUMPS_OOC_STORE_LorU"
3297 WRITE(*,*) "Did not find current node in sequence"
3303 FILESIZE = FILESIZE + LorUSIZE_OF_BLOCK
3306 END SUBROUTINE SMUMPS_OOC_STORE_LorU
3307 SUBROUTINE SMUMPS_OOC_WRT_IN_PANELS_LorU(
3308 & STRAT, TYPEF, MonBloc,
3311 & NextPiv2beWritten, AddVirtCour,
3312 & TailleEcrite, IERR )
3313 USE SMUMPS_OOC_BUFFER
3315 INTEGER, INTENT(IN) :: STRAT, TYPEF, SIZE_PANEL
3317 INTEGER(8), INTENT(IN) :: AddVirtCour
3318 REAL, 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.GT.
IF ( NextPiv2beWritten MonBloc%LastPiv ) THEN
3333 NBeff = min(SIZE_PANEL,MonBloc%LastPiv-I+1 )
3334.NE..AND..NOT.
IF ((NBeffSIZE_PANEL) (MonBloc%Last)) THEN
3337.EQ..AND..AND.
IF (TYPEFTYPEF_LMonBloc%MASTER
3338.EQ..AND..NE.
& KEEP_OOC(50)2 MonBloc%Typenode3) THEN
3339 IF (MonBloc%INDICES(NBeff+I-1) < 0)
3345 CALL SMUMPS_COPY_LU_TO_BUFFER( STRAT, TYPEF, MonBloc,
3347 & AddVirtDeb, I, IEND, LPANELeff,
3349.LT.
IF ( IERR 0 ) THEN
3352.EQ.
IF ( IERR 1 ) THEN
3356.EQ.
IF (TYPEF TYPEF_L) 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.LE.
IF ( I MonBloc%LastPiv ) GOTO 10
3366 NextPiv2beWritten = I
3368 END SUBROUTINE SMUMPS_OOC_WRT_IN_PANELS_LorU
3369 INTEGER(8) FUNCTION SMUMPS_OOC_NBENTRIES_PANEL_123
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.EQ.
IF (NFSorNPIV0) GOTO 100
3379.NOT..OR..EQ.
IF ( MonBloc%MASTER MonBloc%Typenode3) THEN
3380 TOTSIZE = int(NFSorNPIV,8) * int(NNMAX,8)
3384 NBeff = min(SIZE_PANEL, NFSorNPIV-I+1)
3385.EQ.
IF (KEEP_OOC(50)2) THEN
3389 IF (MonBloc%INDICES(I+NBeff-1) < 0) THEN
3395 & int(NNMAX-I+1,8) * int(NBeff,8)
3397.LE.
IF ( I NFSorNPIV ) GOTO 10
3400 SMUMPS_OOC_NBENTRIES_PANEL_123 = TOTSIZE
3402 END FUNCTION SMUMPS_OOC_NBENTRIES_PANEL_123
3403 INTEGER FUNCTION SMUMPS_OOC_PANEL_SIZE( NNMAX )
3405 INTEGER, INTENT(IN) :: NNMAX
3406 INTEGER SMUMPS_OOC_GET_PANEL_SIZE
3407 SMUMPS_OOC_PANEL_SIZE=SMUMPS_OOC_GET_PANEL_SIZE(
3408 & int(KEEP_OOC(223),8), NNMAX, KEEP_OOC(227),KEEP_OOC(50))
3410 END FUNCTION SMUMPS_OOC_PANEL_SIZE
3411 SUBROUTINE SMUMPS_OOC_SKIP_NULL_SIZE_NODE()
3414.NOT.
IF(SMUMPS_SOLVE_IS_END_REACHED())THEN
3415.EQ.
IF(SOLVE_STEP0)THEN
3417 TMP_NODE=OOC_INODE_SEQUENCE(CUR_POS_SEQUENCE,
3419.LE..AND.
DO WHILE ((ITOTAL_NB_OOC_NODES(OOC_FCT_TYPE))
3420 & (SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE)
3422 INODE_TO_POS(STEP_OOC(TMP_NODE))=1
3423 OOC_STATE_NODE(STEP_OOC(TMP_NODE))=NOT_USED
3425.LE.
IF(ITOTAL_NB_OOC_NODES(OOC_FCT_TYPE))THEN
3426 TMP_NODE=OOC_INODE_SEQUENCE(I,OOC_FCT_TYPE)
3429 CUR_POS_SEQUENCE=min(I,TOTAL_NB_OOC_NODES(OOC_FCT_TYPE))
3432 TMP_NODE=OOC_INODE_SEQUENCE(CUR_POS_SEQUENCE,
3434.GE..AND.
DO WHILE ((I1)
3435 & (SIZE_OF_BLOCK(STEP_OOC(TMP_NODE),OOC_FCT_TYPE)
3437 INODE_TO_POS(STEP_OOC(TMP_NODE))=1
3438 OOC_STATE_NODE(STEP_OOC(TMP_NODE))=NOT_USED
3441 TMP_NODE=OOC_INODE_SEQUENCE(I,OOC_FCT_TYPE)
3444 CUR_POS_SEQUENCE=max(I,1)
3448 END SUBROUTINE SMUMPS_OOC_SKIP_NULL_SIZE_NODE
3449 SUBROUTINE SMUMPS_OOC_SET_STATES_ES(N,KEEP201,
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.GT.
IF (KEEP201 0) THEN
3457 OOC_STATE_NODE(:) = ALREADY_USED
3458 DO I = 1, nb_prun_nodes
3459 ISTEP = STEP(Pruned_List(I))
3460 OOC_STATE_NODE(ISTEP) = NOT_IN_MEM
3464 END SUBROUTINE SMUMPS_OOC_SET_STATES_ES
3465 END MODULE SMUMPS_OOC
if(complex_arithmetic) id
end diagonal values have been computed in the(sparse) matrix id.SOL
subroutine mpi_allreduce(sendbuf, recvbuf, cnt, datatype, operation, comm, ierr)
for(i8=*sizetab-1;i8 >=0;i8--)
subroutine mumps_ooc_convert_bigintto2int(int1, int2, bigint)
subroutine mumps_ooc_init_filetype(typef_l, typef_u, typef_cb, k201, k251, k50, typef_invalid)
integer(8), dimension(:,:), pointer ooc_vaddr
integer(8), save hbuf_size
character(len=1), dimension(err_str_ooc_max_len) err_str_ooc
integer, save low_level_strat_io
logical, save strat_io_async
integer, dimension(:), pointer step_ooc
integer, parameter, public typef_invalid
integer, dimension(:,:), pointer ooc_inode_sequence
integer, dimension(:), pointer procnode_ooc
integer err_str_ooc_max_len
integer, dimension(:), pointer keep_ooc
subroutine smumps_ooc_do_io_and_chbuf(typef_arg, ierr)
subroutine smumps_ooc_buf_clean_pending(ierr)
subroutine smumps_init_ooc_buf(i1, i2, ierr)
integer, dimension(:), allocatable i_cur_hbuf_nextpos
subroutine smumps_ooc_next_hbuf(typef_arg)
subroutine smumps_end_ooc_buf()
subroutine smumps_ooc_copy_data_to_buffer(block, size_of_block, ierr)
subroutine, private smumps_ooc_wrt_in_panels_loru(strat, typef, monbloc, size_panel, afac, lafac, nextpiv2bewritten, addvirtcour, tailleecrite, ierr)
subroutine smumps_read_solve_block(dest, indice, size, zone, ptrfac, nsteps, pos_seq, nb_nodes, flag, ierr)
integer(8), dimension(:), allocatable size_solve_z
subroutine smumps_search_solve(addr, zone)
subroutine, public smumps_new_factor(inode, ptrfac, keep, keep8, a, la, size, ierr)
integer, dimension(:), allocatable pos_hole_b
integer, dimension(:), allocatable inode_to_pos
integer, dimension(:), allocatable current_pos_b
subroutine, public smumps_ooc_end_solve(ierr)
subroutine smumps_ooc_end_facto(id, ierr)
subroutine, private smumps_ooc_store_loru(strat, typef, afac, lafac, monbloc, ierr, loru_nextpiv2bewritten, loru_addvirtnodei8, lorusize_of_block, filesize, last_call)
logical function, public smumps_is_there_free_space(inode, zone)
subroutine smumps_set_strat_io_flags(strat_io_arg, strat_io_async_arg, with_buf_arg, low_level_strat_io_arg)
integer, dimension(:), allocatable req_id
subroutine smumps_solve_update_pointers(request, ptrfac, nsteps)
subroutine smumps_ooc_clean_files(id, ierr)
integer(8), save size_solve_emm
integer, dimension(:), pointer total_nb_ooc_nodes
integer, dimension(:), allocatable first_pos_in_read
subroutine smumps_solve_alloc_ptr_upd_b(inode, ptrfac, keep, keep8, a, zone)
integer, save cur_pos_sequence
subroutine smumps_clean_ooc_data(id, ierr)
integer(8), save tmp_size_fact
integer smumps_elementary_data_size
subroutine smumps_solve_compute_read_size(zone, size, dest, pos_seq, nb_nodes, flag, ptrfac, nsteps)
integer, dimension(:), allocatable ooc_state_node
subroutine, public smumps_ooc_io_lu_panel(strat, typefile, afac, lafac, monbloc, lnextpiv2bewritten, unextpiv2bewritten, iw, liwfac, myid, filesize, ierr, last_call)
subroutine smumps_solve_try_zone_for_read(zone)
integer(8), dimension(:), allocatable posfac_solve
subroutine smumps_init_fact_area_size_s(la)
integer ooc_node_not_in_mem
integer, save tmp_nb_nodes
subroutine, public smumps_solve_init_ooc_fwd(ptrfac, nsteps, mtype, a, la, doprefetch, ierr)
integer function smumps_solve_is_inode_in_mem(inode, ptrfac, nsteps, a, la, ierr)
integer ooc_node_permuted
integer ooc_node_not_permuted
integer, dimension(:), allocatable read_mng
integer, dimension(:), allocatable pdeb_solve_z
integer(8), save max_size_factor_ooc
integer, dimension(:), allocatable current_pos_t
logical function smumps_solve_is_end_reached()
subroutine smumps_solve_modify_state_node(inode)
subroutine smumps_solve_zone_read(zone, a, la, ptrfac, nsteps, ierr)
integer special_root_node
subroutine smumps_ooc_update_solve_stat(inode, ptrfac, nsteps, flag)
integer, dimension(:), allocatable pos_hole_t
subroutine, public smumps_initiate_read_ops(a, la, ptrfac, nsteps, ierr)
subroutine, public smumps_solve_alloc_factor_space(inode, ptrfac, keep, keep8, a, ierr)
integer(8), save fact_area_size
subroutine, public smumps_ooc_init_facto(id, maxs)
subroutine smumps_free_space_for_solve(a, la, requested_size, ptrfac, nsteps, zone, ierr)
integer(8), dimension(:,:), pointer size_of_block
integer(8), dimension(:), allocatable size_of_read
integer ooc_solve_type_fct
subroutine smumps_solve_select_zone(zone)
integer(8), dimension(:), allocatable ideb_solve_z
integer(8), save min_size_read
integer(8), save size_zone_req
integer, save max_nb_nodes_for_zone
subroutine smumps_solve_find_zone(inode, zone, ptrfac, nsteps)
integer(8), dimension(:), allocatable lrlu_solve_b
integer, save nb_zone_req
integer used_not_permuted
integer(8), dimension(:), allocatable lrlu_solve_t
subroutine smumps_get_top_area_space(a, la, requested_size, ptrfac, nsteps, zone, flag, ierr)
double precision, save max_ooc_file_size
subroutine, public smumps_read_ooc(dest, inode, ierr)
integer, save current_solve_read_zone
subroutine smumps_convert_str_to_chr_array(dest, src, nb, nb_eff)
integer, dimension(:), allocatable io_req
subroutine smumps_ooc_skip_null_size_node()
integer(8), dimension(:), allocatable lrlus_solve
integer(8), save ooc_vaddr_ptr
subroutine smumps_solve_upd_node_info(inode, ptrfac, nsteps)
subroutine, public smumps_ooc_init_solve(id)
integer function, public smumps_ooc_panel_size(nnmax)
subroutine smumps_ooc_clean_pending(ierr)
subroutine smumps_ooc_open_files_for_solve(id)
subroutine smumps_update_read_req_node(inode, size, dest, zone, request, pos_seq, nb_nodes, flag, ptrfac, nsteps, ierr)
subroutine smumps_free_factors_for_solve(inode, ptrfac, nsteps, a, la, flag, ierr)
subroutine smumps_get_bottom_area_space(a, la, requested_size, ptrfac, nsteps, zone, flag, ierr)
subroutine smumps_struc_store_file_name(id, ierr)
integer, dimension(:), allocatable pos_in_mem
subroutine smumps_solve_alloc_ptr_upd_t(inode, ptrfac, keep, keep8, a, zone)
subroutine smumps_submit_read_for_z(a, la, ptrfac, nsteps, ierr)
integer(8), save size_zone_solve
integer, parameter, public typef_both_lu
integer, dimension(:), allocatable req_to_zone
integer(8), dimension(:), allocatable read_dest
subroutine, public smumps_solve_init_ooc_bwd(ptrfac, nsteps, mtype, i_worked_on_root, iroot, a, la, ierr)