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=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, tmp_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
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)
287 INTEGER inode,keep(500)
289 INTEGER(8) keep8(150)
290 INTEGER(8) :: (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
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
598 INTEGER(8) :: tmp_size8
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
916 INTEGER ADDR_INT1,ADDR_INT2
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) :: IERR
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
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) :: (NSTEPS)
1446 DO WHILE (zone.LE.
nb_z)
1453 IF(zone.EQ.
nb_z+1)
THEN
1476 INTEGER inode,keep(500)
1477 INTEGER,
intent(out)::ierr
1478 INTEGER(8) keep8(150)
1479 INTEGER(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
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
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 ',
1646 &
' SMUMPS_GET_TOP_AREA_SPACE',
1652 IF(free_hole_flag.EQ.0)
THEN
1656 IF(free_hole_flag.EQ.1)
THEN
1664 WRITE(*,*)
myid_ooc,
': Internal error (11) in OOC ',
1672 free_hole=free_hole_pos-
1673 & (abs(ptrfac(
step_ooc(tmp_node)))+
1675 ELSEIF(tmp_node.EQ.0)
THEN
1680 WRITE(*,*)
myid_ooc,
': Internal error (12) in OOC ',
1681 &
' SMUMPS_GET_TOP_AREA_SPACE'
1686 free_hole=free_hole_pos-
1687 & (abs(ptrfac(
step_ooc(tmp_node)))+
1692 ELSEIF(tmp_node.LT.0)
THEN
1693 WRITE(*,*)
myid_ooc,
': Internal error (13) in OOC',
1694 &
' SMUMPS_GET_TOP_AREA_SPACE'
1697 free_hole=free_hole_pos-
1698 & (abs(ptrfac(
step_ooc(tmp_node)))+
1704 free_size=free_size+free_hole
1718 & PTRFAC,NSTEPS,ZONE,FLAG,IERR)
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
1769 IF(tmp_node.NE.0)
THEN
1771 IF(abs(ptrfac(
step_ooc(tmp_node))).NE.
1773 free_size=free_size+abs(ptrfac(
step_ooc(tmp_node)))
1777 IF(free_hole_flag.EQ.1)
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)))+
1785 ptrfac(
step_ooc(tmp_node))=-777777_8
1795 WRITE(*,*)
myid_ooc,
': Internal error (14) in OOC ',
1796 &
' SMUMPS_GET_BOTTOM_AREA_SPACE',
1801 IF(free_hole_flag.EQ.1)
THEN
1809 WRITE(*,*)
myid_ooc,
': Internal error (15) in OOC ',
1817 free_hole=abs(ptrfac(
step_ooc(tmp_node)))-free_hole_pos
1818 ELSEIF(tmp_node.EQ.0)
THEN
1823 WRITE(*,*)
myid_ooc,
': Internal error (16) in OOC ',
1824 &
' SMUMPS_GET_BOTTOM_AREA_SPACE'
1829 free_hole=abs(ptrfac(
step_ooc(tmp_node)))-
1834 ELSEIF(tmp_node.LT.0)
THEN
1835 WRITE(*,*)
myid_ooc,
': Internal error (17) in OOC ',
1836 &
' SMUMPS_GET_BOTTOM_AREA_SPACE'
1839 free_hole=abs(ptrfac(
step_ooc(tmp_node)))-
1845 free_size=free_size+free_hole
1854 WRITE(*,*)
myid_ooc,
': Internal error (18) in OOC ',
1871 WRITE(*,*)
myid_ooc,
': Internal error (19) in OOC ',
1872 &
'SMUMPS_GET_BOTTOM_AREA_SPACE'
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)
1902 WRITE(*,*)
myid_ooc,
': Internal error (20) in OOC ',
1903 &
' Problem avec debut (2)',inode,
1911 WRITE(*,*)
myid_ooc,
': Internal error (21) in OOC ',
1912 &
' Problem with CURRENT_POS_T',
1926 INTEGER INODE,KEEP(500)
1927 INTEGER(8) KEEP8(150)
1928 INTEGER(8) :: PTRFAC(KEEP(28))
1929 REAL A(FACT_AREA_SIZE)
1932 WRITE(*,*)
myid_ooc,
': Internal error (22) in OOC ',
1933 &
' SMUMPS_SOLVE_ALLOC_PTR_UPD_B'
1944 WRITE(*,*)
myid_ooc,
': Internal error (23) in OOC ',
1950 WRITE(*,*)
myid_ooc,
': Internal error (23b) in OOC '
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
1985 area_pointer=area_pointer+
1993 WRITE(*,*)
myid_ooc,
': Internal error (25) in OOC ',
1994 &
': There are no free blocks ',
2001 apos_first_free=area_pointer
2002 free_hole_pos=area_pointer
2005 apos_first_free=abs(ptrfac(
step_ooc(tmp_node)))
2023 size_hole=abs(ptrfac(
step_ooc(tmp_node)))-
2030 IF(tmp_node.LE.0)
THEN
2033 CALL mumps_wait_request(
2043 WRITE(*,*)
myid_ooc,
': Internal error (26) in OOC ',
2044 &
' SMUMPS_FREE_SPACE_FOR_SOLVE',tmp_node,
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+
2079 a(apos_first_free+k8-1_8)=
2080 & a(ptrfac(
step_ooc(tmp_node))+k8-1_8)
2082 IF(free_hole_flag.EQ.1)
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)))+
2090 ptrfac(
step_ooc(tmp_node))=apos_first_free
2091 apos_first_free=apos_first_free+
2098 IF(free_hole_flag.EQ.1)
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)))+
2111 IF(free_hole_flag.EQ.1)
THEN
2114 size_hole=size_hole+free_hole
2127 ipos_first_free=ipos_first_free+1
2139 WRITE(*,*)
myid_ooc,
': Internal error (27) in OOC ',
2146 WRITE(*,*)
myid_ooc,
': Internal error (28) in OOC ',
2147 &
' LRLUS_SOLVE must be (4) > 0'
2151 WRITE(*,*)
myid_ooc,
': Internal error (29) in OOC ',
2157 WRITE(*,*)
myid_ooc,
': Internal error (30) in OOC ',
2158 &
' Problem avec debut POSFAC_SOLVE',
2165 WRITE(*,*)
myid_ooc,
': Internal error (31) in OOC ',
2174 INTEGER INODE,NSTEPS,FLAG
2175 INTEGER (8) :: PTRFAC(NSTEPS)
2177 IF((flag.LT.0).OR.(flag.GT.1))
THEN
2178 WRITE(*,*)
myid_ooc,
': Internal error (32) in OOC ',
2179 &
' SMUMPS_OOC_UPDATE_SOLVE_STAT'
2184 WRITE(*,*)
myid_ooc,
': Internal error (33) in OOC ',
2185 &
' LRLUS_SOLVE must be (5) ++ > 0'
2196 WRITE(*,*)
myid_ooc,
': Internal error (34) in OOC ',
2197 &
' LRLUS_SOLVE must be (5) > 0'
2207 DO WHILE (i.LE.
nb_z)
2233 INTEGER(8),
INTENT(IN) ::
2234 INTEGER,
intent(out) ::
2236 INTEGER(8) :: PTRFAC(NSTEPS)
2237 INTEGER(8) :: SIZE, DEST
2238 INTEGER(8) :: NEEDED_SIZE
2239 INTEGER FLAG,TMP_FLAG,POS_SEQ,TMP_NODE,
2301 & needed_size,ptrfac,nsteps,zone,tmp_flag,ierr)
2306 IF(tmp_flag.EQ.0)
THEN
2308 & needed_size,ptrfac,nsteps,zone,tmp_flag,ierr)
2316 & needed_size,ptrfac,nsteps,zone,tmp_flag,ierr)
2321 IF(tmp_flag.EQ.0)
THEN
2323 & needed_size,ptrfac,nsteps,zone,tmp_flag,ierr)
2330 IF(tmp_flag.EQ.0)
THEN
2332 & needed_size,ptrfac,nsteps,zone,ierr)
2340 & nb_nodes,flag,ptrfac,nsteps)
2348 & pos_seq,nb_nodes,flag,ierr)
2354 & NB_NODES,FLAG,PTRFAC,NSTEPS)
2356 INTEGER(8) :: SIZE, DEST
2357 INTEGER ZONE,FLAG,,NSTEPS
2358 INTEGER(8) :: PTRFAC(NSTEPS), MAX_SIZE, , J8
2359 INTEGER I,START_NODE,K,MAX_NB,
2361 INTEGER NB_NODES_LOC
2370 ELSEIF(flag.EQ.1)
THEN
2374 WRITE(*,*)
myid_ooc,
': Internal error (35) in OOC ',
2375 &
' Unknown Flag value in ',
2376 &
' SMUMPS_SOLVE_COMPUTE_READ_SIZE',flag
2385 IF(zone.EQ.
nb_z)
THEN
2391 ELSEIF(flag.EQ.1)
THEN
2407 DO WHILE((j8.LE.max_size).AND.
2414 IF(.NOT.already)
THEN
2418 nb_nodes_loc=nb_nodes_loc+1
2427 IF(.NOT.already)
THEN
2439 nb_nodes_loc=nb_nodes_loc+1
2442 IF(j8.GT.max_size)
THEN
2445 nb_nodes_loc=nb_nodes_loc-1
2458 nb_nodes_loc=nb_nodes_loc-1
2473 DO WHILE((j8.LE.max_size).AND.(i.GE.1).AND.
2479 IF(.NOT.already)
THEN
2482 nb_nodes_loc=nb_nodes_loc+1
2492 IF(.NOT.already)
THEN
2505 nb_nodes_loc=nb_nodes_loc+1
2507 IF(j8.GT.max_size)
THEN
2510 nb_nodes_loc=nb_nodes_loc-1
2522 nb_nodes_loc=nb_nodes_loc-1
2535 INTEGER solve_or_facto
2536 INTEGER,
intent(out) :: ierr
2580 IF(
allocated(
io_req))
THEN
2598 IF(
allocated(
req_id))
THEN
2602 CALL mumps_clean_io_data_c(
myid_ooc,solve_or_facto,ierr)
2612 INTEGER,
INTENT(in) :: NSTEPS
2613 INTEGER(8),
INTENT(INOUT) :: PTRFAC(NSTEPS)
2614 INTEGER(8),
INTENT(IN) :: LA
2616 INTEGER :: I, TMP, , IPAS, IBEG,
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.
2638 IF (set_pos_sequence)
THEN
2639 set_pos_sequence = .false.
2646 ELSE IF(tmp.LT.0)
THEN
2649 ptrfac(
step_ooc(j)) = abs(save_ptr)
2651 & zone,ptrfac,nsteps)
2653 IF(zone.EQ.
nb_z)
THEN
2655 WRITE(*,*)
myid_ooc,
': Internal error 6 ',
2657 &
' is in status USED in the
2658 & emmergency buffer '
2667 & .AND.(zone.NE.
nb_z))
THEN
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
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_prepare_pref(ptrfac, nsteps, a, la)
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)