OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
cmumps_ooc Module Reference

Functions/Subroutines

subroutine cmumps_set_strat_io_flags (strat_io_arg, strat_io_async_arg, with_buf_arg, low_level_strat_io_arg)
logical function, public cmumps_is_there_free_space (inode, zone)
subroutine cmumps_init_fact_area_size_s (la)
subroutine, public cmumps_ooc_init_facto (id, maxs)
subroutine, public cmumps_new_factor (inode, ptrfac, keep, keep8, a, la, size, ierr)
subroutine, public cmumps_read_ooc (dest, inode, ierr)
subroutine cmumps_ooc_clean_pending (ierr)
subroutine cmumps_ooc_end_facto (id, ierr)
subroutine cmumps_ooc_clean_files (id, ierr)
subroutine cmumps_clean_ooc_data (id, ierr)
subroutine, public cmumps_ooc_init_solve (id)
subroutine, public cmumps_initiate_read_ops (a, la, ptrfac, nsteps, ierr)
subroutine cmumps_submit_read_for_z (a, la, ptrfac, nsteps, ierr)
subroutine cmumps_read_solve_block (dest, indice, size, zone, ptrfac, nsteps, pos_seq, nb_nodes, flag, ierr)
subroutine cmumps_solve_update_pointers (request, ptrfac, nsteps)
subroutine cmumps_update_read_req_node (inode, size, dest, zone, request, pos_seq, nb_nodes, flag, ptrfac, nsteps, ierr)
subroutine cmumps_free_factors_for_solve (inode, ptrfac, nsteps, a, la, flag, ierr)
integer function cmumps_solve_is_inode_in_mem (inode, ptrfac, nsteps, a, la, ierr)
subroutine cmumps_solve_modify_state_node (inode)
subroutine cmumps_solve_upd_node_info (inode, ptrfac, nsteps)
subroutine cmumps_solve_find_zone (inode, zone, ptrfac, nsteps)
subroutine cmumps_solve_try_zone_for_read (zone)
subroutine cmumps_solve_select_zone (zone)
subroutine, public cmumps_solve_alloc_factor_space (inode, ptrfac, keep, keep8, a, ierr)
subroutine cmumps_get_top_area_space (a, la, requested_size, ptrfac, nsteps, zone, flag, ierr)
subroutine cmumps_get_bottom_area_space (a, la, requested_size, ptrfac, nsteps, zone, flag, ierr)
subroutine cmumps_solve_alloc_ptr_upd_t (inode, ptrfac, keep, keep8, a, zone)
subroutine cmumps_solve_alloc_ptr_upd_b (inode, ptrfac, keep, keep8, a, zone)
subroutine cmumps_free_space_for_solve (a, la, requested_size, ptrfac, nsteps, zone, ierr)
subroutine cmumps_ooc_update_solve_stat (inode, ptrfac, nsteps, flag)
subroutine cmumps_search_solve (addr, zone)
logical function cmumps_solve_is_end_reached ()
subroutine cmumps_solve_zone_read (zone, a, la, ptrfac, nsteps, ierr)
subroutine cmumps_solve_compute_read_size (zone, size, dest, pos_seq, nb_nodes, flag, ptrfac, nsteps)
subroutine, public cmumps_ooc_end_solve (ierr)
subroutine cmumps_solve_prepare_pref (ptrfac, nsteps, a, la)
subroutine, public cmumps_solve_init_ooc_fwd (ptrfac, nsteps, mtype, a, la, doprefetch, ierr)
subroutine, public cmumps_solve_init_ooc_bwd (ptrfac, nsteps, mtype, i_worked_on_root, iroot, a, la, ierr)
subroutine cmumps_struc_store_file_name (id, ierr)
subroutine cmumps_ooc_open_files_for_solve (id)
subroutine cmumps_convert_str_to_chr_array (dest, src, nb, nb_eff)
subroutine cmumps_force_write_buf (ierr)
subroutine cmumps_ooc_force_wrt_buf_panel (ierr)
subroutine cmumps_solve_stat_reinit_panel (nsteps, keep38, keep20)
subroutine, public cmumps_ooc_io_lu_panel (strat, typefile, afac, lafac, monbloc, lnextpiv2bewritten, unextpiv2bewritten, iw, liwfac, myid, filesize, ierr, last_call)
subroutine, private cmumps_ooc_store_loru (strat, typef, afac, lafac, monbloc, ierr, loru_nextpiv2bewritten, loru_addvirtnodei8, lorusize_of_block, filesize, last_call)
subroutine, private cmumps_ooc_wrt_in_panels_loru (strat, typef, monbloc, size_panel, afac, lafac, nextpiv2bewritten, addvirtcour, tailleecrite, ierr)
integer(8) function cmumps_ooc_nbentries_panel_123 (nfsornpiv, nnmax, size_panel, monbloc, estim)
integer function, public cmumps_ooc_panel_size (nnmax)
subroutine cmumps_ooc_skip_null_size_node ()
subroutine cmumps_ooc_set_states_es (n, keep201, pruned_list, nb_prun_nodes, step)

Variables

integer not_in_mem
integer being_read
integer not_used
integer permuted
integer used
integer used_not_permuted
integer already_used
integer ooc_node_not_in_mem
integer ooc_node_permuted
integer ooc_node_not_permuted
integer(8), dimension(:,:), pointer size_of_block
integer, dimension(:), pointer total_nb_ooc_nodes
integer ooc_solve_type_fct
integer, dimension(:), allocatable io_req
integer(8), dimension(:), allocatable lrlus_solve
integer(8), dimension(:), allocatable size_solve_z
integer(8), dimension(:), allocatable lrlu_solve_t
integer(8), dimension(:), allocatable posfac_solve
integer(8), dimension(:), allocatable ideb_solve_z
integer(8), dimension(:), allocatable lrlu_solve_b
integer, dimension(:), allocatable pdeb_solve_z
integer(8), save fact_area_size
integer(8), save size_zone_solve
integer(8), save size_solve_emm
integer(8), save tmp_size_fact
integer(8), save max_size_factor_ooc
integer(8), save min_size_read
integer, save tmp_nb_nodes
integer, save max_nb_nodes_for_zone
integer, save max_nb_req
integer, save current_solve_read_zone
integer, save cur_pos_sequence
integer, save nb_z
integer, save solve_step
integer, save nb_zone_req
integer, save mtype_ooc
integer, save nb_act
integer, save nb_called
integer, save req_act
integer, save nb_call
integer(8), save ooc_vaddr_ptr
integer(8), save size_zone_req
double precision, save max_ooc_file_size
integer(8), dimension(:), allocatable size_of_read
integer(8), dimension(:), allocatable read_dest
integer, dimension(:), allocatable first_pos_in_read
integer, dimension(:), allocatable read_mng
integer, dimension(:), allocatable req_to_zone
integer, dimension(:), allocatable pos_hole_t
integer, dimension(:), allocatable pos_hole_b
integer, dimension(:), allocatable req_id
integer, dimension(:), allocatable ooc_state_node
integer cmumps_elementary_data_size
integer n_ooc
integer, dimension(:), allocatable pos_in_mem
integer, dimension(:), allocatable inode_to_pos
integer, dimension(:), allocatable current_pos_t
integer, dimension(:), allocatable current_pos_b
logical is_root_special
integer special_root_node
integer, parameter, public typef_both_lu = -99976

Function/Subroutine Documentation

◆ cmumps_clean_ooc_data()

subroutine cmumps_ooc::cmumps_clean_ooc_data ( type(cmumps_struc), target id,
integer ierr )

Definition at line 567 of file cmumps_ooc.F.

569 IMPLICIT NONE
570 TYPE(CMUMPS_STRUC), TARGET :: id
571 INTEGER IERR
572 ierr=0
573 CALL cmumps_ooc_clean_files(id,ierr)
574 IF(associated(id%OOC_TOTAL_NB_NODES))THEN
575 DEALLOCATE(id%OOC_TOTAL_NB_NODES)
576 NULLIFY(id%OOC_TOTAL_NB_NODES)
577 ENDIF
578 IF(associated(id%OOC_INODE_SEQUENCE))THEN
579 DEALLOCATE(id%OOC_INODE_SEQUENCE)
580 NULLIFY(id%OOC_INODE_SEQUENCE)
581 ENDIF
582 IF(associated(id%OOC_SIZE_OF_BLOCK))THEN
583 DEALLOCATE(id%OOC_SIZE_OF_BLOCK)
584 NULLIFY(id%OOC_SIZE_OF_BLOCK)
585 ENDIF
586 IF(associated(id%OOC_VADDR))THEN
587 DEALLOCATE(id%OOC_VADDR)
588 NULLIFY(id%OOC_VADDR)
589 ENDIF
590 RETURN
initmumps id

◆ cmumps_convert_str_to_chr_array()

subroutine cmumps_ooc::cmumps_convert_str_to_chr_array ( character(len=1), dimension(nb) dest,
character(len=nb) src,
integer nb,
integer nb_eff )

Definition at line 2940 of file cmumps_ooc.F.

2941 IMPLICIT NONE
2942 INTEGER NB, NB_EFF
2943 CHARACTER(LEN=NB):: SRC
2944 CHARACTER(len=1):: DEST(NB)
2945 INTEGER I
2946 DO i=1,nb_eff
2947 dest(i)=src(i:i)
2948 ENDDO

◆ cmumps_force_write_buf()

subroutine cmumps_ooc::cmumps_force_write_buf ( integer, intent(out) ierr)

Definition at line 2950 of file cmumps_ooc.F.

2952 IMPLICIT NONE
2953 INTEGER, intent(out) :: IERR
2954 ierr=0
2955 IF(.NOT.with_buf)THEN
2956 RETURN
2957 ENDIF
2958 CALL cmumps_ooc_do_io_and_chbuf(ooc_fct_type,ierr)
2959 IF (ierr < 0) THEN
2960 RETURN
2961 ENDIF
2962 RETURN
subroutine cmumps_ooc_do_io_and_chbuf(typef_arg, ierr)

◆ cmumps_free_factors_for_solve()

subroutine cmumps_ooc::cmumps_free_factors_for_solve ( integer inode,
integer(8), dimension(nsteps) ptrfac,
integer nsteps,
complex, dimension(la) a,
integer(8) la,
logical flag,
integer, intent(out) ierr )

Definition at line 1202 of file cmumps_ooc.F.

1204 IMPLICIT NONE
1205 INTEGER(8) :: LA
1206 INTEGER, intent(out):: IERR
1207 COMPLEX A(LA)
1208 INTEGER INODE,NSTEPS
1209 INTEGER(8) :: PTRFAC(NSTEPS)
1210 LOGICAL FLAG
1211 INTEGER(8) FREE_SIZE
1212 INTEGER TMP,TMP_NODE,I,ZONE,J, FREE_HOLE_FLAG
1213 INTEGER WHICH
1214 INTEGER(8) :: DUMMY_SIZE
1215 dummy_size=1_8
1216 ierr = 0
1217 which=-1
1218 IF(inode_to_pos(step_ooc(inode)).LE.0)THEN
1219 WRITE(*,*)myid_ooc,': Internal error (5) in OOC ',
1220 & ' Problem in CMUMPS_FREE_FACTORS_FOR_SOLVE',
1221 & inode, step_ooc(inode), inode_to_pos(step_ooc(inode))
1222 CALL mumps_abort()
1223 ENDIF
1224 IF(size_of_block(step_ooc(inode),ooc_fct_type).EQ.0_8)THEN
1225 inode_to_pos(step_ooc(inode))=0
1226 ooc_state_node(step_ooc(inode))=already_used
1227 RETURN
1228 ENDIF
1229 CALL cmumps_solve_find_zone(inode,zone,ptrfac,nsteps)
1230 tmp=inode_to_pos(step_ooc(inode))
1231 inode_to_pos(step_ooc(inode))=-tmp
1232 pos_in_mem(tmp)=-inode
1233 ptrfac(step_ooc(inode))=-ptrfac(step_ooc(inode))
1234 IF (keep_ooc(237).eq.0) THEN
1235 IF(ooc_state_node(step_ooc(inode)).NE.permuted)THEN
1236 WRITE(*,*)myid_ooc,': INTERNAL ERROR (53) in OOC',inode,
1237 & ooc_state_node(step_ooc(inode))
1238 CALL mumps_abort()
1239 ENDIF
1240 ENDIF
1241 ooc_state_node(step_ooc(inode))=used
1242 lrlus_solve(zone)=lrlus_solve(zone)+
1243 & size_of_block(step_ooc(inode),ooc_fct_type)
1244 IF(lrlus_solve(zone).LT.0_8)THEN
1245 WRITE(*,*)myid_ooc,': Internal error (6) in OOC ',
1246 & ': LRLUS_SOLVE must be (2) > 0'
1247 CALL mumps_abort()
1248 ENDIF
1249 IF(zone.EQ.nb_z)THEN
1250 IF(inode.NE.special_root_node)THEN
1251 CALL cmumps_free_space_for_solve(a,fact_area_size,
1252 & dummy_size,ptrfac,keep_ooc(28),zone,ierr)
1253 ENDIF
1254 ELSE
1255 free_hole_flag=0
1256 IF(solve_step.EQ.0)THEN
1257 IF(tmp.GT.pos_hole_b(zone))THEN
1258 which=0
1259 ELSEIF(tmp.LT.pos_hole_t(zone))THEN
1260 which=1
1261 ENDIF
1262 ELSEIF(solve_step.EQ.1)THEN
1263 IF(tmp.LT.pos_hole_t(zone))THEN
1264 which=1
1265 ELSEIF(tmp.GT.pos_hole_b(zone))THEN
1266 which=0
1267 ENDIF
1268 ENDIF
1269 IF(which.EQ.1)THEN
1270 j=max(pdeb_solve_z(zone),pos_hole_t(zone))
1271 j=min(j,pdeb_solve_z(zone)+max_nb_nodes_for_zone-1)
1272 free_size=0_8
1273 DO i=j,tmp,-1
1274 IF((pos_in_mem(i).LT.0).AND.(pos_in_mem(i).GT.
1275 & -(n_ooc+1)*nb_z))THEN
1276 tmp_node=-pos_in_mem(i)
1277 free_size=free_size+size_of_block(step_ooc(tmp_node),
1278 & ooc_fct_type)
1279 ELSEIF(pos_in_mem(i).NE.0)THEN
1280 GOTO 666
1281 ENDIF
1282 ENDDO
1283 pos_hole_t(zone)=tmp
1284 666 CONTINUE
1285 ELSEIF(which.EQ.0)THEN
1286 j=max(pdeb_solve_z(zone),pos_hole_b(zone))
1287 j=min(j,pdeb_solve_z(zone)+max_nb_nodes_for_zone-1)
1288 free_size=0_8
1289 DO i=j,tmp
1290 IF((pos_in_mem(i).LT.0).AND.(pos_in_mem(i).GT.
1291 & -(n_ooc+1)*nb_z))THEN
1292 tmp_node=-pos_in_mem(i)
1293 free_size=free_size+size_of_block(step_ooc(tmp_node),
1294 & ooc_fct_type)
1295 ELSEIF(pos_in_mem(i).NE.0)THEN
1296 IF(j.EQ.pdeb_solve_z(zone))THEN
1297 pos_hole_b(zone)=-9999
1298 lrlu_solve_b(zone)=0_8
1299 current_pos_b(zone)=-9999
1300 ENDIF
1301 GOTO 777
1302 ENDIF
1303 ENDDO
1304 pos_hole_b(zone)=tmp
1305 777 CONTINUE
1306 ENDIF
1307 ierr=0
1308 ENDIF
1309 IF((nb_z.GT.1).AND.flag)THEN
1310 CALL cmumps_solve_try_zone_for_read(zone)
1311 IF((lrlus_solve(zone).GE.min_size_read).OR.
1312 & (lrlus_solve(zone).GE.
1313 & int(0.3e0*real(size_solve_z(zone)),8)))THEN
1314 CALL cmumps_submit_read_for_z(a,la,ptrfac,nsteps,ierr)
1315 IF(ierr.LT.0)THEN
1316 RETURN
1317 ENDIF
1318 ELSE
1319 CALL cmumps_solve_select_zone(zone)
1320 ENDIF
1321 ENDIF
1322 RETURN
#define mumps_abort
Definition VE_Metis.h:25
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21

◆ cmumps_free_space_for_solve()

subroutine cmumps_ooc::cmumps_free_space_for_solve ( complex, dimension(la) a,
integer(8) la,
integer(8) requested_size,
integer(8), dimension(nsteps) ptrfac,
integer nsteps,
integer zone,
integer, intent(out) ierr )

Definition at line 1957 of file cmumps_ooc.F.

1959 IMPLICIT NONE
1960 INTEGER(8) :: LA, REQUESTED_SIZE
1961 INTEGER NSTEPS,ZONE
1962 INTEGER, intent(out) :: IERR
1963 INTEGER(8) :: PTRFAC(NSTEPS)
1964 COMPLEX A(LA)
1965 INTEGER (8) :: APOS_FIRST_FREE,
1966 & SIZE_HOLE,
1967 & FREE_HOLE,
1968 & FREE_HOLE_POS
1969 INTEGER J,I,TMP_NODE, NB_FREE, IPOS_FIRST_FREE
1970 INTEGER(8) :: K8, AREA_POINTER
1971 INTEGER FREE_HOLE_FLAG
1972 ierr=0
1973 IF(lrlu_solve_t(zone).EQ.size_solve_z(zone))THEN
1974 RETURN
1975 ENDIF
1976 area_pointer=ideb_solve_z(zone)
1977 size_hole=0_8
1978 DO i=pdeb_solve_z(zone),current_pos_t(zone)-1
1979 IF((pos_in_mem(i).LE.0).AND.
1980 & (pos_in_mem(i).GT.-((n_ooc+1)*nb_z))) GOTO 666
1981 tmp_node=abs(pos_in_mem(i))
1982 IF(tmp_node.GT.((n_ooc+1)*nb_z))THEN
1983 tmp_node=tmp_node-((n_ooc+1)*nb_z)
1984 ENDIF
1985 area_pointer=area_pointer+
1986 & abs(size_of_block(step_ooc(tmp_node),ooc_fct_type))
1987 ENDDO
1988 666 CONTINUE
1989 IF((i.EQ.current_pos_t(zone)-1).AND.
1990 & (pdeb_solve_z(zone).NE.current_pos_t(zone)-1))THEN
1991 IF((pos_in_mem(i).GT.0).OR.
1992 & (pos_in_mem(i).LT.-((n_ooc+1)*nb_z)))THEN
1993 WRITE(*,*)myid_ooc,': Internal error (25) in OOC ',
1994 & ': There are no free blocks ',
1995 & 'in CMUMPS_FREE_SPACE_FOR_SOLVE',pdeb_solve_z(zone),
1996 & current_pos_t(zone)
1997 CALL mumps_abort()
1998 ENDIF
1999 ENDIF
2000 IF(pos_in_mem(i).EQ.0)THEN
2001 apos_first_free=area_pointer
2002 free_hole_pos=area_pointer
2003 ELSE
2004 tmp_node=abs(pos_in_mem(i))
2005 apos_first_free=abs(ptrfac(step_ooc(tmp_node)))
2006 ENDIF
2007 IF(pos_in_mem(pdeb_solve_z(zone)).NE.0)THEN
2008 IF(pos_in_mem(pdeb_solve_z(zone)).LT.-((n_ooc+1)*nb_z))THEN
2009 tmp_node=abs(pos_in_mem(pdeb_solve_z(zone)))-
2010 & ((n_ooc+1)*nb_z)
2011 CALL mumps_wait_request(io_req(step_ooc(tmp_node)),ierr)
2012 IF(ierr.LT.0)THEN
2013 RETURN
2014 ENDIF
2015 req_act=req_act-1
2016 CALL cmumps_solve_update_pointers(
2017 & io_req(step_ooc(tmp_node)),ptrfac,nsteps)
2018 ELSE
2019 tmp_node=abs(pos_in_mem(pdeb_solve_z(zone)))
2020 ENDIF
2021 IF(abs(ptrfac(step_ooc(tmp_node))).NE.ideb_solve_z(zone))THEN
2022 IF((pos_in_mem(i).NE.0).OR.(i.EQ.current_pos_t(zone)))THEN
2023 size_hole=abs(ptrfac(step_ooc(tmp_node)))-
2024 & ideb_solve_z(zone)
2025 ENDIF
2026 apos_first_free=ideb_solve_z(zone)
2027 IF(pos_in_mem(pdeb_solve_z(zone)).GT.0)THEN
2028 DO j=pdeb_solve_z(zone),i-1
2029 tmp_node=pos_in_mem(j)
2030 IF(tmp_node.LE.0)THEN
2031 IF(tmp_node.LT.-((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)
2035 IF(ierr.LT.0)THEN
2036 RETURN
2037 ENDIF
2038 req_act=req_act-1
2039 CALL cmumps_solve_update_pointers(
2040 & io_req(step_ooc(tmp_node)),ptrfac,nsteps)
2041 tmp_node=pos_in_mem(j)
2042 ELSE
2043 WRITE(*,*)myid_ooc,': Internal error (26) in OOC ',
2044 & ' CMUMPS_FREE_SPACE_FOR_SOLVE',tmp_node,
2045 & j,i-1,(n_ooc+1)*nb_z
2046 CALL mumps_abort()
2047 ENDIF
2048 ENDIF
2049 DO k8=1_8,
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)
2053 ENDDO
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)
2057 ENDDO
2058 ENDIF
2059 ENDIF
2060 ENDIF
2061 nb_free=0
2062 free_hole=0_8
2063 free_hole_flag=0
2064 DO j=i,current_pos_t(zone)-1
2065 tmp_node=abs(pos_in_mem(j))
2066 IF(pos_in_mem(j).LT.-((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)
2069 IF(ierr.LT.0)THEN
2070 RETURN
2071 ENDIF
2072 req_act=req_act-1
2073 CALL cmumps_solve_update_pointers(
2074 & io_req(step_ooc(tmp_node)),ptrfac,nsteps)
2075 tmp_node=abs(pos_in_mem(j))
2076 ENDIF
2077 IF(pos_in_mem(j).GT.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)
2081 ENDDO
2082 IF(free_hole_flag.EQ.1)THEN
2083 free_hole=abs(ptrfac(step_ooc(tmp_node)))-
2084 & free_hole_pos
2085 free_hole_flag=0
2086 size_hole=size_hole+free_hole
2087 ENDIF
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 ELSEIF(pos_in_mem(j).EQ.0)THEN
2094 free_hole_flag=1
2095 nb_free=nb_free+1
2096 ELSE
2097 nb_free=nb_free+1
2098 IF(free_hole_flag.EQ.1)THEN
2099 free_hole=abs(ptrfac(step_ooc(tmp_node)))-
2100 & free_hole_pos
2101 free_hole_flag=0
2102 size_hole=size_hole+free_hole
2103 ENDIF
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),
2107 & ooc_fct_type)
2108 ptrfac(step_ooc(abs(pos_in_mem(j))))=-77777_8
2109 ENDIF
2110 ENDDO
2111 IF(free_hole_flag.EQ.1)THEN
2112 free_hole=posfac_solve(zone)-free_hole_pos
2113 free_hole_flag=0
2114 size_hole=size_hole+free_hole
2115 ENDIF
2116 ipos_first_free=i
2117 DO j=i,current_pos_t(zone)-1
2118 IF(pos_in_mem(j).LT.0)THEN
2119 tmp_node=abs(pos_in_mem(j))
2120 inode_to_pos(step_ooc(tmp_node))=0
2121 pos_in_mem(j)=0
2122 ooc_state_node(step_ooc(tmp_node))=already_used
2123 ELSEIF(pos_in_mem(j).GT.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
2128 ENDIF
2129 ENDDO
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 IF(lrlu_solve_t(zone).NE.lrlus_solve(zone))THEN
2139 WRITE(*,*)myid_ooc,': Internal error (27) in OOC ',
2140 & lrlu_solve_t(zone),
2141 & lrlus_solve(zone)
2142 CALL mumps_abort()
2143 ENDIF
2144 lrlu_solve_t(zone)=lrlus_solve(zone)
2145 IF(lrlus_solve(zone).LT.0_8)THEN
2146 WRITE(*,*)myid_ooc,': Internal error (28) in OOC ',
2147 & ' LRLUS_SOLVE must be (4) > 0'
2148 CALL mumps_abort()
2149 ENDIF
2150 IF(posfac_solve(zone).LT.ideb_solve_z(zone))THEN
2151 WRITE(*,*)myid_ooc,': Internal error (29) in OOC ',
2152 & posfac_solve(zone),ideb_solve_z(zone)
2153 CALL mumps_abort()
2154 ENDIF
2155 IF(posfac_solve(zone).NE.(ideb_solve_z(zone)+size_solve_z(zone)-
2156 & lrlus_solve(zone)))THEN
2157 WRITE(*,*)myid_ooc,': Internal error (30) in OOC ',
2158 & ' Problem avec debut POSFAC_SOLVE',
2159 & posfac_solve(zone),(size_solve_z(zone)-
2160 & lrlus_solve(zone))+ideb_solve_z(zone),lrlus_solve(zone)
2161 CALL mumps_abort()
2162 ENDIF
2163 IF(posfac_solve(zone).GT.
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
2168 CALL mumps_abort()
2169 ENDIF
2170 RETURN

◆ cmumps_get_bottom_area_space()

subroutine cmumps_ooc::cmumps_get_bottom_area_space ( complex, dimension(la) a,
integer (8) la,
integer (8) requested_size,
integer (8), dimension(nsteps) ptrfac,
integer nsteps,
integer zone,
integer flag,
integer, intent(out) ierr )

Definition at line 1717 of file cmumps_ooc.F.

1719 IMPLICIT NONE
1720 INTEGER NSTEPS,ZONE,FLAG
1721 INTEGER (8) :: REQUESTED_SIZE
1722 INTEGER (8) :: LA
1723 INTEGER (8) :: PTRFAC(NSTEPS)
1724 COMPLEX A(LA)
1725 INTEGER(8) :: FREE_SIZE, FREE_HOLE_POS, FREE_HOLE
1726 INTEGER I,J,TMP_NODE,FREE_HOLE_FLAG
1727 INTEGER, intent(out) :: IERR
1728 ierr=0
1729 flag=0
1730 IF(lrlu_solve_b(zone).EQ.size_solve_z(zone))THEN
1731 GOTO 50
1732 ENDIF
1733 IF(pos_hole_b(zone).EQ.-9999)THEN
1734 GOTO 50
1735 ENDIF
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)
1738 free_size = 0_8
1739 DO i=pos_hole_b(zone)+1,j
1740 IF((pos_in_mem(i).LT.0).AND.(pos_in_mem(i).GT.
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),
1744 & ooc_fct_type)
1745 ELSEIF(pos_in_mem(i).NE.0)THEN
1746 EXIT
1747 ENDIF
1748 ENDDO
1749 pos_hole_b(zone)=i-1
1750 IF((pos_hole_t(zone).EQ.pdeb_solve_z(zone)).OR.
1751 & (pos_hole_t(zone).LE.pos_hole_b(zone)).OR.
1752 & (pos_hole_t(zone).EQ.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)
1757 ENDIF
1758 free_hole=0_8
1759 free_size=0_8
1760 free_hole_flag=0
1761 free_hole_pos=ideb_solve_z(zone)
1762 IF(pos_hole_b(zone).EQ.-9999)THEN
1763 GOTO 50
1764 ENDIF
1765 DO i=pdeb_solve_z(zone),pos_hole_b(zone)
1766 IF((pos_in_mem(i).LE.0).AND.(pos_in_mem(i).GT.
1767 & -(n_ooc+1)*nb_z))THEN
1768 tmp_node=-pos_in_mem(i)
1769 IF(tmp_node.NE.0)THEN
1770 IF(i.EQ.pdeb_solve_z(zone))THEN
1771 IF(abs(ptrfac(step_ooc(tmp_node))).NE.
1772 & ideb_solve_z(zone))THEN
1773 free_size=free_size+abs(ptrfac(step_ooc(tmp_node)))
1774 & -ideb_solve_z(zone)
1775 ENDIF
1776 ENDIF
1777 IF(free_hole_flag.EQ.1)THEN
1778 free_hole=abs(ptrfac(step_ooc(tmp_node)))-
1779 & free_hole_pos
1780 free_hole_flag=0
1781 free_size=free_size+free_hole
1782 ENDIF
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),
1789 & ooc_fct_type)
1790 ELSE
1791 free_hole_flag=1
1792 ENDIF
1793 pos_in_mem(i)=0
1794 ELSEIF(pos_in_mem(i).NE.0)THEN
1795 WRITE(*,*)myid_ooc,': Internal error (14) in OOC ',
1796 & ' CMUMPS_GET_BOTTOM_AREA_SPACE',
1797 & current_pos_t(zone)-1,pos_hole_b(zone),i,pos_in_mem(i)
1798 CALL mumps_abort()
1799 ENDIF
1800 ENDDO
1801 IF(free_hole_flag.EQ.1)THEN
1802 IF(pos_hole_b(zone)+1.LT.current_pos_t(zone)-1)THEN
1803 i=pos_hole_b(zone)+1
1804 tmp_node=abs(pos_in_mem(i))
1805 IF(tmp_node.GT.(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)
1808 IF(ierr.LT.0)THEN
1809 WRITE(*,*)myid_ooc,': Internal error (15) in OOC ',
1810 & err_str_ooc(1:dim_err_str_ooc)
1811 CALL mumps_abort()
1812 RETURN
1813 ENDIF
1814 req_act=req_act-1
1815 CALL cmumps_solve_update_pointers(
1816 & io_req(step_ooc(tmp_node)),ptrfac,nsteps)
1817 free_hole=abs(ptrfac(step_ooc(tmp_node)))-free_hole_pos
1818 ELSEIF(tmp_node.EQ.0)THEN
1819 DO j=i,current_pos_t(zone)-1
1820 IF(pos_in_mem(j).NE.0) EXIT
1821 ENDDO
1822 IF(pos_in_mem(j).LT.0)THEN
1823 WRITE(*,*)myid_ooc,': Internal error (16) in OOC ',
1824 & ' CMUMPS_GET_BOTTOM_AREA_SPACE'
1825 CALL mumps_abort()
1826 ENDIF
1827 IF(j.LE.current_pos_t(zone)-1)THEN
1828 tmp_node=pos_in_mem(j)
1829 free_hole=abs(ptrfac(step_ooc(tmp_node)))-
1830 & free_hole_pos
1831 ELSE
1832 free_hole=posfac_solve(zone)-free_hole_pos
1833 ENDIF
1834 ELSEIF(tmp_node.LT.0)THEN
1835 WRITE(*,*)myid_ooc,': Internal error (17) in OOC ',
1836 & ' CMUMPS_GET_BOTTOM_AREA_SPACE'
1837 CALL mumps_abort()
1838 ELSE
1839 free_hole=abs(ptrfac(step_ooc(tmp_node)))-
1840 & free_hole_pos
1841 ENDIF
1842 ELSE
1843 free_hole=posfac_solve(zone)-free_hole_pos
1844 ENDIF
1845 free_size=free_size+free_hole
1846 ENDIF
1847 lrlu_solve_b(zone)=free_size
1848 IF(pos_hole_b(zone).LT.current_pos_t(zone)-1)THEN
1849 tmp_node=pos_in_mem(pos_hole_b(zone)+1)
1850 IF(tmp_node.LT.-(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)
1853 IF(ierr.LT.0)THEN
1854 WRITE(*,*)myid_ooc,': Internal error (18) in OOC ',
1855 & err_str_ooc(1:dim_err_str_ooc)
1856 CALL mumps_abort()
1857 RETURN
1858 ENDIF
1859 req_act=req_act-1
1860 CALL cmumps_solve_update_pointers(
1861 & io_req(step_ooc(tmp_node)),ptrfac,nsteps)
1862 ENDIF
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))
1866 ENDIF
1867 current_pos_b(zone)=pos_hole_b(zone)
1868 50 CONTINUE
1869 IF((pos_hole_b(zone).EQ.-9999).AND.
1870 & (lrlu_solve_b(zone).NE.0_8))THEN
1871 WRITE(*,*)myid_ooc,': Internal error (19) in OOC ',
1872 & 'CMUMPS_GET_BOTTOM_AREA_SPACE'
1873 CALL mumps_abort()
1874 ENDIF
1875 IF((requested_size.LE.lrlu_solve_b(zone)).AND.
1876 & (pos_hole_b(zone).NE.-9999))THEN
1877 flag=1
1878 ELSE
1879 flag=0
1880 ENDIF

◆ cmumps_get_top_area_space()

subroutine cmumps_ooc::cmumps_get_top_area_space ( complex, dimension(la) a,
integer(8) la,
integer(8) requested_size,
integer(8), dimension(nsteps) ptrfac,
integer nsteps,
integer zone,
integer flag,
integer, intent(out) ierr )

Definition at line 1584 of file cmumps_ooc.F.

1586 IMPLICIT NONE
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
1591 COMPLEX A(LA)
1592 INTEGER I,TMP_NODE,FREE_HOLE_FLAG, J
1593 INTEGER, intent(out)::IERR
1594 ierr=0
1595 flag=0
1596 IF(lrlu_solve_t(zone).EQ.size_solve_z(zone).AND.
1597 & (.NOT.(current_pos_t(zone)
1598 & .GT.pdeb_solve_z(zone)+max_nb_nodes_for_zone-1)))THEN
1599 GOTO 50
1600 ENDIF
1601 j=max(pos_hole_b(zone),pdeb_solve_z(zone))
1602 j=min(j,pdeb_solve_z(zone)+max_nb_nodes_for_zone-1)
1603 DO i=pos_hole_t(zone)-1,j,-1
1604 IF((pos_in_mem(i).LT.0).AND.(pos_in_mem(i).GT.
1605 & -(n_ooc+1)*nb_z))THEN
1606 tmp_node=-pos_in_mem(i)
1607 ELSEIF(pos_in_mem(i).NE.0)THEN
1608 EXIT
1609 ENDIF
1610 ENDDO
1611 pos_hole_t(zone)=i+1
1612 IF((pos_hole_t(zone).EQ.pdeb_solve_z(zone)).OR.
1613 & (pos_hole_t(zone).LE.pos_hole_b(zone)).OR.
1614 & (pos_hole_t(zone).EQ.pos_hole_b(zone)+1))THEN
1615 current_pos_b(zone)=-9999
1616 pos_hole_b(zone)=-9999
1617 lrlu_solve_b(zone)=0_8
1618 pos_hole_t(zone)=pdeb_solve_z(zone)
1619 ENDIF
1620 free_hole=0_8
1621 free_size=0_8
1622 free_hole_flag=0
1623 free_hole_pos=posfac_solve(zone)
1624 DO i=current_pos_t(zone)-1,pos_hole_t(zone),-1
1625 IF((pos_in_mem(i).LT.0).AND.(pos_in_mem(i).GT.
1626 & -(n_ooc+1)*nb_z))THEN
1627 tmp_node=-pos_in_mem(i)
1628 IF(free_hole_flag.EQ.1)THEN
1629 free_hole=free_hole_pos-
1630 & (abs(ptrfac(step_ooc(tmp_node)))+
1631 & size_of_block(step_ooc(tmp_node),ooc_fct_type))
1632 free_hole_flag=0
1633 free_size=free_size+free_hole
1634 ENDIF
1635 free_hole_pos=abs(ptrfac(step_ooc(tmp_node)))
1636 ptrfac(step_ooc(tmp_node))=-777777_8
1637 inode_to_pos(step_ooc(tmp_node))=0
1638 ooc_state_node(step_ooc(tmp_node))=already_used
1639 pos_in_mem(i)=0
1640 free_size=free_size+size_of_block(step_ooc(tmp_node),
1641 & ooc_fct_type)
1642 ELSEIF(pos_in_mem(i).EQ.0)THEN
1643 free_hole_flag=1
1644 ELSEIF(pos_in_mem(i).NE.0)THEN
1645 WRITE(*,*)myid_ooc,': Internal error (10) in OOC ',
1646 & ' CMUMPS_GET_TOP_AREA_SPACE',
1647 & current_pos_t(zone)-1,pos_hole_t(zone),i
1648 CALL mumps_abort()
1649 ENDIF
1650 ENDDO
1651 IF(pos_hole_t(zone).EQ.pdeb_solve_z(zone))THEN
1652 IF(free_hole_flag.EQ.0)THEN
1653 free_hole_flag=1
1654 ENDIF
1655 ENDIF
1656 IF(free_hole_flag.EQ.1)THEN
1657 IF(pos_hole_t(zone)-1.GT.pdeb_solve_z(zone))THEN
1658 i=pos_hole_t(zone)-1
1659 tmp_node=abs(pos_in_mem(i))
1660 IF(tmp_node.GT.(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)
1663 IF(ierr.LT.0)THEN
1664 WRITE(*,*)myid_ooc,': Internal error (11) in OOC ',
1665 & err_str_ooc(1:dim_err_str_ooc)
1666 CALL mumps_abort()
1667 RETURN
1668 ENDIF
1669 req_act=req_act-1
1670 CALL cmumps_solve_update_pointers(
1671 & io_req(step_ooc(tmp_node)),ptrfac,nsteps)
1672 free_hole=free_hole_pos-
1673 & (abs(ptrfac(step_ooc(tmp_node)))+
1674 & size_of_block(step_ooc(tmp_node),ooc_fct_type))
1675 ELSEIF(tmp_node.EQ.0)THEN
1676 DO j=i,pdeb_solve_z(zone),-1
1677 IF(pos_in_mem(j).NE.0) EXIT
1678 ENDDO
1679 IF(pos_in_mem(j).LT.0)THEN
1680 WRITE(*,*)myid_ooc,': Internal error (12) in OOC ',
1681 & ' CMUMPS_GET_TOP_AREA_SPACE'
1682 CALL mumps_abort()
1683 ENDIF
1684 IF(j.GE.pdeb_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))
1689 ELSE
1690 free_hole=free_hole_pos-ideb_solve_z(zone)
1691 ENDIF
1692 ELSEIF(tmp_node.LT.0)THEN
1693 WRITE(*,*)myid_ooc,': Internal error (13) in OOC',
1694 & ' CMUMPS_GET_TOP_AREA_SPACE'
1695 CALL mumps_abort()
1696 ELSE
1697 free_hole=free_hole_pos-
1698 & (abs(ptrfac(step_ooc(tmp_node)))+
1699 & size_of_block(step_ooc(tmp_node),ooc_fct_type))
1700 ENDIF
1701 ELSE
1702 free_hole=free_hole_pos-ideb_solve_z(zone)
1703 ENDIF
1704 free_size=free_size+free_hole
1705 ENDIF
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
1709 50 CONTINUE
1710 IF(requested_size.LE.lrlu_solve_t(zone))THEN
1711 flag=1
1712 ELSE
1713 flag=0
1714 ENDIF
1715 RETURN

◆ cmumps_init_fact_area_size_s()

subroutine cmumps_ooc::cmumps_init_fact_area_size_s ( integer(8) la)

Definition at line 108 of file cmumps_ooc.F.

109 IMPLICIT NONE
110 INTEGER(8) :: LA
111 fact_area_size=la

◆ cmumps_initiate_read_ops()

subroutine, public cmumps_ooc::cmumps_initiate_read_ops ( complex, dimension(la) a,
integer(8) la,
integer(8), dimension(nsteps) ptrfac,
integer nsteps,
integer ierr )

Definition at line 871 of file cmumps_ooc.F.

872 IMPLICIT NONE
873 INTEGER NSTEPS,IERR
874 INTEGER(8) :: LA
875 COMPLEX A(LA)
876 INTEGER(8) :: PTRFAC(NSTEPS)
877 INTEGER I
878 ierr=0
879 IF(nb_z.GT.1)THEN
880 IF(strat_io_async)THEN
881 DO i=1,nb_z-1
882 CALL cmumps_submit_read_for_z(a,la,ptrfac,nsteps,ierr)
883 IF(ierr.LT.0)THEN
884 RETURN
885 ENDIF
886 ENDDO
887 ELSE
888 CALL cmumps_submit_read_for_z(a,la,ptrfac,nsteps,ierr)
889 IF(ierr.LT.0)THEN
890 RETURN
891 ENDIF
892 ENDIF
893 ENDIF
894 RETURN

◆ cmumps_is_there_free_space()

logical function, public cmumps_ooc::cmumps_is_there_free_space ( integer inode,
integer zone )

Definition at line 100 of file cmumps_ooc.F.

101 IMPLICIT NONE
102 INTEGER INODE,ZONE
103 LOGICAL CMUMPS_IS_THERE_FREE_SPACE
104 cmumps_is_there_free_space=(lrlus_solve(zone).GE.
105 & size_of_block(step_ooc(inode),ooc_fct_type))
106 RETURN

◆ cmumps_new_factor()

subroutine, public cmumps_ooc::cmumps_new_factor ( integer inode,
integer(8), dimension(keep(28)) ptrfac,
integer, dimension(500) keep,
integer(8), dimension(150) keep8,
complex, dimension(la) a,
integer(8) la,
integer(8) size,
integer ierr )

Definition at line 283 of file cmumps_ooc.F.

286 IMPLICIT NONE
287 INTEGER INODE,KEEP(500)
288 INTEGER(8) :: LA
289 INTEGER(8) KEEP8(150)
290 INTEGER(8) :: PTRFAC(KEEP(28)), SIZE
291 COMPLEX A(LA)
292 INTEGER IERR,NODE,ASYNC,REQUEST
293 LOGICAL IO_C
294 INTEGER ADDR_INT1,ADDR_INT2
295 INTEGER TYPE
296 INTEGER SIZE_INT1,SIZE_INT2
297 TYPE=fct
298 IF(strat_io_async)THEN
299 async=1
300 ELSE
301 async=0
302 ENDIF
303 ierr=0
304 io_c=.true.
305 size_of_block(step_ooc(inode),ooc_fct_type)=SIZE
306 max_size_factor_ooc=max(max_size_factor_ooc,size)
307 ooc_vaddr(step_ooc(inode),ooc_fct_type)=ooc_vaddr_ptr
308 ooc_vaddr_ptr=ooc_vaddr_ptr+SIZE
309 tmp_size_fact=tmp_size_fact+SIZE
310 tmp_nb_nodes=tmp_nb_nodes+1
311 IF(tmp_size_fact.GT.size_zone_solve)THEN
312 max_nb_nodes_for_zone=max(max_nb_nodes_for_zone,tmp_nb_nodes)
313 tmp_size_fact=0_8
314 tmp_nb_nodes=0
315 ENDIF
316 IF (.NOT. with_buf) THEN
317 CALL mumps_ooc_convert_bigintto2int(addr_int1,addr_int2,
318 & ooc_vaddr(step_ooc(inode),ooc_fct_type))
319 CALL mumps_ooc_convert_bigintto2int(size_int1,size_int2,
320 & size)
321 CALL mumps_low_level_write_ooc_c(low_level_strat_io,
322 & a(ptrfac(step_ooc(inode))),size_int1,size_int2,
323 & inode,request,TYPE,ADDR_INT1,ADDR_INT2,IERR)
324 IF(ierr.LT.0)THEN
325 IF (icntl1.GT.0)
326 & WRITE(icntl1,*)myid_ooc,': ',err_str_ooc(1:dim_err_str_ooc)
327 RETURN
328 ENDIF
329 IF(i_cur_hbuf_nextpos(ooc_fct_type).GT.keep_ooc(28))THEN
330 WRITE(*,*)myid_ooc,': Internal error (37) in OOC '
331 CALL mumps_abort()
332 ENDIF
333 ooc_inode_sequence(i_cur_hbuf_nextpos(ooc_fct_type),
334 & ooc_fct_type)=inode
335 i_cur_hbuf_nextpos(ooc_fct_type)=
336 & i_cur_hbuf_nextpos(ooc_fct_type)+1
337 ELSE
338 IF(size.LE.hbuf_size)THEN
340 & (a(ptrfac(step_ooc(inode))),SIZE,ierr)
341 ooc_inode_sequence(i_cur_hbuf_nextpos(ooc_fct_type),
342 & ooc_fct_type) = inode
343 i_cur_hbuf_nextpos(ooc_fct_type) =
344 & i_cur_hbuf_nextpos(ooc_fct_type) + 1
345 ptrfac(step_ooc(inode))=-777777_8
346 RETURN
347 ELSE
348 CALL cmumps_ooc_do_io_and_chbuf(ooc_fct_type,ierr)
349 IF(ierr.LT.0)THEN
350 RETURN
351 ENDIF
352 CALL cmumps_ooc_do_io_and_chbuf(ooc_fct_type,ierr)
353 IF(ierr.LT.0)THEN
354 RETURN
355 ENDIF
356 CALL mumps_ooc_convert_bigintto2int(addr_int1,addr_int2,
357 & ooc_vaddr(step_ooc(inode),ooc_fct_type))
358 CALL mumps_ooc_convert_bigintto2int(size_int1,size_int2,
359 & size)
360 CALL mumps_low_level_write_ooc_c(low_level_strat_io,
361 & a(ptrfac(step_ooc(inode))),size_int1,size_int2,
362 & inode,request,TYPE,ADDR_INT1,ADDR_INT2,IERR)
363 IF(ierr.LT.0)THEN
364 IF (icntl1.GT.0)
365 & WRITE(*,*)myid_ooc,': ',err_str_ooc(1:dim_err_str_ooc)
366 RETURN
367 ENDIF
368 IF(i_cur_hbuf_nextpos(ooc_fct_type).GT.keep_ooc(28))THEN
369 WRITE(*,*)myid_ooc,': Internal error (38) in OOC '
370 CALL mumps_abort()
371 ENDIF
372 ooc_inode_sequence(i_cur_hbuf_nextpos(ooc_fct_type),
373 & ooc_fct_type)=inode
374 i_cur_hbuf_nextpos(ooc_fct_type)=
375 & i_cur_hbuf_nextpos(ooc_fct_type)+1
376 CALL cmumps_ooc_next_hbuf(ooc_fct_type)
377 ENDIF
378 END IF
379 node=-9999
380 ptrfac(step_ooc(inode))=-777777_8
381 IF(strat_io_async)THEN
382 ierr=0
383 CALL mumps_wait_request(request,ierr)
384 IF(ierr.LT.0)THEN
385 IF (icntl1 .GT. 0)
386 & WRITE(icntl1,*)myid_ooc,': ',err_str_ooc(1:dim_err_str_ooc)
387 RETURN
388 ENDIF
389 ENDIF
390 RETURN
subroutine mumps_ooc_convert_bigintto2int(int1, int2, bigint)
subroutine cmumps_ooc_next_hbuf(typef_arg)
integer, dimension(:), allocatable i_cur_hbuf_nextpos
subroutine cmumps_ooc_copy_data_to_buffer(block, size_of_block, ierr)

◆ cmumps_ooc_clean_files()

subroutine cmumps_ooc::cmumps_ooc_clean_files ( type(cmumps_struc), target id,
integer ierr )

Definition at line 522 of file cmumps_ooc.F.

524 IMPLICIT NONE
525 EXTERNAL mumps_ooc_remove_file_c
526 TYPE(CMUMPS_STRUC), TARGET :: id
527 INTEGER IERR
528 INTEGER I,J,I1,K
529 CHARACTER(len=1):: TMP_NAME(350)
530 ierr=0
531 k=1
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)
539 ENDDO
540 CALL mumps_ooc_remove_file_c(ierr, tmp_name(1))
541 IF(ierr.LT.0)THEN
542 IF (icntl1.GT.0)THEN
543 WRITE(icntl1,*)myid_ooc,': ',
544 & err_str_ooc(1:dim_err_str_ooc)
545 RETURN
546 ENDIF
547 ENDIF
548 k=k+1
549 ENDDO
550 ENDDO
551 ENDIF
552 ENDIF
553 IF(associated(id%OOC_FILE_NAMES))THEN
554 DEALLOCATE(id%OOC_FILE_NAMES)
555 NULLIFY(id%OOC_FILE_NAMES)
556 ENDIF
557 IF(associated(id%OOC_FILE_NAME_LENGTH))THEN
558 DEALLOCATE(id%OOC_FILE_NAME_LENGTH)
559 NULLIFY(id%OOC_FILE_NAME_LENGTH)
560 ENDIF
561 IF(associated(id%OOC_NB_FILES))THEN
562 DEALLOCATE(id%OOC_NB_FILES)
563 NULLIFY(id%OOC_NB_FILES)
564 ENDIF
565 RETURN

◆ cmumps_ooc_clean_pending()

subroutine cmumps_ooc::cmumps_ooc_clean_pending ( integer, intent(out) ierr)

Definition at line 445 of file cmumps_ooc.F.

447 IMPLICIT NONE
448 INTEGER, intent(out):: IERR
449 ierr=0
450 IF (with_buf) THEN
452 IF(ierr.LT.0)THEN
453 RETURN
454 ENDIF
455 END IF
456 RETURN
subroutine cmumps_ooc_buf_clean_pending(ierr)

◆ cmumps_ooc_end_facto()

subroutine cmumps_ooc::cmumps_ooc_end_facto ( type(cmumps_struc), target id,
integer, intent(out) ierr )

Definition at line 458 of file cmumps_ooc.F.

461 IMPLICIT NONE
462 TYPE(CMUMPS_STRUC), TARGET :: id
463 INTEGER, intent(out) :: IERR
464 INTEGER I,SOLVE_OR_FACTO
465 ierr=0
466 IF (id%KEEP(400).GT.0) THEN
467!$ CALL OMP_DESTROY_LOCK( LOCK_FOR_L0OMP )
468 ENDIF
469 IF(with_buf)THEN
470 CALL cmumps_end_ooc_buf()
471 ENDIF
472 IF(associated(keep_ooc))THEN
473 NULLIFY(keep_ooc)
474 ENDIF
475 IF(associated(step_ooc))THEN
476 NULLIFY(step_ooc)
477 ENDIF
478 IF(associated(procnode_ooc))THEN
479 NULLIFY(procnode_ooc)
480 ENDIF
481 IF(associated(ooc_inode_sequence))THEN
482 NULLIFY(ooc_inode_sequence)
483 ENDIF
484 IF(associated(total_nb_ooc_nodes))THEN
485 NULLIFY(total_nb_ooc_nodes)
486 ENDIF
487 IF(associated(size_of_block))THEN
488 NULLIFY(size_of_block)
489 ENDIF
490 IF(associated(ooc_vaddr))THEN
491 NULLIFY(ooc_vaddr)
492 ENDIF
493 CALL mumps_ooc_end_write_c(ierr)
494 IF(ierr.LT.0)THEN
495 IF (icntl1 .GT. 0)
496 & WRITE(icntl1,*)myid_ooc,': ',err_str_ooc(1:dim_err_str_ooc)
497 GOTO 500
498 ENDIF
499 id%OOC_MAX_NB_NODES_FOR_ZONE=max(max_nb_nodes_for_zone,
500 & tmp_nb_nodes)
501 IF(allocated(i_cur_hbuf_nextpos))THEN
502 DO i=1,ooc_nb_file_type
503 id%OOC_TOTAL_NB_NODES(i)=i_cur_hbuf_nextpos(i)-1
504 ENDDO
505 DEALLOCATE(i_cur_hbuf_nextpos)
506 ENDIF
507 id%KEEP8(20)=max_size_factor_ooc
508 CALL cmumps_struc_store_file_name(id,ierr)
509 IF(ierr.LT.0)THEN
510 GOTO 500
511 ENDIF
512 500 CONTINUE
513 solve_or_facto=0
514 CALL mumps_clean_io_data_c(myid_ooc,solve_or_facto,ierr)
515 IF(ierr.LT.0)THEN
516 IF (icntl1.GT.0)
517 & WRITE(icntl1,*)myid_ooc,': ',err_str_ooc(1:dim_err_str_ooc)
518 RETURN
519 ENDIF
520 RETURN
subroutine cmumps_end_ooc_buf()

◆ cmumps_ooc_end_solve()

subroutine, public cmumps_ooc::cmumps_ooc_end_solve ( integer, intent(out) ierr)

Definition at line 2533 of file cmumps_ooc.F.

2534 IMPLICIT NONE
2535 INTEGER SOLVE_OR_FACTO
2536 INTEGER, intent(out) :: IERR
2537 ierr=0
2538 IF(allocated(lrlus_solve))THEN
2539 DEALLOCATE(lrlus_solve)
2540 ENDIF
2541 IF(allocated(lrlu_solve_t))THEN
2542 DEALLOCATE(lrlu_solve_t)
2543 ENDIF
2544 IF(allocated(lrlu_solve_b))THEN
2545 DEALLOCATE(lrlu_solve_b)
2546 ENDIF
2547 IF(allocated(posfac_solve))THEN
2548 DEALLOCATE(posfac_solve)
2549 ENDIF
2550 IF(allocated(ideb_solve_z))THEN
2551 DEALLOCATE(ideb_solve_z)
2552 ENDIF
2553 IF(allocated(pdeb_solve_z))THEN
2554 DEALLOCATE(pdeb_solve_z)
2555 ENDIF
2556 IF(allocated(size_solve_z))THEN
2557 DEALLOCATE(size_solve_z)
2558 ENDIF
2559 IF(allocated(current_pos_t))THEN
2560 DEALLOCATE(current_pos_t)
2561 ENDIF
2562 IF(allocated(current_pos_b))THEN
2563 DEALLOCATE(current_pos_b)
2564 ENDIF
2565 IF(allocated(pos_hole_t))THEN
2566 DEALLOCATE(pos_hole_t)
2567 ENDIF
2568 IF(allocated(pos_hole_b))THEN
2569 DEALLOCATE(pos_hole_b)
2570 ENDIF
2571 IF(allocated(ooc_state_node))THEN
2572 DEALLOCATE(ooc_state_node)
2573 ENDIF
2574 IF(allocated(pos_in_mem))THEN
2575 DEALLOCATE(pos_in_mem)
2576 ENDIF
2577 IF(allocated(inode_to_pos))THEN
2578 DEALLOCATE(inode_to_pos)
2579 ENDIF
2580 IF(allocated(io_req))THEN
2581 DEALLOCATE(io_req)
2582 ENDIF
2583 IF(allocated(size_of_read))THEN
2584 DEALLOCATE(size_of_read)
2585 ENDIF
2586 IF(allocated(first_pos_in_read))THEN
2587 DEALLOCATE(first_pos_in_read)
2588 ENDIF
2589 IF(allocated(read_dest))THEN
2590 DEALLOCATE(read_dest)
2591 ENDIF
2592 IF(allocated(read_mng))THEN
2593 DEALLOCATE(read_mng)
2594 ENDIF
2595 IF(allocated(req_to_zone))THEN
2596 DEALLOCATE(req_to_zone)
2597 ENDIF
2598 IF(allocated(req_id))THEN
2599 DEALLOCATE(req_id)
2600 ENDIF
2601 solve_or_facto=1
2602 CALL mumps_clean_io_data_c(myid_ooc,solve_or_facto,ierr)
2603 IF(ierr.LT.0)THEN
2604 IF (icntl1.GT.0)
2605 & WRITE(icntl1,*)myid_ooc,': ',err_str_ooc(1:dim_err_str_ooc)
2606 RETURN
2607 ENDIF

◆ cmumps_ooc_force_wrt_buf_panel()

subroutine cmumps_ooc::cmumps_ooc_force_wrt_buf_panel ( integer, intent(out) ierr)

Definition at line 2964 of file cmumps_ooc.F.

2966 IMPLICIT NONE
2967 INTEGER, intent(out) :: IERR
2968 INTEGER I
2969 ierr=0
2970 IF(.NOT.with_buf)THEN
2971 RETURN
2972 ENDIF
2973 DO i=1,ooc_nb_file_type
2974 CALL cmumps_ooc_do_io_and_chbuf(i,ierr)
2975 IF (ierr < 0) RETURN
2976 ENDDO
2977 RETURN

◆ cmumps_ooc_init_facto()

subroutine, public cmumps_ooc::cmumps_ooc_init_facto ( type(cmumps_struc), target id,
integer(8), intent(in) maxs )

Definition at line 113 of file cmumps_ooc.F.

116 IMPLICIT NONE
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(CMUMPS_STRUC), TARGET :: id
121 INTEGER IERR
122 INTEGER allocok
123 INTEGER ASYNC
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
128 INTEGER TMP
129 INTEGER K211_LOC
130 icntl1=id%ICNTL(1)
131 max_size_factor_ooc=0_8
132 n_ooc=id%N
133 async=0
134 solve=.false.
135 ierr=0
136 IF (id%KEEP(400).GT.0) THEN
137!$ CALL OMP_INIT_LOCK( LOCK_FOR_L0OMP )
138 ENDIF
139 IF(allocated(io_req))THEN
140 DEALLOCATE(io_req)
141 ENDIF
142 IF(associated(keep_ooc))THEN
143 NULLIFY(keep_ooc)
144 ENDIF
145 IF(associated(step_ooc))THEN
146 NULLIFY(step_ooc)
147 ENDIF
148 IF(associated(procnode_ooc))THEN
149 NULLIFY(procnode_ooc)
150 ENDIF
151 IF(associated(ooc_inode_sequence))THEN
152 NULLIFY(ooc_inode_sequence)
153 ENDIF
154 IF(associated(total_nb_ooc_nodes))THEN
155 NULLIFY(total_nb_ooc_nodes)
156 ENDIF
157 IF(associated(size_of_block))THEN
158 NULLIFY(size_of_block)
159 ENDIF
160 IF(associated(ooc_vaddr))THEN
161 NULLIFY(ooc_vaddr)
162 ENDIF
163 IF(allocated(i_cur_hbuf_nextpos))THEN
164 DEALLOCATE(i_cur_hbuf_nextpos)
165 ENDIF
166 ooc_nb_file_type=id%OOC_NB_FILE_TYPE
167 IF(ierr.LT.0)THEN
168 IF (icntl1 > 0)
169 & WRITE(icntl1,*)myid_ooc,': ',err_str_ooc(1:dim_err_str_ooc)
170 id%INFO(1) = ierr
171 id%INFO(2) = 0
172 RETURN
173 ENDIF
174 CALL mumps_ooc_init_filetype(typef_l, typef_u, typef_cb,
175 & id%KEEP(201), id%KEEP(251), id%KEEP(50), typef_invalid )
176 IF (id%KEEP(201).EQ.2) THEN
177 ooc_fct_type=1
178 ENDIF
179 step_ooc=>id%STEP
180 procnode_ooc=>id%PROCNODE_STEPS
181 myid_ooc=id%MYID
182 slavef_ooc=id%NSLAVES
183 keep_ooc => id%KEEP
184 size_of_block=>id%OOC_SIZE_OF_BLOCK
185 ooc_vaddr=>id%OOC_VADDR
186 IF(id%KEEP(107).GT.0)THEN
187 size_solve_emm=max(id%KEEP8(19),int(dble(maxs)*
188 & 0.9d0*0.2d0,8))
189 size_zone_solve=max(size_solve_emm,
190 & int((dble(maxs)*0.9d0-
191 & dble(size_solve_emm))/dble(id%KEEP(107)),8))
192 IF(size_zone_solve.EQ.size_solve_emm)THEN
193 size_solve_emm=id%KEEP8(19)
194 size_zone_solve=int((dble(maxs)*0.9d0-
195 & dble(size_solve_emm))/dble(id%KEEP(107)),8)
196 ENDIF
197 ELSE
198 size_zone_solve=int(dble(maxs)*0.9d0,8)
199 size_solve_emm=size_zone_solve
200 ENDIF
201 cmumps_elementary_data_size = id%KEEP(35)
202 size_of_block=0_8
203 ALLOCATE(id%OOC_NB_FILES(ooc_nb_file_type), stat=allocok)
204 IF (allocok .GT. 0) THEN
205 IF (icntl1.GT.0) THEN
206 WRITE(icntl1,*) 'PB allocation in CMUMPS_INIT_OOC'
207 ENDIF
208 id%INFO(1) = -13
209 id%INFO(2) = ooc_nb_file_type
210 RETURN
211 ENDIF
212 id%OOC_NB_FILES=0
213 ooc_vaddr_ptr=0_8
214 CALL cmumps_set_strat_io_flags( id%KEEP(99), strat_io_async,
215 & with_buf, low_level_strat_io )
216 tmp_size_fact=0_8
217 tmp_nb_nodes=0
218 max_nb_nodes_for_zone=0
219 ooc_inode_sequence=>id%OOC_INODE_SEQUENCE
220 ALLOCATE(i_cur_hbuf_nextpos(ooc_nb_file_type),
221 & stat=allocok)
222 IF (allocok .GT. 0) THEN
223 IF (icntl1.GT.0) THEN
224 WRITE(icntl1,*) 'PB allocation in CMUMPS_INIT_OOC'
225 ENDIF
226 id%INFO(1) = -13
227 id%INFO(2) = ooc_nb_file_type
228 RETURN
229 ENDIF
231 IF(with_buf)THEN
232 CALL cmumps_init_ooc_buf(id%INFO(1),id%INFO(2),ierr)
233 IF(ierr.LT.0)THEN
234 RETURN
235 ENDIF
236 ENDIF
237 IF(strat_io_async)THEN
238 async=1
239 ENDIF
240 dim_err_str_ooc = err_str_ooc_max_len
241 CALL mumps_low_level_init_err_str(dim_err_str_ooc,err_str_ooc)
242 dim_dir=len(trim(id%OOC_TMPDIR))
243 dim_prefix=len(trim(id%OOC_PREFIX))
244 CALL cmumps_convert_str_to_chr_array(tmp_dir(1),
245 & id%OOC_TMPDIR, tmpdir_max_length, dim_dir )
246 CALL cmumps_convert_str_to_chr_array(tmp_prefix(1),
247 & id%OOC_PREFIX, prefix_max_length, dim_prefix)
248 CALL mumps_low_level_init_prefix(dim_prefix, tmp_prefix)
249 CALL mumps_low_level_init_tmpdir(dim_dir, tmp_dir)
250 ALLOCATE(file_flag_tab(ooc_nb_file_type),
251 & stat=allocok)
252 IF (allocok .GT. 0) THEN
253 IF (icntl1 .GT. 0) THEN
254 WRITE(icntl1,*) 'PB allocation in CMUMPS_INIT_OOC'
255 ENDIF
256 id%INFO(1) = -13
257 id%INFO(2) = ooc_nb_file_type
258 RETURN
259 ENDIF
260 file_flag_tab(1:ooc_nb_file_type)=0
261 ierr=0
262 tmp=int(id%KEEP8(11)/1000000_8)+1
263 IF((id%KEEP(201).EQ.1).AND.(id%KEEP(50).EQ.0)
264 & ) THEN
265 tmp=max(1,tmp/2)
266 ENDIF
267 CALL mumps_low_level_init_ooc_c(myid_ooc,tmp,
268 & id%KEEP(35),low_level_strat_io,k211_loc,ooc_nb_file_type,
269 & file_flag_tab,ierr)
270 IF(ierr.LT.0)THEN
271 IF (icntl1 .GT. 0 ) THEN
272 WRITE(icntl1,*)myid_ooc,': PB in MUMPS_LOW_LEVEL_INIT_OOC_C'
273 WRITE(icntl1,*)myid_ooc,': ',err_str_ooc(1:dim_err_str_ooc)
274 ENDIF
275 id%INFO(1) = ierr
276 id%INFO(2) = 0
277 RETURN
278 ENDIF
279 CALL mumps_get_max_file_size_c(max_ooc_file_size)
280 DEALLOCATE(file_flag_tab)
281 RETURN
subroutine mumps_ooc_init_filetype(typef_l, typef_u, typef_cb, k201, k251, k50, typef_invalid)
subroutine cmumps_init_ooc_buf(i1, i2, ierr)

◆ cmumps_ooc_init_solve()

subroutine, public cmumps_ooc::cmumps_ooc_init_solve ( type(cmumps_struc), target id)

Definition at line 592 of file cmumps_ooc.F.

594 IMPLICIT NONE
595 include 'mpif.h'
596 TYPE(CMUMPS_STRUC), TARGET :: id
597 INTEGER TMP,I,J
598 INTEGER(8) :: TMP_SIZE8
599 INTEGER allocok,IERR
600 EXTERNAL mumps_procnode
601 INTEGER MUMPS_PROCNODE
602 INTEGER MASTER_ROOT
603 ierr=0
604 icntl1=id%ICNTL(1)
605 solve=.true.
606 n_ooc=id%N
607 IF(allocated(lrlus_solve))THEN
608 DEALLOCATE(lrlus_solve)
609 ENDIF
610 IF(allocated(lrlu_solve_t))THEN
611 DEALLOCATE(lrlu_solve_t)
612 ENDIF
613 IF(allocated(lrlu_solve_b))THEN
614 DEALLOCATE(lrlu_solve_b)
615 ENDIF
616 IF(allocated(posfac_solve))THEN
617 DEALLOCATE(posfac_solve)
618 ENDIF
619 IF(allocated(ideb_solve_z))THEN
620 DEALLOCATE(ideb_solve_z)
621 ENDIF
622 IF(allocated(pdeb_solve_z))THEN
623 DEALLOCATE(pdeb_solve_z)
624 ENDIF
625 IF(allocated(size_solve_z))THEN
626 DEALLOCATE(size_solve_z)
627 ENDIF
628 IF(allocated(current_pos_t))THEN
629 DEALLOCATE(current_pos_t)
630 ENDIF
631 IF(allocated(current_pos_b))THEN
632 DEALLOCATE(current_pos_b)
633 ENDIF
634 IF(allocated(pos_hole_t))THEN
635 DEALLOCATE(pos_hole_t)
636 ENDIF
637 IF(allocated(pos_hole_b))THEN
638 DEALLOCATE(pos_hole_b)
639 ENDIF
640 IF(allocated(ooc_state_node))THEN
641 DEALLOCATE(ooc_state_node)
642 ENDIF
643 IF(allocated(pos_in_mem))THEN
644 DEALLOCATE(pos_in_mem)
645 ENDIF
646 IF(allocated(inode_to_pos))THEN
647 DEALLOCATE(inode_to_pos)
648 ENDIF
649 IF(allocated(size_of_read))THEN
650 DEALLOCATE(size_of_read)
651 ENDIF
652 IF(allocated(first_pos_in_read))THEN
653 DEALLOCATE(first_pos_in_read)
654 ENDIF
655 IF(allocated(read_dest))THEN
656 DEALLOCATE(read_dest)
657 ENDIF
658 IF(allocated(read_mng))THEN
659 DEALLOCATE(read_mng)
660 ENDIF
661 IF(allocated(req_to_zone))THEN
662 DEALLOCATE(req_to_zone)
663 ENDIF
664 IF(allocated(req_id))THEN
665 DEALLOCATE(req_id)
666 ENDIF
667 IF(allocated(io_req))THEN
668 DEALLOCATE(io_req)
669 ENDIF
670 IF(associated(keep_ooc))THEN
671 NULLIFY(keep_ooc)
672 ENDIF
673 IF(associated(step_ooc))THEN
674 NULLIFY(step_ooc)
675 ENDIF
676 IF(associated(procnode_ooc))THEN
677 NULLIFY(procnode_ooc)
678 ENDIF
679 IF(associated(total_nb_ooc_nodes))THEN
680 NULLIFY(total_nb_ooc_nodes)
681 ENDIF
682 IF(associated(size_of_block))THEN
683 NULLIFY(size_of_block)
684 ENDIF
685 IF(associated(ooc_inode_sequence))THEN
686 NULLIFY(ooc_inode_sequence)
687 ENDIF
688 ooc_nb_file_type=id%OOC_NB_FILE_TYPE
689 CALL mumps_ooc_init_filetype(typef_l, typef_u, typef_cb,
690 & id%KEEP(201), id%KEEP(251), id%KEEP(50), typef_invalid )
691 dim_err_str_ooc = err_str_ooc_max_len
692 CALL mumps_low_level_init_err_str(dim_err_str_ooc,err_str_ooc)
693 CALL cmumps_ooc_open_files_for_solve(id)
694 IF(id%INFO(1).LT.0)THEN
695 RETURN
696 ENDIF
697 step_ooc=>id%STEP
698 procnode_ooc=>id%PROCNODE_STEPS
699 slavef_ooc=id%NSLAVES
700 myid_ooc=id%MYID
701 keep_ooc => id%KEEP
702 size_of_block=>id%OOC_SIZE_OF_BLOCK
703 ooc_inode_sequence=>id%OOC_INODE_SEQUENCE
704 ooc_vaddr=>id%OOC_VADDR
705 ALLOCATE(io_req(id%KEEP(28)),
706 & stat=allocok)
707 IF (allocok .GT. 0) THEN
708 IF (icntl1.GT.0) THEN
709 WRITE(icntl1,*) 'PB allocation in CMUMPS_OOC_INIT_SOLVE'
710 ENDIF
711 id%INFO(1) = -13
712 id%INFO(2) = id%KEEP(28)
713 RETURN
714 ENDIF
715 cmumps_elementary_data_size = id%KEEP(35)
716 max_nb_nodes_for_zone=id%OOC_MAX_NB_NODES_FOR_ZONE
717 total_nb_ooc_nodes=>id%OOC_TOTAL_NB_NODES
718 CALL cmumps_set_strat_io_flags( id%KEEP(204), strat_io_async,
719 & with_buf, low_level_strat_io)
720 IF(id%KEEP(107).GT.0)THEN
721 size_solve_emm=max(id%KEEP8(20),
722 & fact_area_size / 5_8)
723 size_zone_solve=max(size_solve_emm,
724 & int((dble(fact_area_size)-
725 & dble(size_solve_emm))/dble(id%KEEP(107)),8))
726 size_zone_solve=max(size_zone_solve,0_8)
727 IF(size_zone_solve.EQ.size_solve_emm)THEN
728 size_solve_emm=id%KEEP8(20)
729 size_zone_solve=int((real(fact_area_size)-
730 & real(size_solve_emm))/real(id%KEEP(107)),8)
731 size_zone_solve=max(size_zone_solve,0_8)
732 ENDIF
733 ELSE
734 size_zone_solve=fact_area_size
735 size_solve_emm=size_zone_solve
736 ENDIF
737 IF(size_solve_emm.LT.id%KEEP8(20))THEN
738 IF (icntl1.GT.0)
739 & WRITE(icntl1,*)myid_ooc,': More space needed for
740 & solution step in CMUMPS_OOC_INIT_SOLVE'
741 id%INFO(1) = -11
742 CALL mumps_set_ierror(id%KEEP8(20), id%INFO(2))
743 ENDIF
744 tmp=max_nb_nodes_for_zone
745 CALL mpi_allreduce(tmp,max_nb_nodes_for_zone,1,
746 & mpi_integer,mpi_max,id%COMM_NODES, ierr)
747 nb_z=keep_ooc(107)+1
748 ALLOCATE(pos_in_mem(max_nb_nodes_for_zone*nb_z),
749 & inode_to_pos(keep_ooc(28)),
750 & stat=allocok)
751 IF (allocok .GT. 0) THEN
752 IF (icntl1.GT.0) THEN
753 WRITE(icntl1,*) 'PB allocation in CMUMPS_OOC_INIT_SOLVE'
754 ENDIF
755 id%INFO(1) = -13
756 id%INFO(2) = id%KEEP(28)+(max_nb_nodes_for_zone*nb_z)
757 RETURN
758 ENDIF
759 ALLOCATE(ooc_state_node(keep_ooc(28)),stat=allocok)
760 IF (allocok .GT. 0) THEN
761 IF (icntl1.GT.0) THEN
762 WRITE(icntl1,*) 'PB allocation in CMUMPS_OOC_INIT_SOLVE'
763 ENDIF
764 id%INFO(1) = -13
765 id%INFO(2) = id%KEEP(28)
766 RETURN
767 ENDIF
768 ooc_state_node(1:keep_ooc(28))=0
769 inode_to_pos=0
770 pos_in_mem=0
771 ALLOCATE(lrlus_solve(nb_z), lrlu_solve_t(nb_z),lrlu_solve_b(nb_z),
772 & posfac_solve(nb_z),ideb_solve_z(nb_z),
773 & pdeb_solve_z(nb_z),size_solve_z(nb_z),
774 & current_pos_t(nb_z),current_pos_b(nb_z),
775 & pos_hole_t(nb_z),pos_hole_b(nb_z),
776 & stat=allocok)
777 IF (allocok .GT. 0) THEN
778 IF (icntl1.GT.0) THEN
779 WRITE(icntl1,*) 'PB allocation in CMUMPS_OOC_INIT_SOLVE'
780 ENDIF
781 id%INFO(1) = -13
782 id%INFO(2) = 9*(nb_z+1)
783 RETURN
784 ENDIF
785 ierr=0
786 CALL mumps_get_max_nb_req_c(max_nb_req,ierr)
787 ALLOCATE(size_of_read(max_nb_req),first_pos_in_read(max_nb_req),
788 & read_dest(max_nb_req),read_mng(max_nb_req),
789 & req_to_zone(max_nb_req),req_id(max_nb_req),stat=allocok)
790 size_of_read=-9999_8
791 first_pos_in_read=-9999
792 read_dest=-9999_8
793 read_mng=-9999
794 req_to_zone=-9999
795 req_id=-9999
796 IF (allocok .GT. 0) THEN
797 IF (icntl1.GT.0) THEN
798 WRITE(icntl1,*) 'PB allocation in CMUMPS_OOC_INIT_SOLVE'
799 ENDIF
800 id%INFO(1) = -13
801 id%INFO(2) = 6*(nb_z+1)
802 RETURN
803 ENDIF
804 min_size_read=min(max((1024_8*1024_8)/int(id%KEEP(35),8),
805 & size_zone_solve/3_8),
806 & size_zone_solve)
807 tmp_size8=1_8
808 j=1
809 DO i=1,nb_z-1
810 ideb_solve_z(i)=tmp_size8
811 posfac_solve(i)=tmp_size8
812 lrlus_solve(i)=size_zone_solve
813 lrlu_solve_t(i)=size_zone_solve
814 lrlu_solve_b(i)=0_8
815 size_solve_z(i)=size_zone_solve
816 current_pos_t(i)=j
817 current_pos_b(i)=j
818 pdeb_solve_z(i)=j
819 pos_hole_t(i)=j
820 pos_hole_b(i)=j
821 j=j+max_nb_nodes_for_zone
822 tmp_size8=tmp_size8+size_zone_solve
823 ENDDO
824 ideb_solve_z(nb_z)=tmp_size8
825 pdeb_solve_z(nb_z)=j
826 posfac_solve(nb_z)=tmp_size8
827 lrlus_solve(nb_z)=size_solve_emm
828 lrlu_solve_t(nb_z)=size_solve_emm
829 lrlu_solve_b(nb_z)=0_8
830 size_solve_z(nb_z)=size_solve_emm
831 current_pos_t(nb_z)=j
832 current_pos_b(nb_z)=j
833 pos_hole_t(nb_z)=j
834 pos_hole_b(nb_z)=j
835 io_req=-77777
836 req_act=0
837 ooc_state_node(1:keep_ooc(28))=not_in_mem
838 IF(keep_ooc(38).NE.0)THEN
839 master_root=mumps_procnode(
840 & procnode_ooc(step_ooc( keep_ooc(38))),
841 & keep_ooc(199) )
842 special_root_node=keep_ooc(38)
843 ELSEIF(keep_ooc(20).NE.0)THEN
844 master_root=mumps_procnode(
845 & procnode_ooc(step_ooc( keep_ooc(20))),
846 & keep_ooc(199) )
847 special_root_node=keep_ooc(20)
848 ELSE
849 master_root=-111111
850 special_root_node=-2222222
851 ENDIF
852 IF ( keep_ooc(60).EQ.0 .AND.
853 & (
854 & (keep_ooc(38).NE.0 .AND. id%root%yes)
855 & .OR.
856 & (keep_ooc(20).NE.0 .AND. myid_ooc.EQ.master_root))
857 & )
858 & THEN
859 is_root_special = .true.
860 ELSE
861 is_root_special = .false.
862 ENDIF
863 nb_zone_req=0
864 size_zone_req=0_8
865 current_solve_read_zone=0
866 nb_called=0
867 nb_call=0
868 solve_step=-9999
869 RETURN
subroutine mpi_allreduce(sendbuf, recvbuf, cnt, datatype, operation, comm, ierr)
Definition mpi.f:103
integer function mumps_procnode(procinfo_inode, k199)
subroutine mumps_set_ierror(size8, ierror)

◆ cmumps_ooc_io_lu_panel()

subroutine, public cmumps_ooc::cmumps_ooc_io_lu_panel ( integer, intent(in) strat,
integer, intent(in) typefile,
complex, dimension(lafac), intent(in) afac,
integer(8) lafac,
type(io_block), intent(inout) monbloc,
integer, intent(inout) lnextpiv2bewritten,
integer, intent(inout) unextpiv2bewritten,
integer, dimension(0:liwfac-1), intent(inout) iw,
integer, intent(in) liwfac,
integer, intent(in) myid,
integer(8), intent(inout) filesize,
integer, intent(out) ierr,
logical, intent(in) last_call )

Definition at line 3026 of file cmumps_ooc.F.

3032 IMPLICIT NONE
3033 TYPE(IO_BLOCK), INTENT(INOUT):: MonBloc
3034 INTEGER(8) :: LAFAC
3035 INTEGER, INTENT(IN) :: STRAT, LIWFAC,
3036 & MYID, TYPEFile
3037 INTEGER, INTENT(INOUT) :: IW(0:LIWFAC-1)
3038 COMPLEX, INTENT(IN) :: AFAC(LAFAC)
3039 INTEGER, INTENT(INOUT) :: LNextPiv2beWritten,
3040 & UNextPiv2beWritten
3041 INTEGER(8), INTENT(INOUT) :: FILESIZE
3042 INTEGER, INTENT(OUT) :: IERR
3043 LOGICAL, INTENT(IN) :: LAST_CALL
3044 INTEGER(8) :: TMPSIZE_OF_BLOCK
3045 INTEGER :: TempFTYPE
3046 LOGICAL WRITE_L, WRITE_U
3047 LOGICAL DO_U_FIRST
3048 include 'mumps_headers.h'
3049 ierr = 0
3050 IF (keep_ooc(50).EQ.0
3051 & .AND.keep_ooc(251).EQ.2) THEN
3052 write_l = .false.
3053 ELSE
3054 write_l = (typefile.EQ.typef_both_lu .OR. typefile.EQ.typef_l)
3055 ENDIF
3056 write_u = (typefile.EQ.typef_both_lu .OR. typefile.EQ.typef_u)
3057#if defined(_OPENMP)
3058 IF (keep_ooc(400).GT.0 .AND. keep_ooc(405) .GT. 0) THEN
3059 IF ( strat .EQ. strat_write_max .OR. last_call ) THEN
3060 CALL omp_set_lock(lock_for_l0omp)
3061#if defined(_WIN32)
3062 ELSE
3063#else
3064 ELSE IF ( .NOT. omp_test_lock(lock_for_l0omp )) THEN
3065#endif
3066 RETURN
3067 ENDIF
3068 ENDIF
3069#endif
3070 do_u_first = .false.
3071 IF ( typefile.EQ.typef_both_lu ) THEN
3072 IF ( lnextpiv2bewritten .GT. unextpiv2bewritten ) THEN
3073 do_u_first = .true.
3074 END IF
3075 END IF
3076 IF (do_u_first) GOTO 200
3077 100 IF (write_l .AND. typef_l > 0 ) THEN
3078 tempftype = typef_l
3079 IF ((monbloc%Typenode.EQ.2).AND.(.NOT.monbloc%MASTER))
3080 & THEN
3081 tmpsize_of_block = size_of_block(step_ooc(monbloc%INODE),
3082 & tempftype)
3083 IF (tmpsize_of_block .LT. 0_8) THEN
3084 tmpsize_of_block = -tmpsize_of_block - 1_8
3085 ENDIF
3086 lnextpiv2bewritten =
3087 & int(
3088 & tmpsize_of_block
3089 & / int(monbloc%NROW,8)
3090 & )
3091 & + 1
3092 ENDIF
3093 CALL cmumps_ooc_store_loru( strat,
3094 & tempftype, afac, lafac, monbloc,
3095 & ierr,
3096 & lnextpiv2bewritten,
3097 & ooc_vaddr(step_ooc(monbloc%INODE),tempftype),
3098 & size_of_block(step_ooc(monbloc%INODE),tempftype),
3099 & filesize, last_call )
3100 IF (ierr .LT. 0) RETURN
3101 IF (do_u_first) GOTO 300
3102 ENDIF
3103 200 IF (write_u) THEN
3104 tempftype = typef_u
3105 CALL cmumps_ooc_store_loru( strat,
3106 & tempftype, afac, lafac, monbloc,
3107 & ierr,
3108 & unextpiv2bewritten,
3109 & ooc_vaddr(step_ooc(monbloc%INODE),tempftype),
3110 & size_of_block(step_ooc(monbloc%INODE),tempftype),
3111 & filesize, last_call)
3112 IF (ierr .LT. 0) RETURN
3113 IF (do_u_first) GOTO 100
3114 ENDIF
3115 300 CONTINUE
3116#if defined(_OPENMP)
3117 IF (keep_ooc(400).GT.0 .AND. keep_ooc(405) .GT. 0) THEN
3118 CALL omp_unset_lock(lock_for_l0omp)
3119 ENDIF
3120#endif
3121 RETURN

◆ cmumps_ooc_nbentries_panel_123()

integer(8) function cmumps_ooc::cmumps_ooc_nbentries_panel_123 ( integer, intent(in) nfsornpiv,
integer, intent(in) nnmax,
integer, intent(in) size_panel,
type(io_block), intent(in) monbloc,
logical, intent(in) estim )

Definition at line 3369 of file cmumps_ooc.F.

3371 IMPLICIT NONE
3372 TYPE(IO_BLOCK), INTENT(IN):: MonBloc
3373 INTEGER, INTENT(IN) :: NFSorNPIV, NNMAX, SIZE_PANEL
3374 LOGICAL, INTENT(IN) :: ESTIM
3375 INTEGER :: I, NBeff
3376 INTEGER(8) :: TOTSIZE
3377 totsize = 0_8
3378 IF (nfsornpiv.EQ.0) GOTO 100
3379 IF (.NOT. monbloc%MASTER .OR. monbloc%Typenode.EQ.3) THEN
3380 totsize = int(nfsornpiv,8) * int(nnmax,8)
3381 ELSE
3382 i = 1
3383 10 CONTINUE
3384 nbeff = min(size_panel, nfsornpiv-i+1)
3385 IF (keep_ooc(50).EQ.2) THEN
3386 IF (estim) THEN
3387 nbeff = nbeff + 1
3388 ELSE
3389 IF (monbloc%INDICES(i+nbeff-1) < 0) THEN
3390 nbeff = nbeff + 1
3391 ENDIF
3392 ENDIF
3393 ENDIF
3394 totsize = totsize +
3395 & int(nnmax-i+1,8) * int(nbeff,8)
3396 i = i + nbeff
3397 IF ( i .LE. nfsornpiv ) GOTO 10
3398 ENDIF
3399 100 CONTINUE
3400 cmumps_ooc_nbentries_panel_123 = totsize
3401 RETURN

◆ cmumps_ooc_open_files_for_solve()

subroutine cmumps_ooc::cmumps_ooc_open_files_for_solve ( type(cmumps_struc), target id)

Definition at line 2870 of file cmumps_ooc.F.

2872 IMPLICIT NONE
2873 TYPE(CMUMPS_STRUC), TARGET :: id
2874 CHARACTER(len=1):: TMP_NAME(350)
2875 INTEGER I,I1,TMP,J,K,L,DIM,IERR
2876 INTEGER, DIMENSION(:),ALLOCATABLE :: NB_FILES
2877 INTEGER K211
2878 ALLOCATE(nb_files(ooc_nb_file_type),stat=ierr)
2879 IF (ierr .GT. 0) THEN
2880 ierr=-1
2881 IF(id%INFO(1).GE.0)THEN
2882 IF (icntl1.GT.0) THEN
2883 WRITE(icntl1,*)
2884 & 'PB allocation in CMUMPS_OOC_OPEN_FILES_FOR_SOLVE'
2885 ENDIF
2886 id%INFO(1) = -13
2887 id%INFO(2) = ooc_nb_file_type
2888 RETURN
2889 ENDIF
2890 ENDIF
2891 ierr=0
2892 nb_files=id%OOC_NB_FILES
2893 i=id%MYID
2894 k=id%KEEP(35)
2895 l=mod(id%KEEP(204),3)
2896 k211=id%KEEP(211)
2897 CALL mumps_ooc_alloc_pointers_c(ooc_nb_file_type,nb_files,ierr)
2898 IF(ierr.LT.0)THEN
2899 IF (icntl1.GT.0)
2900 & WRITE(icntl1,*)myid_ooc,': ',err_str_ooc(1:dim_err_str_ooc)
2901 id%INFO(1)=ierr
2902 RETURN
2903 ENDIF
2904 CALL mumps_ooc_init_vars_c(i,k,l,k211,ierr)
2905 IF(ierr.LT.0)THEN
2906 IF (icntl1.GT.0)
2907 & WRITE(icntl1,*)myid_ooc,': ',err_str_ooc(1:dim_err_str_ooc)
2908 id%INFO(1)=ierr
2909 RETURN
2910 ENDIF
2911 k=1
2912 DO i1=1,ooc_nb_file_type
2913 DO i=1,nb_files(i1)
2914 dim=id%OOC_FILE_NAME_LENGTH(k)
2915 DO j=1,dim
2916 tmp_name(j)=id%OOC_FILE_NAMES(k,j)
2917 ENDDO
2918 tmp=i1-1
2919 CALL mumps_ooc_set_file_name_c(tmp,i,dim,ierr,tmp_name(1))
2920 IF(ierr.LT.0)THEN
2921 IF (icntl1.GT.0)
2922 & WRITE(icntl1,*)myid_ooc,': ',
2923 & err_str_ooc(1:dim_err_str_ooc)
2924 id%INFO(1)=ierr
2925 RETURN
2926 ENDIF
2927 k=k+1
2928 ENDDO
2929 ENDDO
2930 CALL mumps_ooc_start_low_level(ierr)
2931 IF(ierr.LT.0)THEN
2932 IF (icntl1.GT.0)
2933 & WRITE(icntl1,*)myid_ooc,': ',err_str_ooc(1:dim_err_str_ooc)
2934 id%INFO(1)=ierr
2935 RETURN
2936 ENDIF
2937 DEALLOCATE(nb_files)
2938 RETURN

◆ cmumps_ooc_panel_size()

integer function, public cmumps_ooc::cmumps_ooc_panel_size ( integer, intent(in) nnmax)

Definition at line 3403 of file cmumps_ooc.F.

3404 IMPLICIT NONE
3405 INTEGER, INTENT(IN) :: NNMAX
3406 INTEGER CMUMPS_OOC_GET_PANEL_SIZE
3407 cmumps_ooc_panel_size=cmumps_ooc_get_panel_size(
3408 & int(keep_ooc(223),8), nnmax, keep_ooc(227),keep_ooc(50))
3409 RETURN
integer function cmumps_ooc_get_panel_size(hbuf_size, nnmax, k227, k50)

◆ cmumps_ooc_set_states_es()

subroutine cmumps_ooc::cmumps_ooc_set_states_es ( integer, intent(in) n,
integer, intent(in) keep201,
integer, dimension(nb_prun_nodes), intent(in) pruned_list,
integer, intent(in) nb_prun_nodes,
integer, dimension(n), intent(in) step )

Definition at line 3449 of file cmumps_ooc.F.

3451 IMPLICIT NONE
3452 INTEGER, INTENT(IN) :: N, KEEP201, nb_prun_nodes
3453 INTEGER, INTENT(IN) :: STEP(N),
3454 & Pruned_List(nb_prun_nodes)
3455 INTEGER I, ISTEP
3456 IF (keep201 .GT. 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
3461 ENDDO
3462 ENDIF
3463 RETURN

◆ cmumps_ooc_skip_null_size_node()

subroutine cmumps_ooc::cmumps_ooc_skip_null_size_node

Definition at line 3411 of file cmumps_ooc.F.

3412 IMPLICIT NONE
3413 INTEGER I,TMP_NODE
3414 IF(.NOT.cmumps_solve_is_end_reached())THEN
3415 IF(solve_step.EQ.0)THEN
3416 i=cur_pos_sequence
3417 tmp_node=ooc_inode_sequence(cur_pos_sequence,
3418 & ooc_fct_type)
3419 DO WHILE ((i.LE.total_nb_ooc_nodes(ooc_fct_type)).AND.
3420 & (size_of_block(step_ooc(tmp_node),ooc_fct_type)
3421 & .EQ.0_8))
3422 inode_to_pos(step_ooc(tmp_node))=1
3423 ooc_state_node(step_ooc(tmp_node))=not_used
3424 i=i+1
3425 IF(i.LE.total_nb_ooc_nodes(ooc_fct_type))THEN
3426 tmp_node=ooc_inode_sequence(i,ooc_fct_type)
3427 ENDIF
3428 ENDDO
3429 cur_pos_sequence=min(i,total_nb_ooc_nodes(ooc_fct_type))
3430 ELSE
3431 i=cur_pos_sequence
3432 tmp_node=ooc_inode_sequence(cur_pos_sequence,
3433 & ooc_fct_type)
3434 DO WHILE ((i.GE.1).AND.
3435 & (size_of_block(step_ooc(tmp_node),ooc_fct_type)
3436 & .EQ.0_8))
3437 inode_to_pos(step_ooc(tmp_node))=1
3438 ooc_state_node(step_ooc(tmp_node))=not_used
3439 i=i-1
3440 IF(i.GE.1)THEN
3441 tmp_node=ooc_inode_sequence(i,ooc_fct_type)
3442 ENDIF
3443 ENDDO
3444 cur_pos_sequence=max(i,1)
3445 ENDIF
3446 ENDIF
3447 RETURN

◆ cmumps_ooc_store_loru()

subroutine, private cmumps_ooc::cmumps_ooc_store_loru ( integer, intent(in) strat,
integer, intent(in) typef,
complex, dimension(lafac), intent(in) afac,
integer(8), intent(in) lafac,
type(io_block), intent(inout) monbloc,
integer, intent(out) ierr,
integer, intent(inout) loru_nextpiv2bewritten,
integer(8), intent(inout) loru_addvirtnodei8,
integer(8), intent(inout) lorusize_of_block,
integer(8), intent(inout) filesize,
logical, intent(in) last_call )
private

Definition at line 3123 of file cmumps_ooc.F.

3131 IMPLICIT NONE
3132 INTEGER, INTENT(IN) :: STRAT
3133 INTEGER, INTENT(IN) :: TYPEF
3134 INTEGER(8), INTENT(INOUT) :: FILESIZE
3135 INTEGER(8), INTENT(IN) :: LAFAC
3136 COMPLEX, 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
3143 INTEGER NNMAX
3144 INTEGER(8) :: TOTSIZE, EFFSIZE
3145 INTEGER(8) :: TailleEcrite
3146 INTEGER SIZE_PANEL
3147 INTEGER(8) :: AddVirtCour
3148 LOGICAL VIRT_ADD_RESERVED_BEF_CALL
3149 LOGICAL VIRTUAL_ADDRESS_JUST_RESERVED
3150 LOGICAL HOLE_PROCESSED_BEFORE_CALL
3151 LOGICAL TMP_ESTIM
3152 INTEGER ICUR, INODE_CUR, ILAST
3153 INTEGER(8) :: ADDR_LAST
3154 ierr = 0
3155 IF (typef == typef_l ) THEN
3156 nnmax = monbloc%NROW
3157 ELSE
3158 nnmax = monbloc%NCOL
3159 ENDIF
3160 size_panel = cmumps_ooc_panel_size(nnmax)
3161 IF ( (.NOT.monbloc%Last) .AND.
3162 & (monbloc%LastPiv-loru_nextpiv2bewritten+1.LT.size_panel))
3163 & THEN
3164 RETURN
3165 ENDIF
3166 tmp_estim = .true.
3167 totsize = cmumps_ooc_nbentries_panel_123
3168 & (monbloc%NFS, nnmax, size_panel, monbloc, tmp_estim)
3169 IF (monbloc%Last) THEN
3170 tmp_estim=.false.
3171 effsize = cmumps_ooc_nbentries_panel_123
3172 & (monbloc%LastPiv, nnmax, size_panel, monbloc, tmp_estim)
3173 ELSE
3174 effsize = -1034039740327_8
3175 ENDIF
3176 IF (monbloc%Typenode.EQ.3.AND. monbloc%NFS.NE.monbloc%NCOL) THEN
3177 WRITE(*,*) 'Internal error in CMUMPS_OOC_STORE_LorU for type3',
3178 & monbloc%NFS,monbloc%NCOL
3179 CALL mumps_abort()
3180 ENDIF
3181 IF (monbloc%Typenode.EQ.3.AND. typef.NE.typef_l) THEN
3182 WRITE(*,*) 'Internal error in CMUMPS_OOC_STORE_LorU,TYPEF=',
3183 & typef, 'for typenode=3'
3184 CALL mumps_abort()
3185 ENDIF
3186 IF (monbloc%Typenode.EQ.2.AND.
3187 & typef.EQ.typef_u.AND.
3188 & .NOT. monbloc%MASTER ) THEN
3189 WRITE(*,*) 'Internal error in CMUMPS_OOC_STORE_LorU',
3190 & monbloc%MASTER,monbloc%Typenode, typef
3191 CALL mumps_abort()
3192 ENDIF
3193 hole_processed_before_call = (lorusize_of_block .LT. 0_8)
3194 IF (hole_processed_before_call.AND.(.NOT.monbloc%Last)) THEN
3195 WRITE(6,*) ' Internal error in CMUMPS_OOC_STORE_LorU ',
3196 & ' last is false after earlier calls with last=true'
3197 CALL mumps_abort()
3198 ENDIF
3199 IF (hole_processed_before_call) THEN
3200 lorusize_of_block = - lorusize_of_block - 1_8
3201 totsize = -99999999_8
3202 ENDIF
3203 virtual_address_just_reserved = .false.
3204 virt_add_reserved_bef_call =
3205 & ( lorusize_of_block .NE. 0_8 .OR.
3206 & hole_processed_before_call )
3207 IF (monbloc%Last .AND. .NOT. hole_processed_before_call) THEN
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 IF (addvirtlibre(typef).EQ.
3212 & (loru_addvirtnodei8+totsize) ) THEN
3213 addvirtlibre(typef) = loru_addvirtnodei8 + effsize
3214 ENDIF
3215 ELSE
3216 virtual_address_just_reserved = .true.
3217 IF (effsize .EQ. 0_8) THEN
3218 loru_addvirtnodei8 = -9999_8
3219 ELSE
3220 loru_addvirtnodei8 = addvirtlibre(typef)
3221 ENDIF
3222 addvirtlibre(typef) = addvirtlibre(typef) + effsize
3223 ENDIF
3224 ELSE
3225 IF (.NOT. virt_add_reserved_bef_call
3226 & ) THEN
3227 loru_addvirtnodei8 = addvirtlibre(typef)
3228 addvirtlibre(typef) = addvirtlibre(typef) + totsize
3229 ENDIF
3230 ENDIF
3231 addvirtcour = loru_addvirtnodei8 + lorusize_of_block
3232 CALL cmumps_ooc_wrt_in_panels_loru( strat, typef, monbloc,
3233 & size_panel,
3234 & afac, lafac,
3235 & loru_nextpiv2bewritten, addvirtcour,
3236 & tailleecrite,
3237 & ierr )
3238 IF ( ierr .LT. 0 ) RETURN
3239 lorusize_of_block = lorusize_of_block + tailleecrite
3240 IF (lorusize_of_block.EQ.0_8 ) THEN
3241 IF ( .NOT. virt_add_reserved_bef_call
3242 & .AND. .NOT. virtual_address_just_reserved )
3243 & THEN
3244 addvirtlibre(typef) = addvirtlibre(typef) - totsize
3245 loru_addvirtnodei8 = 0_8
3246 ENDIF
3247 ELSE IF (.NOT. virt_add_reserved_bef_call ) THEN
3248 virtual_address_just_reserved = .true.
3249 ENDIF
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
3257 ELSE
3258 max_size_factor_ooc=max(max_size_factor_ooc,totsize)
3259 tmp_size_fact=tmp_size_fact+totsize
3260 ENDIF
3261 tmp_nb_nodes=tmp_nb_nodes+1
3262 IF(tmp_size_fact.GT.size_zone_solve)THEN
3263 max_nb_nodes_for_zone=max(max_nb_nodes_for_zone,
3264 & tmp_nb_nodes)
3265 tmp_size_fact=0_8
3266 tmp_nb_nodes=0
3267 ENDIF
3268 ENDIF
3269 IF (monbloc%Last) THEN
3270 lorusize_of_block = - lorusize_of_block - 1_8
3271 ENDIF
3272 IF (last_call) THEN
3273 IF (.NOT.monbloc%Last) THEN
3274 WRITE(6,*) ' Internal error in CMUMPS_OOC_STORE_LorU ',
3275 & ' LAST and LAST_CALL are incompatible '
3276 CALL mumps_abort()
3277 ENDIF
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 IF ( inode_cur .NE. monbloc%INODE .AND.
3283 & ooc_vaddr(step_ooc(monbloc%INODE),typef) .NE. -9999 ) THEN
3284 10 CONTINUE
3285 ilast = icur
3286 IF ( ooc_vaddr(step_ooc(inode_cur),typef) .NE. -9999_8) THEN
3287 addr_last = ooc_vaddr(step_ooc(inode_cur), typef)
3288 ENDIF
3289 icur = icur - 1
3290 inode_cur = ooc_inode_sequence(icur,typef)
3291 IF (inode_cur .EQ. monbloc%INODE) THEN
3292 lorusize_of_block = addr_last -
3293 & ooc_vaddr(step_ooc(inode_cur),typef)
3294 ELSE
3295 IF (icur .LE. 1) THEN
3296 WRITE(*,*) "Internal error in CMUMPS_OOC_STORE_LorU"
3297 WRITE(*,*) "Did not find current node in sequence"
3298 CALL mumps_abort()
3299 ENDIF
3300 GOTO 10
3301 ENDIF
3302 ENDIF
3303 filesize = filesize + lorusize_of_block
3304 ENDIF
3305 RETURN

◆ cmumps_ooc_update_solve_stat()

subroutine cmumps_ooc::cmumps_ooc_update_solve_stat ( integer inode,
integer (8), dimension(nsteps) ptrfac,
integer nsteps,
integer flag )

Definition at line 2172 of file cmumps_ooc.F.

2173 IMPLICIT NONE
2174 INTEGER INODE,NSTEPS,FLAG
2175 INTEGER (8) :: PTRFAC(NSTEPS)
2176 INTEGER ZONE
2177 IF((flag.LT.0).OR.(flag.GT.1))THEN
2178 WRITE(*,*)myid_ooc,': Internal error (32) in OOC ',
2179 & ' CMUMPS_OOC_UPDATE_SOLVE_STAT'
2180 CALL mumps_abort()
2181 ENDIF
2182 CALL cmumps_search_solve(ptrfac(step_ooc(inode)),zone)
2183 IF(lrlus_solve(zone).LT.0_8)THEN
2184 WRITE(*,*)myid_ooc,': Internal error (33) in OOC ',
2185 & ' LRLUS_SOLVE must be (5) ++ > 0'
2186 CALL mumps_abort()
2187 ENDIF
2188 IF(flag.EQ.0)THEN
2189 lrlus_solve(zone)=lrlus_solve(zone)+
2190 & size_of_block(step_ooc(inode),ooc_fct_type)
2191 ELSE
2192 lrlus_solve(zone)=lrlus_solve(zone)-
2193 & size_of_block(step_ooc(inode),ooc_fct_type)
2194 ENDIF
2195 IF(lrlus_solve(zone).LT.0_8)THEN
2196 WRITE(*,*)myid_ooc,': Internal error (34) in OOC ',
2197 & ' LRLUS_SOLVE must be (5) > 0'
2198 CALL mumps_abort()
2199 ENDIF

◆ cmumps_ooc_wrt_in_panels_loru()

subroutine, private cmumps_ooc::cmumps_ooc_wrt_in_panels_loru ( integer, intent(in) strat,
integer, intent(in) typef,
type(io_block), intent(inout) monbloc,
integer, intent(in) size_panel,
complex, dimension(lafac), intent(in) afac,
integer(8) lafac,
integer, intent(inout) nextpiv2bewritten,
integer(8), intent(in) addvirtcour,
integer(8), intent(out) tailleecrite,
integer, intent(out) ierr )
private

Definition at line 3307 of file cmumps_ooc.F.

3314 IMPLICIT NONE
3315 INTEGER, INTENT(IN) :: STRAT, TYPEF, SIZE_PANEL
3316 INTEGER(8) :: LAFAC
3317 INTEGER(8), INTENT(IN) :: AddVirtCour
3318 COMPLEX, INTENT(IN) :: AFAC(LAFAC)
3319 INTEGER, INTENT(INOUT) :: NextPiv2beWritten
3320 TYPE(IO_BLOCK),INTENT(INOUT) :: MonBloc
3321 INTEGER(8), INTENT(OUT) :: TailleEcrite
3322 INTEGER, INTENT(OUT) :: IERR
3323 INTEGER :: I, NBeff, LPANELeff, IEND
3324 INTEGER(8) :: AddVirtDeb
3325 ierr = 0
3326 tailleecrite = 0_8
3327 addvirtdeb = addvirtcour
3328 i = nextpiv2bewritten
3329 IF ( nextpiv2bewritten .GT. monbloc%LastPiv ) THEN
3330 RETURN
3331 ENDIF
3332 10 CONTINUE
3333 nbeff = min(size_panel,monbloc%LastPiv-i+1 )
3334 IF ((nbeff.NE.size_panel) .AND. (.NOT.monbloc%Last)) THEN
3335 GOTO 20
3336 ENDIF
3337 IF (typef.EQ.typef_l.AND.monbloc%MASTER.AND.
3338 & keep_ooc(50).EQ.2 .AND. monbloc%Typenode.NE.3) THEN
3339 IF (monbloc%INDICES(nbeff+i-1) < 0)
3340 & THEN
3341 nbeff=nbeff+1
3342 ENDIF
3343 ENDIF
3344 iend = i + nbeff -1
3345 CALL cmumps_copy_lu_to_buffer( strat, typef, monbloc,
3346 & afac, lafac,
3347 & addvirtdeb, i, iend, lpaneleff,
3348 & ierr)
3349 IF ( ierr .LT. 0 ) THEN
3350 RETURN
3351 ENDIF
3352 IF ( ierr .EQ. 1 ) THEN
3353 ierr=0
3354 GOTO 20
3355 ENDIF
3356 IF (typef .EQ. typef_l) THEN
3357 monbloc%LastPanelWritten_L = monbloc%LastPanelWritten_L+1
3358 ELSE
3359 monbloc%LastPanelWritten_U = monbloc%LastPanelWritten_U+1
3360 ENDIF
3361 addvirtdeb = addvirtdeb + int(lpaneleff,8)
3362 tailleecrite = tailleecrite + int(lpaneleff,8)
3363 i=i+nbeff
3364 IF ( i .LE. monbloc%LastPiv ) GOTO 10
3365 20 CONTINUE
3366 nextpiv2bewritten = i
3367 RETURN
subroutine cmumps_copy_lu_to_buffer(strat, typef, monbloc, afac, lafac, addvirtcour, ipivbeg, ipivend, lpaneleff, ierr)

◆ cmumps_read_ooc()

subroutine, public cmumps_ooc::cmumps_read_ooc ( complex dest,
integer inode,
integer ierr )

Definition at line 392 of file cmumps_ooc.F.

394 IMPLICIT NONE
395 include 'mpif.h'
396 INTEGER IERR,INODE
397 COMPLEX DEST
398 INTEGER ASYNC
399 LOGICAL IO_C
400 INTEGER ADDR_INT1,ADDR_INT2
401 INTEGER TYPE
402 INTEGER SIZE_INT1,SIZE_INT2
403 TYPE=ooc_solve_type_fct
404 IF(size_of_block(step_ooc(inode),ooc_fct_type)
405 & .EQ.0_8)THEN
406 GOTO 555
407 ENDIF
408 IF(strat_io_async)THEN
409 async=1
410 ELSE
411 async=0
412 ENDIF
413 ierr=0
414 io_c=.true.
415 ooc_state_node(step_ooc(inode))=not_used
416 CALL mumps_ooc_convert_bigintto2int(addr_int1,addr_int2,
417 & ooc_vaddr(step_ooc(inode),ooc_fct_type))
418 CALL mumps_ooc_convert_bigintto2int(size_int1,size_int2,
419 & size_of_block(step_ooc(inode),ooc_fct_type))
420 CALL mumps_low_level_direct_read(dest,
421 & size_int1,size_int2,
422 & TYPE,ADDR_INT1,ADDR_INT2,IERR)
423 IF(ierr.LT.0)THEN
424 IF (icntl1.GT.0) THEN
425 WRITE(icntl1,*)myid_ooc,': ',err_str_ooc(1:dim_err_str_ooc)
426 WRITE(icntl1,*)myid_ooc,
427 & ': Problem in MUMPS_LOW_LEVEL_DIRECT_READ'
428 ENDIF
429 RETURN
430 ENDIF
431 555 CONTINUE
432 IF(.NOT.cmumps_solve_is_end_reached())THEN
433 IF(ooc_inode_sequence(cur_pos_sequence,ooc_fct_type).EQ.
434 & inode)THEN
435 IF(solve_step.EQ.0)THEN
436 cur_pos_sequence=cur_pos_sequence+1
437 ELSEIF(solve_step.EQ.1)THEN
438 cur_pos_sequence=cur_pos_sequence-1
439 ENDIF
440 CALL cmumps_ooc_skip_null_size_node()
441 ENDIF
442 ENDIF
443 RETURN

◆ cmumps_read_solve_block()

subroutine cmumps_ooc::cmumps_read_solve_block ( complex dest,
integer (8) indice,
integer (8) size,
integer zone,
integer (8), dimension(nsteps) ptrfac,
integer nsteps,
integer pos_seq,
integer nb_nodes,
integer flag,
integer ierr )

Definition at line 908 of file cmumps_ooc.F.

910 IMPLICIT NONE
911 include 'mpif.h'
912 INTEGER ZONE,NSTEPS,FLAG,POS_SEQ,NB_NODES
913 COMPLEX DEST
914 INTEGER (8) :: INDICE, SIZE, PTRFAC(NSTEPS)
915 INTEGER REQUEST,INODE,IERR
916 INTEGER ADDR_INT1,ADDR_INT2
917 INTEGER TYPE
918 INTEGER SIZE_INT1,SIZE_INT2
919 TYPE=ooc_solve_type_fct
920 ierr=0
921 inode=ooc_inode_sequence(pos_seq,ooc_fct_type)
922 CALL mumps_ooc_convert_bigintto2int(addr_int1,addr_int2,
923 & ooc_vaddr(step_ooc(inode),ooc_fct_type))
924 CALL mumps_ooc_convert_bigintto2int(size_int1,size_int2,
925 & size)
926 CALL mumps_low_level_read_ooc_c(low_level_strat_io,
927 & dest,size_int1,size_int2,
928 & inode,request,TYPE,ADDR_INT1,ADDR_INT2,IERR)
929 IF(ierr.LT.0)THEN
930 IF (icntl1.GT.0)
931 & WRITE(icntl1,*)myid_ooc,': ',err_str_ooc(1:dim_err_str_ooc)
932 RETURN
933 ENDIF
934 IF(strat_io_async)THEN
935 CALL cmumps_update_read_req_node(inode,SIZE,indice,zone,
936 & request,pos_seq,nb_nodes,flag,ptrfac,nsteps,ierr)
937 IF(ierr.LT.0)THEN
938 RETURN
939 ENDIF
940 ELSE
941 CALL cmumps_update_read_req_node(inode,SIZE,indice,zone,
942 & request,pos_seq,nb_nodes,flag,ptrfac,nsteps,ierr)
943 IF(ierr.LT.0)THEN
944 RETURN
945 ENDIF
946 CALL cmumps_solve_update_pointers(io_req(step_ooc(inode)),
947 & ptrfac,nsteps)
948 req_act=req_act-1
949 ENDIF

◆ cmumps_search_solve()

subroutine cmumps_ooc::cmumps_search_solve ( integer (8) addr,
integer zone )

Definition at line 2201 of file cmumps_ooc.F.

2202 IMPLICIT NONE
2203 INTEGER (8) :: ADDR
2204 INTEGER ZONE
2205 INTEGER I
2206 i=1
2207 DO WHILE (i.LE.nb_z)
2208 IF(addr.LT.ideb_solve_z(i))THEN
2209 EXIT
2210 ENDIF
2211 i=i+1
2212 ENDDO
2213 zone=i-1

◆ cmumps_set_strat_io_flags()

subroutine cmumps_ooc::cmumps_set_strat_io_flags ( integer, intent(in) strat_io_arg,
logical, intent(out) strat_io_async_arg,
logical, intent(out) with_buf_arg,
integer, intent(out) low_level_strat_io_arg )

Definition at line 70 of file cmumps_ooc.F.

72 IMPLICIT NONE
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
76 INTEGER TMP
77 CALL mumps_ooc_is_async_avail(tmp)
78 strat_io_async_arg=.false.
79 with_buf_arg=.false.
80 IF(tmp.EQ.1)THEN
81 IF((strat_io_arg.EQ.1).OR.(strat_io_arg.EQ.2))THEN
82 strat_io_async=.true.
83 with_buf=.false.
84 ELSEIF((strat_io_arg.EQ.4).OR.(strat_io_arg.EQ.5))THEN
85 strat_io_async_arg=.true.
86 with_buf_arg=.true.
87 ELSEIF(strat_io_arg.EQ.3)THEN
88 strat_io_async_arg=.false.
89 with_buf_arg=.true.
90 ENDIF
91 low_level_strat_io_arg=mod(strat_io_arg,3)
92 ELSE
93 low_level_strat_io_arg=0
94 IF(strat_io_arg.GE.3)THEN
95 with_buf_arg=.true.
96 ENDIF
97 ENDIF
98 RETURN

◆ cmumps_solve_alloc_factor_space()

subroutine, public cmumps_ooc::cmumps_solve_alloc_factor_space ( integer inode,
integer(8), dimension(keep(28)) ptrfac,
integer, dimension(500) keep,
integer(8), dimension(150) keep8,
complex, dimension(fact_area_size) a,
integer, intent(out) ierr )

Definition at line 1472 of file cmumps_ooc.F.

1475 IMPLICIT NONE
1476 INTEGER INODE,KEEP(500)
1477 INTEGER, intent(out)::IERR
1478 INTEGER(8) KEEP8(150)
1479 INTEGER(8) :: PTRFAC(KEEP(28))
1480 COMPLEX A(FACT_AREA_SIZE)
1481 INTEGER(8) :: REQUESTED_SIZE
1482 INTEGER ZONE,IFLAG
1483 ierr=0
1484 iflag=0
1485 IF(size_of_block(step_ooc(inode),ooc_fct_type)
1486 & .EQ.0_8)THEN
1487 inode_to_pos(step_ooc(inode))=1
1488 ooc_state_node(step_ooc(inode))=not_used
1489 ptrfac(step_ooc(inode))=1_8
1490 RETURN
1491 ENDIF
1492 requested_size=size_of_block(step_ooc(inode),ooc_fct_type)
1493 zone=nb_z
1494 IF(current_pos_t(zone).GT.
1495 & (pdeb_solve_z(zone)+max_nb_nodes_for_zone-1))THEN
1496 CALL cmumps_free_space_for_solve(a,fact_area_size,
1497 & requested_size,ptrfac,keep(28),zone,ierr)
1498 IF(ierr.LT.0)THEN
1499 RETURN
1500 ENDIF
1501 ENDIF
1502 IF((lrlu_solve_t(zone).GT.size_of_block(step_ooc(inode),
1503 & ooc_fct_type)).AND.
1504 & (current_pos_t(zone).LE.
1505 & (pdeb_solve_z(zone)+max_nb_nodes_for_zone-1)))THEN
1506 CALL cmumps_solve_alloc_ptr_upd_t(inode,ptrfac,
1507 & keep,keep8,a,zone)
1508 ELSEIF(lrlu_solve_b(zone).GT.size_of_block(step_ooc(inode),
1509 & ooc_fct_type).AND.
1510 & (current_pos_b(zone).GT.0))THEN
1511 CALL cmumps_solve_alloc_ptr_upd_b(inode,ptrfac,
1512 & keep,keep8,a,zone)
1513 ELSE
1514 IF(cmumps_is_there_free_space(inode,zone))THEN
1515 IF(solve_step.EQ.0)THEN
1516 CALL cmumps_get_top_area_space(a,fact_area_size,
1517 & requested_size,ptrfac,
1518 & keep(28),zone,iflag,ierr)
1519 IF(ierr.LT.0)THEN
1520 RETURN
1521 ENDIF
1522 IF(iflag.EQ.1)THEN
1523 CALL cmumps_solve_alloc_ptr_upd_t(inode,ptrfac,
1524 & keep,keep8,a,zone)
1525 ELSEIF(iflag.EQ.0)THEN
1526 CALL cmumps_get_bottom_area_space(a,fact_area_size,
1527 & requested_size,ptrfac,
1528 & keep(28),zone,iflag,ierr)
1529 IF(ierr.LT.0)THEN
1530 RETURN
1531 ENDIF
1532 IF(iflag.EQ.1)THEN
1533 CALL cmumps_solve_alloc_ptr_upd_b(inode,ptrfac,
1534 & keep,keep8,a,zone)
1535 ENDIF
1536 ENDIF
1537 ELSE
1538 CALL cmumps_get_bottom_area_space(a,fact_area_size,
1539 & requested_size,ptrfac,
1540 & keep(28),zone,iflag,ierr)
1541 IF(ierr.LT.0)THEN
1542 RETURN
1543 ENDIF
1544 IF(iflag.EQ.1)THEN
1545 CALL cmumps_solve_alloc_ptr_upd_b(inode,ptrfac,
1546 & keep,keep8,a,zone)
1547 ELSEIF(iflag.EQ.0)THEN
1548 CALL cmumps_get_top_area_space(a,fact_area_size,
1549 & requested_size,ptrfac,
1550 & keep(28),zone,iflag,ierr)
1551 IF(ierr.LT.0)THEN
1552 RETURN
1553 ENDIF
1554 IF(iflag.EQ.1)THEN
1555 CALL cmumps_solve_alloc_ptr_upd_t(inode,ptrfac,
1556 & keep,keep8,a,zone)
1557 ENDIF
1558 ENDIF
1559 ENDIF
1560 IF(iflag.EQ.0)THEN
1561 CALL cmumps_free_space_for_solve(a,fact_area_size,
1562 & requested_size,ptrfac,keep(28),zone,ierr)
1563 IF(ierr.LT.0)THEN
1564 RETURN
1565 ENDIF
1566 CALL cmumps_solve_alloc_ptr_upd_t(inode,ptrfac,
1567 & keep,keep8,a,zone)
1568 ENDIF
1569 ELSE
1570 WRITE(*,*)myid_ooc,': Internal error (8) in OOC ',
1571 & ' Not enough space for Solve',inode,
1572 & size_of_block(step_ooc(inode),ooc_fct_type),
1573 & lrlus_solve(zone)
1574 CALL mumps_abort()
1575 ENDIF
1576 ENDIF
1577 IF(lrlus_solve(zone).LT.0_8)THEN
1578 WRITE(*,*)myid_ooc,': Internal error (9) in OOC ',
1579 & ' LRLUS_SOLVE must be (3) > 0'
1580 CALL mumps_abort()
1581 ENDIF
1582 RETURN

◆ cmumps_solve_alloc_ptr_upd_b()

subroutine cmumps_ooc::cmumps_solve_alloc_ptr_upd_b ( integer inode,
integer(8), dimension(keep(28)) ptrfac,
integer, dimension(500) keep,
integer(8), dimension(150) keep8,
complex, dimension(fact_area_size) a,
integer zone )

Definition at line 1922 of file cmumps_ooc.F.

1925 IMPLICIT NONE
1926 INTEGER INODE,KEEP(500)
1927 INTEGER(8) KEEP8(150)
1928 INTEGER(8) :: PTRFAC(KEEP(28))
1929 COMPLEX A(FACT_AREA_SIZE)
1930 INTEGER ZONE
1931 IF(pos_hole_b(zone).EQ.-9999)THEN
1932 WRITE(*,*)myid_ooc,': Internal error (22) in OOC ',
1933 & ' CMUMPS_SOLVE_ALLOC_PTR_UPD_B'
1934 CALL mumps_abort()
1935 ENDIF
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 IF(ptrfac(step_ooc(inode)).LT.ideb_solve_z(zone))THEN
1944 WRITE(*,*)myid_ooc,': Internal error (23) in OOC ',
1945 & ptrfac(step_ooc(inode)),ideb_solve_z(zone)
1946 CALL mumps_abort()
1947 ENDIF
1948 inode_to_pos(step_ooc(inode))=current_pos_b(zone)
1949 IF(current_pos_b(zone).EQ.0)THEN
1950 WRITE(*,*)myid_ooc,': Internal error (23b) in OOC '
1951 CALL mumps_abort()
1952 ENDIF
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)

◆ cmumps_solve_alloc_ptr_upd_t()

subroutine cmumps_ooc::cmumps_solve_alloc_ptr_upd_t ( integer inode,
integer(8), dimension(keep(28)) ptrfac,
integer, dimension(500) keep,
integer(8), dimension(150) keep8,
complex, dimension(fact_area_size) a,
integer zone )

Definition at line 1882 of file cmumps_ooc.F.

1884 IMPLICIT NONE
1885 INTEGER INODE,KEEP(500)
1886 INTEGER(8) KEEP8(150)
1887 INTEGER(8) :: PTRFAC(KEEP(28))
1888 COMPLEX A(FACT_AREA_SIZE)
1889 INTEGER ZONE
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 IF(posfac_solve(zone).EQ.ideb_solve_z(zone))THEN
1897 pos_hole_b(zone)=-9999
1898 current_pos_b(zone)=-9999
1899 lrlu_solve_b(zone)=0_8
1900 ENDIF
1901 IF(ptrfac(step_ooc(inode)).LT.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
1905 CALL mumps_abort()
1906 ENDIF
1907 inode_to_pos(step_ooc(inode))=current_pos_t(zone)
1908 pos_in_mem(current_pos_t(zone))=inode
1909 IF(current_pos_t(zone).GT.(pdeb_solve_z(zone)+
1910 & max_nb_nodes_for_zone-1))THEN
1911 WRITE(*,*)myid_ooc,': Internal error (21) in OOC ',
1912 & ' Problem with CURRENT_POS_T',
1913 & current_pos_t(zone),zone
1914 CALL mumps_abort()
1915 ENDIF
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)

◆ cmumps_solve_compute_read_size()

subroutine cmumps_ooc::cmumps_solve_compute_read_size ( integer zone,
integer(8) size,
integer(8) dest,
integer pos_seq,
integer nb_nodes,
integer flag,
integer(8), dimension(nsteps) ptrfac,
integer nsteps )

Definition at line 2353 of file cmumps_ooc.F.

2355 IMPLICIT NONE
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,
2360 & NB_NODES
2361 INTEGER NB_NODES_LOC
2362 LOGICAL ALREADY
2363 IF(cmumps_solve_is_end_reached())THEN
2364 size=0_8
2365 RETURN
2366 ENDIF
2367 IF(flag.EQ.0)THEN
2368 max_size=lrlu_solve_b(zone)
2369 max_nb=max(0,current_pos_b(zone)-pdeb_solve_z(zone)+1)
2370 ELSEIF(flag.EQ.1)THEN
2371 max_size=lrlu_solve_t(zone)
2372 max_nb=max_nb_nodes_for_zone
2373 ELSE
2374 WRITE(*,*)myid_ooc,': Internal error (35) in OOC ',
2375 & ' Unknown Flag value in ',
2376 & ' CMUMPS_SOLVE_COMPUTE_READ_SIZE',flag
2377 CALL mumps_abort()
2378 ENDIF
2379 CALL cmumps_ooc_skip_null_size_node()
2380 i=cur_pos_sequence
2381 start_node=ooc_inode_sequence(i,ooc_fct_type)
2382 already=.false.
2383 nb_nodes=0
2384 nb_nodes_loc=0
2385 IF(zone.EQ.nb_z)THEN
2386 size=size_of_block(step_ooc(start_node),ooc_fct_type)
2387 ELSE
2388 j8=0_8
2389 IF(flag.EQ.0)THEN
2390 k=0
2391 ELSEIF(flag.EQ.1)THEN
2392 k=current_pos_t(zone)-pdeb_solve_z(zone)+1
2393 ENDIF
2394 IF(solve_step.EQ.0)THEN
2395 i=cur_pos_sequence
2396 DO WHILE(i.LE.total_nb_ooc_nodes(ooc_fct_type))
2397 IF(size_of_block(step_ooc(ooc_inode_sequence(i,
2398 & ooc_fct_type)),
2399 & ooc_fct_type)
2400 & .NE.0_8)THEN
2401 EXIT
2402 ENDIF
2403 i=i+1
2404 ENDDO
2405 cur_pos_sequence=min(i,total_nb_ooc_nodes(ooc_fct_type))
2406 i=cur_pos_sequence
2407 DO WHILE((j8.LE.max_size).AND.
2408 & (i.LE.total_nb_ooc_nodes(ooc_fct_type)).AND.
2409 & (k.LT.max_nb) )
2410 last=size_of_block(step_ooc(ooc_inode_sequence(i,
2411 & ooc_fct_type)),
2412 & ooc_fct_type)
2413 IF(last.EQ.0_8)THEN
2414 IF(.NOT.already)THEN
2415 cur_pos_sequence=cur_pos_sequence+1
2416 ENDIF
2417 i=i+1
2418 nb_nodes_loc=nb_nodes_loc+1
2419 cycle
2420 ENDIF
2421 IF((inode_to_pos(step_ooc(ooc_inode_sequence(i,
2422 & ooc_fct_type)))
2423 & .NE.0).OR.
2424 & (io_req(step_ooc(ooc_inode_sequence(i,
2425 & ooc_fct_type))).GE.
2426 & 0))THEN
2427 IF(.NOT.already)THEN
2428 cur_pos_sequence=cur_pos_sequence+1
2429 i=i+1
2430 cycle
2431 ELSE
2432 EXIT
2433 ENDIF
2434 ENDIF
2435 already=.true.
2436 j8=j8+last
2437 i=i+1
2438 k=k+1
2439 nb_nodes_loc=nb_nodes_loc+1
2440 nb_nodes=nb_nodes+1
2441 ENDDO
2442 IF(j8.GT.max_size)THEN
2443 size=j8-last
2444 nb_nodes=nb_nodes-1
2445 nb_nodes_loc=nb_nodes_loc-1
2446 ELSE
2447 size=j8
2448 ENDIF
2449 DO WHILE (cur_pos_sequence+nb_nodes_loc-1.GE.
2450 & cur_pos_sequence)
2451 IF(size_of_block(step_ooc(
2452 & ooc_inode_sequence(cur_pos_sequence+nb_nodes-1,
2453 & ooc_fct_type)),
2454 & ooc_fct_type)
2455 & .NE.0_8)THEN
2456 EXIT
2457 ENDIF
2458 nb_nodes_loc=nb_nodes_loc-1
2459 ENDDO
2460 pos_seq=cur_pos_sequence
2461 ELSEIF(solve_step.EQ.1)THEN
2462 DO WHILE(i.GE.1)
2463 IF(size_of_block(step_ooc(ooc_inode_sequence(i,
2464 & ooc_fct_type)),
2465 & ooc_fct_type)
2466 & .NE.0_8)THEN
2467 EXIT
2468 ENDIF
2469 i=i-1
2470 ENDDO
2471 cur_pos_sequence=max(i,1)
2472 i=cur_pos_sequence
2473 DO WHILE((j8.LE.max_size).AND.(i.GE.1).AND.
2474 & (k.LT.max_nb))
2475 last=size_of_block(step_ooc(ooc_inode_sequence(i,
2476 & ooc_fct_type)),
2477 & ooc_fct_type)
2478 IF(last.EQ.0_8)THEN
2479 IF(.NOT.already)THEN
2480 cur_pos_sequence=cur_pos_sequence-1
2481 ENDIF
2482 nb_nodes_loc=nb_nodes_loc+1
2483 i=i-1
2484 cycle
2485 ENDIF
2486 IF((inode_to_pos(step_ooc(ooc_inode_sequence(i,
2487 & ooc_fct_type)))
2488 & .NE.0).OR.
2489 & (io_req(step_ooc(ooc_inode_sequence(i,
2490 & ooc_fct_type))).GE.
2491 & 0))THEN
2492 IF(.NOT.already)THEN
2493 i=i-1
2494 cur_pos_sequence=cur_pos_sequence-1
2495 cycle
2496 ELSE
2497 EXIT
2498 ENDIF
2499 ENDIF
2500 already=.true.
2501 j8=j8+last
2502 i=i-1
2503 k=k+1
2504 nb_nodes=nb_nodes+1
2505 nb_nodes_loc=nb_nodes_loc+1
2506 ENDDO
2507 IF(j8.GT.max_size)THEN
2508 size=j8-last
2509 nb_nodes=nb_nodes-1
2510 nb_nodes_loc=nb_nodes_loc-1
2511 ELSE
2512 size=j8
2513 ENDIF
2514 i=cur_pos_sequence-nb_nodes_loc+1
2515 DO WHILE (i.LE.cur_pos_sequence)
2516 IF(size_of_block(step_ooc(
2517 & ooc_inode_sequence(i,ooc_fct_type)),
2518 & ooc_fct_type).NE.0_8)THEN
2519 EXIT
2520 ENDIF
2521 i=i+1
2522 nb_nodes_loc=nb_nodes_loc-1
2523 ENDDO
2524 pos_seq=cur_pos_sequence-nb_nodes_loc+1
2525 ENDIF
2526 ENDIF
2527 IF(flag.EQ.0)THEN
2528 dest=ideb_solve_z(zone)+lrlu_solve_b(zone)-SIZE
2529 ELSE
2530 dest=posfac_solve(zone)
2531 ENDIF

◆ cmumps_solve_find_zone()

subroutine cmumps_ooc::cmumps_solve_find_zone ( integer inode,
integer zone,
integer (8), dimension(nsteps) ptrfac,
integer nsteps )

Definition at line 1441 of file cmumps_ooc.F.

1442 IMPLICIT NONE
1443 INTEGER INODE,ZONE,NSTEPS
1444 INTEGER (8) :: PTRFAC(NSTEPS)
1445 zone=1
1446 DO WHILE (zone.LE.nb_z)
1447 IF(ptrfac(step_ooc(inode)).LT.ideb_solve_z(zone))THEN
1448 zone=zone-1
1449 EXIT
1450 ENDIF
1451 zone=zone+1
1452 ENDDO
1453 IF(zone.EQ.nb_z+1)THEN
1454 zone=zone-1
1455 ENDIF

◆ cmumps_solve_init_ooc_bwd()

subroutine, public cmumps_ooc::cmumps_solve_init_ooc_bwd ( integer(8), dimension(nsteps) ptrfac,
integer nsteps,
integer mtype,
logical i_worked_on_root,
integer iroot,
complex, dimension(la) a,
integer(8) la,
integer, intent(out) ierr )

Definition at line 2742 of file cmumps_ooc.F.

2744 IMPLICIT NONE
2745 INTEGER NSTEPS
2746 INTEGER(8) :: LA
2747 INTEGER(8) :: PTRFAC(NSTEPS)
2748 INTEGER MTYPE
2749 INTEGER IROOT
2750 LOGICAL I_WORKED_ON_ROOT
2751 INTEGER, intent(out):: IERR
2752 COMPLEX A(LA)
2753 INTEGER(8) :: DUMMY_SIZE
2754 INTEGER ZONE
2755 INTEGER MUMPS_OOC_GET_FCT_TYPE
2756 EXTERNAL mumps_ooc_get_fct_type
2757 ierr=0
2758 ooc_fct_type=mumps_ooc_get_fct_type("B",mtype,keep_ooc(201),
2759 & keep_ooc(50))
2760 ooc_solve_type_fct = ooc_fct_type - 1
2761 IF (keep_ooc(201).NE.1) ooc_solve_type_fct=fct
2762 solve_step=1
2763 cur_pos_sequence=total_nb_ooc_nodes(ooc_fct_type)
2764 mtype_ooc=mtype
2765 IF ( keep_ooc(201).NE.1
2766 & .OR. keep_ooc(50).NE.0
2767 & ) THEN
2768 CALL cmumps_solve_prepare_pref(ptrfac,nsteps,a,la)
2769 IF (i_worked_on_root.AND.
2770 $ ((iroot.GT.0)))THEN
2771 IF(size_of_block(step_ooc(iroot),ooc_fct_type).NE.0) THEN
2772 IF (.NOT.(keep_ooc(237).NE.0 .OR. keep_ooc(235).NE.0))
2773 & THEN
2774 CALL cmumps_free_factors_for_solve ( iroot,
2775 & ptrfac, keep_ooc(28), a, la,.false.,ierr)
2776 IF (ierr .LT. 0) RETURN
2777 ENDIF
2778 CALL cmumps_solve_find_zone(iroot,
2779 & zone,ptrfac,nsteps)
2780 IF(zone.EQ.nb_z)THEN
2781 dummy_size=1_8
2782 CALL cmumps_free_space_for_solve(a,la,
2783 & dummy_size,ptrfac,
2784 & nsteps,nb_z,ierr)
2785 IF (ierr .LT. 0) THEN
2786 WRITE(*,*)myid_ooc,': Internal error in
2787 & CMUMPS_FREE_SPACE_FOR_SOLVE',
2788 & ierr
2789 CALL mumps_abort()
2790 ENDIF
2791 ENDIF
2792 ENDIF
2793 ENDIF
2794 IF (nb_z.GT.1) THEN
2795 CALL cmumps_submit_read_for_z(a,la,ptrfac,
2796 & keep_ooc(28),ierr)
2797 IF (ierr .LT. 0) RETURN
2798 ENDIF
2799 ELSE
2800 CALL cmumps_solve_stat_reinit_panel(keep_ooc(28),
2801 & keep_ooc(38), keep_ooc(20) )
2802 CALL cmumps_initiate_read_ops(a,la,ptrfac,keep_ooc(28),ierr)
2803 IF (ierr .LT. 0 ) RETURN
2804 ENDIF
2805 RETURN
integer function mumps_ooc_get_fct_type(fwdorbwd, mtype, k201, k50)

◆ cmumps_solve_init_ooc_fwd()

subroutine, public cmumps_ooc::cmumps_solve_init_ooc_fwd ( integer(8), dimension(nsteps) ptrfac,
integer nsteps,
integer mtype,
complex, dimension(la) a,
integer(8) la,
logical doprefetch,
integer, intent(out) ierr )

Definition at line 2705 of file cmumps_ooc.F.

2707 IMPLICIT NONE
2708 INTEGER NSTEPS,MTYPE
2709 INTEGER, intent(out)::IERR
2710 INTEGER(8) :: LA
2711 COMPLEX A(LA)
2712 INTEGER(8) :: PTRFAC(NSTEPS)
2713 LOGICAL DOPREFETCH
2714 INTEGER MUMPS_OOC_GET_FCT_TYPE
2715 EXTERNAL mumps_ooc_get_fct_type
2716 ierr = 0
2717 ooc_fct_type=mumps_ooc_get_fct_type("F",mtype,keep_ooc(201),
2718 & keep_ooc(50))
2719 ooc_solve_type_fct = ooc_fct_type - 1
2720 IF (keep_ooc(201).NE.1) THEN
2721 ooc_solve_type_fct = fct
2722 ENDIF
2723 solve_step=0
2724 cur_pos_sequence=1
2725 mtype_ooc=mtype
2726 IF ( keep_ooc(201).NE.1
2727 & .OR. keep_ooc(50).NE.0
2728 & ) THEN
2729 CALL cmumps_solve_prepare_pref(ptrfac,nsteps,a,la)
2730 ELSE
2731 CALL cmumps_solve_stat_reinit_panel(keep_ooc(28),
2732 & keep_ooc(38), keep_ooc(20) )
2733 ENDIF
2734 IF (doprefetch) THEN
2735 CALL cmumps_initiate_read_ops(a,la,ptrfac,
2736 & keep_ooc(28),ierr)
2737 ELSE
2738 cur_pos_sequence = total_nb_ooc_nodes(ooc_fct_type)
2739 ENDIF
2740 RETURN

◆ cmumps_solve_is_end_reached()

logical function cmumps_ooc::cmumps_solve_is_end_reached

Definition at line 2215 of file cmumps_ooc.F.

2216 IMPLICIT NONE
2217 LOGICAL CMUMPS_SOLVE_IS_END_REACHED
2218 cmumps_solve_is_end_reached=.false.
2219 IF(solve_step.EQ.0)THEN
2220 IF(cur_pos_sequence.GT.total_nb_ooc_nodes(ooc_fct_type))THEN
2221 cmumps_solve_is_end_reached=.true.
2222 ENDIF
2223 ELSEIF(solve_step.EQ.1)THEN
2224 IF(cur_pos_sequence.LT.1)THEN
2225 cmumps_solve_is_end_reached=.true.
2226 ENDIF
2227 ENDIF
2228 RETURN

◆ cmumps_solve_is_inode_in_mem()

integer function cmumps_ooc::cmumps_solve_is_inode_in_mem ( integer inode,
integer (8), dimension(nsteps) ptrfac,
integer nsteps,
complex, dimension(la) a,
integer(8) la,
integer, intent(out) ierr )

Definition at line 1324 of file cmumps_ooc.F.

1326 IMPLICIT NONE
1327 INTEGER INODE,NSTEPS
1328 INTEGER(8) :: LA
1329 INTEGER, INTENT(out)::IERR
1330 COMPLEX A(LA)
1331 INTEGER (8) :: PTRFAC(NSTEPS)
1332 INTEGER CMUMPS_SOLVE_IS_INODE_IN_MEM
1333 ierr=0
1334 IF(inode_to_pos(step_ooc(inode)).GT.0)THEN
1335 IF(ooc_state_node(step_ooc(inode)).EQ.permuted)THEN
1336 cmumps_solve_is_inode_in_mem=ooc_node_permuted
1337 ELSE
1338 cmumps_solve_is_inode_in_mem=ooc_node_not_permuted
1339 ENDIF
1340 IF(.NOT.cmumps_solve_is_end_reached())THEN
1341 IF(ooc_inode_sequence(cur_pos_sequence,ooc_fct_type)
1342 & .EQ.inode)THEN
1343 IF(solve_step.EQ.0)THEN
1344 cur_pos_sequence=cur_pos_sequence+1
1345 ELSEIF(solve_step.EQ.1)THEN
1346 cur_pos_sequence=cur_pos_sequence-1
1347 ENDIF
1348 CALL cmumps_ooc_skip_null_size_node()
1349 ENDIF
1350 ENDIF
1351 ELSEIF(inode_to_pos(step_ooc(inode)).LT.0)THEN
1352 IF(inode_to_pos(step_ooc(inode)).LT.-((n_ooc+1)*nb_z))THEN
1353 CALL mumps_wait_request(io_req(step_ooc(inode)),ierr)
1354 IF(ierr.LT.0)THEN
1355 IF (icntl1.GT.0)
1356 & WRITE(icntl1,*)myid_ooc,': Internal error (7) in OOC ',
1357 & err_str_ooc(1:dim_err_str_ooc)
1358 RETURN
1359 ENDIF
1360 CALL cmumps_solve_update_pointers(io_req(step_ooc(inode)),
1361 & ptrfac,nsteps)
1362 req_act=req_act-1
1363 ELSE
1364 CALL cmumps_solve_upd_node_info(inode,ptrfac,nsteps)
1365 IF(.NOT.cmumps_solve_is_end_reached())THEN
1366 IF(ooc_inode_sequence(cur_pos_sequence,ooc_fct_type).EQ.
1367 & inode)THEN
1368 IF(solve_step.EQ.0)THEN
1369 cur_pos_sequence=cur_pos_sequence+1
1370 ELSEIF(solve_step.EQ.1)THEN
1371 cur_pos_sequence=cur_pos_sequence-1
1372 ENDIF
1373 CALL cmumps_ooc_skip_null_size_node()
1374 ENDIF
1375 ENDIF
1376 ENDIF
1377 IF(ooc_state_node(step_ooc(inode)).EQ.permuted)THEN
1378 cmumps_solve_is_inode_in_mem=ooc_node_permuted
1379 ELSE
1380 cmumps_solve_is_inode_in_mem=ooc_node_not_permuted
1381 ENDIF
1382 ELSE
1383 cmumps_solve_is_inode_in_mem=ooc_node_not_in_mem
1384 ENDIF
1385 RETURN

◆ cmumps_solve_modify_state_node()

subroutine cmumps_ooc::cmumps_solve_modify_state_node ( integer inode)

Definition at line 1387 of file cmumps_ooc.F.

1388 IMPLICIT NONE
1389 INTEGER INODE
1390 IF ( (keep_ooc(237).EQ.0)
1391 & .AND. (keep_ooc(235).EQ.0) ) THEN
1392 IF(ooc_state_node(step_ooc(inode)).NE.not_used)THEN
1393 WRITE(*,*)myid_ooc,': INTERNAL ERROR (51) in OOC',inode,
1394 & ooc_state_node(step_ooc(inode))
1395 CALL mumps_abort()
1396 ENDIF
1397 ENDIF
1398 ooc_state_node(step_ooc(inode))=permuted

◆ cmumps_solve_prepare_pref()

subroutine cmumps_ooc::cmumps_solve_prepare_pref ( integer(8), dimension(nsteps), intent(inout) ptrfac,
integer, intent(in) nsteps,
complex, dimension(la) a,
integer(8), intent(in) la )

Definition at line 2609 of file cmumps_ooc.F.

2611 IMPLICIT NONE
2612 INTEGER, INTENT(in) :: NSTEPS
2613 INTEGER(8), INTENT(INOUT) :: PTRFAC(NSTEPS)
2614 INTEGER(8), INTENT(IN) :: LA
2615 COMPLEX :: A(LA)
2616 INTEGER :: I, TMP, ZONE, IPAS, IBEG, IEND
2617 INTEGER(8) :: SAVE_PTR
2618 LOGICAL :: COMPRESS_TO_BE_DONE, SET_POS_SEQUENCE
2619 INTEGER :: J, IERR
2620 INTEGER(8) :: DUMMY_SIZE
2621 compress_to_be_done = .false.
2622 dummy_size = 1_8
2623 ierr = 0
2624 set_pos_sequence = .true.
2625 IF(solve_step.EQ.0)THEN
2626 ibeg = 1
2627 iend = total_nb_ooc_nodes(ooc_fct_type)
2628 ipas = 1
2629 ELSE
2630 ibeg = total_nb_ooc_nodes(ooc_fct_type)
2631 iend = 1
2632 ipas = -1
2633 ENDIF
2634 DO i=ibeg,iend,ipas
2635 j = ooc_inode_sequence(i,ooc_fct_type)
2636 tmp=inode_to_pos(step_ooc(j))
2637 IF(tmp.EQ.0)THEN
2638 IF (set_pos_sequence) THEN
2639 set_pos_sequence = .false.
2640 cur_pos_sequence = i
2641 ENDIF
2642 IF (keep_ooc(237).EQ.0 .AND. keep_ooc(235).EQ.0) THEN
2643 ooc_state_node(step_ooc(j)) = not_in_mem
2644 ENDIF
2645 cycle
2646 ELSE IF(tmp.LT.0)THEN
2647 IF(tmp.GT.-(n_ooc+1)*nb_z)THEN
2648 save_ptr=ptrfac(step_ooc(j))
2649 ptrfac(step_ooc(j)) = abs(save_ptr)
2650 CALL cmumps_solve_find_zone(j,
2651 & zone,ptrfac,nsteps)
2652 ptrfac(step_ooc(j)) = save_ptr
2653 IF(zone.EQ.nb_z)THEN
2654 IF(j.NE.special_root_node)THEN
2655 WRITE(*,*)myid_ooc,': Internal error 6 ',
2656 & ' Node ', j,
2657 & ' is in status USED in the
2658 & emmergency buffer '
2659 CALL mumps_abort()
2660 ENDIF
2661 ENDIF
2662 IF (keep_ooc(237).NE.0 .OR. keep_ooc(235).NE.0)
2663 & THEN
2664 IF (ooc_state_node(step_ooc(j)).EQ.not_in_mem) THEN
2665 ooc_state_node(step_ooc(j)) = used
2666 IF((solve_step.NE.0).AND.(j.NE.special_root_node)
2667 & .AND.(zone.NE.nb_z))THEN
2668 CALL cmumps_solve_upd_node_info(j,ptrfac,nsteps)
2669 ENDIF
2670 cycle
2671 ELSEIF(ooc_state_node(step_ooc(j)).EQ.used)
2672 & THEN
2673 compress_to_be_done = .true.
2674 ELSE
2675 WRITE(*,*)myid_ooc,': Internal error Mila 4 ',
2676 & ' wrong node status :', ooc_state_node(step_ooc(j)),
2677 & ' on node ', j
2678 CALL mumps_abort()
2679 ENDIF
2680 ENDIF
2681 IF (keep_ooc(237).EQ.0 .AND. keep_ooc(235).EQ.0) THEN
2682 CALL cmumps_solve_upd_node_info(j,ptrfac,nsteps)
2683 ENDIF
2684 ENDIF
2685 ENDIF
2686 ENDDO
2687 IF (keep_ooc(237).NE.0 .OR. keep_ooc(235).NE.0)
2688 & THEN
2689 IF (compress_to_be_done) THEN
2690 DO zone=1,nb_z-1
2691 CALL cmumps_free_space_for_solve(a,la,
2692 & dummy_size,ptrfac,
2693 & nsteps,zone,ierr)
2694 IF (ierr .LT. 0) THEN
2695 WRITE(*,*)myid_ooc,': Internal error Mila 5 ',
2696 & ' IERR on return to CMUMPS_FREE_SPACE_FOR_SOLVE =',
2697 & ierr
2698 CALL mumps_abort()
2699 ENDIF
2700 ENDDO
2701 ENDIF
2702 ENDIF
2703 RETURN

◆ cmumps_solve_select_zone()

subroutine cmumps_ooc::cmumps_solve_select_zone ( integer zone)

Definition at line 1462 of file cmumps_ooc.F.

1463 IMPLICIT NONE
1464 INTEGER ZONE
1465 IF(nb_z.GT.1)THEN
1466 current_solve_read_zone=mod((current_solve_read_zone+1),nb_z-1)
1467 zone=current_solve_read_zone+1
1468 ELSE
1469 zone=nb_z
1470 ENDIF

◆ cmumps_solve_stat_reinit_panel()

subroutine cmumps_ooc::cmumps_solve_stat_reinit_panel ( integer nsteps,
integer keep38,
integer keep20 )

Definition at line 2979 of file cmumps_ooc.F.

2981 IMPLICIT NONE
2982 INTEGER NSTEPS
2983 INTEGER I, J
2984 INTEGER(8) :: TMP_SIZE8
2985 INTEGER KEEP38, KEEP20
2986 inode_to_pos = 0
2987 pos_in_mem = 0
2988 ooc_state_node(1:nsteps)=0
2989 tmp_size8=1_8
2990 j=1
2991 DO i=1,nb_z-1
2992 ideb_solve_z(i)=tmp_size8
2993 pdeb_solve_z(i)=j
2994 posfac_solve(i)=tmp_size8
2995 lrlus_solve(i) =size_zone_solve
2996 lrlu_solve_t(i)=size_zone_solve
2997 lrlu_solve_b(i)=0_8
2998 size_solve_z(i)=size_zone_solve
2999 current_pos_t(i)=j
3000 current_pos_b(i)=j
3001 pos_hole_t(i) =j
3002 pos_hole_b(i) =j
3003 j = j + max_nb_nodes_for_zone
3004 tmp_size8 = tmp_size8 + size_zone_solve
3005 ENDDO
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
3015 pos_hole_t(nb_z) =j
3016 pos_hole_b(nb_z) =j
3017 io_req=-77777
3018 size_of_read=-9999_8
3019 first_pos_in_read=-9999
3020 read_dest=-9999_8
3021 read_mng=-9999
3022 req_to_zone=-9999
3023 req_id=-9999
3024 RETURN

◆ cmumps_solve_try_zone_for_read()

subroutine cmumps_ooc::cmumps_solve_try_zone_for_read ( integer zone)

Definition at line 1457 of file cmumps_ooc.F.

1458 IMPLICIT NONE
1459 INTEGER ZONE
1460 zone=mod((current_solve_read_zone+1),nb_z-1)+1

◆ cmumps_solve_upd_node_info()

subroutine cmumps_ooc::cmumps_solve_upd_node_info ( integer inode,
integer (8), dimension(nsteps) ptrfac,
integer nsteps )

Definition at line 1400 of file cmumps_ooc.F.

1401 IMPLICIT NONE
1402 INTEGER INODE,NSTEPS
1403 INTEGER (8) :: PTRFAC(NSTEPS)
1404 INTEGER ZONE
1405 inode_to_pos(step_ooc(inode))=-inode_to_pos(step_ooc(inode))
1406 pos_in_mem(inode_to_pos(step_ooc(inode)))=
1407 & -pos_in_mem(inode_to_pos(step_ooc(inode)))
1408 ptrfac(step_ooc(inode))=-ptrfac(step_ooc(inode))
1409 IF(ooc_state_node(step_ooc(inode)).EQ.used_not_permuted)THEN
1410 ooc_state_node(step_ooc(inode))=not_used
1411 ELSEIF(ooc_state_node(step_ooc(inode)).EQ.used)THEN
1412 ooc_state_node(step_ooc(inode))=permuted
1413 ELSE
1414 WRITE(*,*)myid_ooc,': Internal error (52) in OOC',inode,
1415 & ooc_state_node(step_ooc(inode)),
1416 & inode_to_pos(step_ooc(inode))
1417 CALL mumps_abort()
1418 ENDIF
1419 CALL cmumps_search_solve(ptrfac(step_ooc(inode)),zone)
1420 IF(inode_to_pos(step_ooc(inode)).LE.pos_hole_b(zone))THEN
1421 IF(inode_to_pos(step_ooc(inode)).GT.
1422 & pdeb_solve_z(zone))THEN
1423 pos_hole_b(zone)=
1424 & inode_to_pos(step_ooc(inode))-1
1425 ELSE
1426 current_pos_b(zone)=-9999
1427 pos_hole_b(zone)=-9999
1428 lrlu_solve_b(zone)=0_8
1429 ENDIF
1430 ENDIF
1431 IF(inode_to_pos(step_ooc(inode)).GE.pos_hole_t(zone))THEN
1432 IF(inode_to_pos(step_ooc(inode)).LT.
1433 & current_pos_t(zone)-1)THEN
1434 pos_hole_t(zone)=inode_to_pos(step_ooc(inode))+1
1435 ELSE
1436 pos_hole_t(zone)=current_pos_t(zone)
1437 ENDIF
1438 ENDIF
1439 CALL cmumps_ooc_update_solve_stat(inode,ptrfac,nsteps,1)

◆ cmumps_solve_update_pointers()

subroutine cmumps_ooc::cmumps_solve_update_pointers ( integer request,
integer (8), dimension(nsteps) ptrfac,
integer nsteps )

Definition at line 951 of file cmumps_ooc.F.

953 IMPLICIT NONE
954 INTEGER NSTEPS,REQUEST
955 INTEGER (8) :: PTRFAC(NSTEPS)
956 INTEGER (8) :: LAST, POS_IN_S, J
957 INTEGER ZONE
958 INTEGER POS_REQ,I,TMP_NODE,POS_IN_MANAGE
959 INTEGER (8) SIZE
960 LOGICAL DONT_USE
962 INTEGER MUMPS_TYPENODE,MUMPS_PROCNODE
963 pos_req=mod(request,max_nb_req)+1
964 size=size_of_read(pos_req)
965 i=first_pos_in_read(pos_req)
966 pos_in_s=read_dest(pos_req)
967 pos_in_manage=read_mng(pos_req)
968 zone=req_to_zone(pos_req)
969 dont_use=.false.
970 j=0_8
971 DO WHILE((j.LT.size).AND.(i.LE.total_nb_ooc_nodes(ooc_fct_type)))
972 tmp_node=ooc_inode_sequence(i,ooc_fct_type)
973 last=size_of_block(step_ooc(tmp_node),ooc_fct_type)
974 IF(last.EQ.0_8)THEN
975 i=i+1
976 cycle
977 ENDIF
978 IF((inode_to_pos(step_ooc(tmp_node)).NE.0).AND.
979 & (inode_to_pos(step_ooc(tmp_node)).LT.
980 & -((n_ooc+1)*nb_z)))THEN
981 dont_use=
982 & (((mtype_ooc.EQ.1).AND.(keep_ooc(50).EQ.0).AND.
983 & (solve_step.EQ.1).AND.
984 & ((mumps_typenode(procnode_ooc(step_ooc(tmp_node)),
985 & keep_ooc(199)).EQ.2).AND.(mumps_procnode(
986 & procnode_ooc(step_ooc(tmp_node)),keep_ooc(199)).NE.
987 & myid_ooc)))
988 & .OR.
989 & ((mtype_ooc.NE.1).AND.(keep_ooc(50).EQ.0).AND.
990 & (solve_step.EQ.0).AND.
991 & ((mumps_typenode(procnode_ooc(step_ooc(tmp_node)),
992 & keep_ooc(199)).EQ.2).AND.(mumps_procnode(
993 & procnode_ooc(step_ooc(tmp_node)),keep_ooc(199)).NE.
994 & myid_ooc)))).OR.
995 & (ooc_state_node(step_ooc(tmp_node)).EQ.already_used)
996 IF(dont_use)THEN
997 ptrfac(step_ooc(tmp_node))=-pos_in_s
998 ELSE
999 ptrfac(step_ooc(tmp_node))=pos_in_s
1000 ENDIF
1001 IF(abs(ptrfac(step_ooc(tmp_node))).LT.
1002 & ideb_solve_z(zone))THEN
1003 WRITE(*,*)myid_ooc,': Inernal error (42) in OOC ',
1004 & ptrfac(step_ooc(tmp_node)),ideb_solve_z(zone)
1005 CALL mumps_abort()
1006 ENDIF
1007 IF(abs(ptrfac(step_ooc(tmp_node))).GT.
1008 & (ideb_solve_z(zone)+size_solve_z(zone)-1_8))THEN
1009 WRITE(*,*)myid_ooc,': Inernal error (43) in OOC '
1010 CALL mumps_abort()
1011 ENDIF
1012 IF(dont_use)THEN
1013 pos_in_mem(pos_in_manage)=-tmp_node
1014 inode_to_pos(step_ooc(tmp_node))=-pos_in_manage
1015 IF(ooc_state_node(step_ooc(tmp_node)).NE.
1016 & already_used)THEN
1017 ooc_state_node(step_ooc(tmp_node))=used_not_permuted
1018 ENDIF
1019 lrlus_solve(zone)=lrlus_solve(zone)+last
1020 ELSE
1021 pos_in_mem(pos_in_manage)=tmp_node
1022 inode_to_pos(step_ooc(tmp_node))=pos_in_manage
1023 ooc_state_node(step_ooc(tmp_node))=not_used
1024 ENDIF
1025 io_req(step_ooc(tmp_node))=-7777
1026 ELSE
1027 pos_in_mem(pos_in_manage)=0
1028 ENDIF
1029 pos_in_s=pos_in_s+last
1030 pos_in_manage=pos_in_manage+1
1031 j=j+last
1032 i=i+1
1033 ENDDO
1034 size_of_read(pos_req)=-9999_8
1035 first_pos_in_read(pos_req)=-9999
1036 read_dest(pos_req)=-9999_8
1037 read_mng(pos_req)=-9999
1038 req_to_zone(pos_req)=-9999
1039 req_id(pos_req)=-9999
1040 RETURN
integer function mumps_typenode(procinfo_inode, k199)

◆ cmumps_solve_zone_read()

subroutine cmumps_ooc::cmumps_solve_zone_read ( integer zone,
complex, dimension(la) a,
integer(8), intent(in) la,
integer(8), dimension(nsteps) ptrfac,
integer nsteps,
integer, intent(out) ierr )

Definition at line 2230 of file cmumps_ooc.F.

2231 IMPLICIT NONE
2232 INTEGER NSTEPS,ZONE
2233 INTEGER(8), INTENT(IN) :: LA
2234 INTEGER, intent(out) :: IERR
2235 COMPLEX A(LA)
2236 INTEGER(8) :: PTRFAC(NSTEPS)
2237 INTEGER(8) :: SIZE, DEST
2238 INTEGER(8) :: NEEDED_SIZE
2239 INTEGER FLAG,TMP_FLAG,POS_SEQ,TMP_NODE,
2240 & NB_NODES
2241 ierr=0
2242 tmp_flag=0
2243 flag=0
2244 IF(cmumps_solve_is_end_reached())THEN
2245 RETURN
2246 ENDIF
2247 IF(solve_step.EQ.0)THEN
2248 IF(cur_pos_sequence.LE.total_nb_ooc_nodes(ooc_fct_type))THEN
2249 tmp_node=ooc_inode_sequence(cur_pos_sequence,
2250 & ooc_fct_type)
2251 DO WHILE(size_of_block(step_ooc(tmp_node),ooc_fct_type).GT.
2252 & size_solve_z(zone))
2253 cur_pos_sequence=cur_pos_sequence+1
2254 IF(cmumps_solve_is_end_reached())THEN
2255 RETURN
2256 ENDIF
2257 tmp_node=ooc_inode_sequence(cur_pos_sequence,
2258 & ooc_fct_type)
2259 ENDDO
2260 CALL cmumps_ooc_skip_null_size_node()
2261 needed_size=max(min_size_read,
2262 & size_of_block(step_ooc(tmp_node),ooc_fct_type))
2263 ELSE
2264 needed_size=min_size_read
2265 ENDIF
2266 ELSEIF(solve_step.EQ.1)THEN
2267 IF(cur_pos_sequence.GE.1)THEN
2268 tmp_node=ooc_inode_sequence(cur_pos_sequence,
2269 & ooc_fct_type)
2270 DO WHILE(size_of_block(step_ooc(tmp_node),ooc_fct_type).GT.
2271 & size_solve_z(zone))
2272 cur_pos_sequence=cur_pos_sequence-1
2273 IF(cmumps_solve_is_end_reached())THEN
2274 RETURN
2275 ENDIF
2276 tmp_node=ooc_inode_sequence(cur_pos_sequence,
2277 & ooc_fct_type)
2278 ENDDO
2279 CALL cmumps_ooc_skip_null_size_node()
2280 needed_size=max(min_size_read,
2281 & size_of_block(step_ooc(tmp_node),ooc_fct_type))
2282 ELSE
2283 needed_size=min_size_read
2284 ENDIF
2285 ENDIF
2286 IF(lrlus_solve(zone).LT.needed_size)THEN
2287 RETURN
2288 ELSEIF((lrlu_solve_t(zone).LT.needed_size).AND.
2289 & (lrlu_solve_b(zone).LT.needed_size).AND.
2290 & (dble(lrlus_solve(zone)).LT.0.3d0*
2291 & dble(size_solve_z(zone)))) THEN
2292 RETURN
2293 ENDIF
2294 IF((lrlu_solve_t(zone).GT.needed_size).AND.(solve_step.EQ.0).AND.
2295 & ((current_pos_t(zone)-pdeb_solve_z(zone)+1).LT.
2296 & max_nb_nodes_for_zone))THEN
2297 flag=1
2298 ELSE
2299 IF(solve_step.EQ.0)THEN
2300 CALL cmumps_get_top_area_space(a,fact_area_size,
2301 & needed_size,ptrfac,nsteps,zone,tmp_flag,ierr)
2302 IF(ierr.LT.0)THEN
2303 RETURN
2304 ENDIF
2305 flag=1
2306 IF(tmp_flag.EQ.0)THEN
2307 CALL cmumps_get_bottom_area_space(a,fact_area_size,
2308 & needed_size,ptrfac,nsteps,zone,tmp_flag,ierr)
2309 IF(ierr.LT.0)THEN
2310 RETURN
2311 ENDIF
2312 flag=0
2313 ENDIF
2314 ELSE
2315 CALL cmumps_get_bottom_area_space(a,fact_area_size,
2316 & needed_size,ptrfac,nsteps,zone,tmp_flag,ierr)
2317 IF(ierr.LT.0)THEN
2318 RETURN
2319 ENDIF
2320 flag=0
2321 IF(tmp_flag.EQ.0)THEN
2322 CALL cmumps_get_top_area_space(a,fact_area_size,
2323 & needed_size,ptrfac,nsteps,zone,tmp_flag,ierr)
2324 IF(ierr.LT.0)THEN
2325 RETURN
2326 ENDIF
2327 flag=1
2328 ENDIF
2329 ENDIF
2330 IF(tmp_flag.EQ.0)THEN
2331 CALL cmumps_free_space_for_solve(a,fact_area_size,
2332 & needed_size,ptrfac,nsteps,zone,ierr)
2333 IF(ierr.LT.0)THEN
2334 RETURN
2335 ENDIF
2336 flag=1
2337 ENDIF
2338 ENDIF
2339 CALL cmumps_solve_compute_read_size(zone,SIZE,dest,pos_seq,
2340 & nb_nodes,flag,ptrfac,nsteps)
2341 IF(size.EQ.0_8)THEN
2342 RETURN
2343 ENDIF
2344 nb_zone_req=nb_zone_req+1
2345 size_zone_req=size_zone_req+SIZE
2346 req_act=req_act+1
2347 CALL cmumps_read_solve_block(a(dest),dest,SIZE,zone,ptrfac,nsteps,
2348 & pos_seq,nb_nodes,flag,ierr)
2349 IF(ierr.LT.0)THEN
2350 RETURN
2351 ENDIF

◆ cmumps_struc_store_file_name()

subroutine cmumps_ooc::cmumps_struc_store_file_name ( type(cmumps_struc), target id,
integer, intent(out) ierr )

Definition at line 2807 of file cmumps_ooc.F.

2809 IMPLICIT NONE
2810 TYPE(CMUMPS_STRUC), TARGET :: id
2811 INTEGER, intent(out) :: IERR
2812 INTEGER I,DIM,J,TMP,SIZE,K,I1
2813 CHARACTER(len=1):: TMP_NAME(350)
2814 EXTERNAL mumps_ooc_get_nb_files_c, mumps_ooc_get_file_name_c
2815 ierr=0
2816 size=0
2817 DO j=1,ooc_nb_file_type
2818 tmp=j-1
2819 CALL mumps_ooc_get_nb_files_c(tmp,i)
2820 id%OOC_NB_FILES(j)=i
2821 size=size+i
2822 ENDDO
2823 IF(associated(id%OOC_FILE_NAMES))THEN
2824 DEALLOCATE(id%OOC_FILE_NAMES)
2825 NULLIFY(id%OOC_FILE_NAMES)
2826 ENDIF
2827 ALLOCATE(id%OOC_FILE_NAMES(SIZE,350),stat=ierr)
2828 IF (ierr .GT. 0) THEN
2829 IF (icntl1.GT.0) THEN
2830 WRITE(icntl1,*) 'PB allocation in ',
2831 & 'CMUMPS_STRUC_STORE_FILE_NAME'
2832 ENDIF
2833 ierr=-1
2834 IF(id%INFO(1).GE.0)THEN
2835 id%INFO(1) = -13
2836 id%INFO(2) = size*350
2837 RETURN
2838 ENDIF
2839 ENDIF
2840 IF(associated(id%OOC_FILE_NAME_LENGTH))THEN
2841 DEALLOCATE(id%OOC_FILE_NAME_LENGTH)
2842 NULLIFY(id%OOC_FILE_NAME_LENGTH)
2843 ENDIF
2844 ALLOCATE(id%OOC_FILE_NAME_LENGTH(size),stat=ierr)
2845 IF (ierr .GT. 0) THEN
2846 ierr=-1
2847 IF(id%INFO(1).GE.0) THEN
2848 IF (icntl1.GT.0) THEN
2849 WRITE(icntl1,*)
2850 & 'PB allocation in CMUMPS_STRUC_STORE_FILE_NAME'
2851 ENDIF
2852 id%INFO(1) = -13
2853 id%INFO(2) = SIZE
2854 RETURN
2855 ENDIF
2856 ENDIF
2857 k=1
2858 DO i1=1,ooc_nb_file_type
2859 tmp=i1-1
2860 DO i=1,id%OOC_NB_FILES(i1)
2861 CALL mumps_ooc_get_file_name_c(tmp,i,dim,tmp_name(1))
2862 DO j=1,dim+1
2863 id%OOC_FILE_NAMES(k,j)=tmp_name(j)
2864 ENDDO
2865 id%OOC_FILE_NAME_LENGTH(k)=dim+1
2866 k=k+1
2867 ENDDO
2868 ENDDO

◆ cmumps_submit_read_for_z()

subroutine cmumps_ooc::cmumps_submit_read_for_z ( complex, dimension(la) a,
integer(8) la,
integer(8), dimension(nsteps) ptrfac,
integer nsteps,
integer ierr )

Definition at line 896 of file cmumps_ooc.F.

897 IMPLICIT NONE
898 INTEGER NSTEPS,IERR
899 INTEGER(8) :: LA
900 COMPLEX A(LA)
901 INTEGER(8) :: PTRFAC(NSTEPS)
902 INTEGER ZONE
903 CALL cmumps_solve_select_zone(zone)
904 ierr=0
905 CALL cmumps_solve_zone_read(zone,a,la,ptrfac,nsteps,ierr)
906 RETURN

◆ cmumps_update_read_req_node()

subroutine cmumps_ooc::cmumps_update_read_req_node ( integer inode,
integer(8) size,
integer(8) dest,
integer zone,
integer request,
integer pos_seq,
integer nb_nodes,
integer flag,
integer(8), dimension(nsteps) ptrfac,
integer nsteps,
integer, intent(out) ierr )

Definition at line 1042 of file cmumps_ooc.F.

1044 IMPLICIT NONE
1045 INTEGER INODE,ZONE,REQUEST,FLAG,POS_SEQ,NB_NODES,NSTEPS
1046 INTEGER(8) :: SIZE
1047 INTEGER(8) :: PTRFAC(NSTEPS)
1048 INTEGER(8) :: DEST, LOCAL_DEST, J8
1049 INTEGER I,TMP_NODE,LOC_I,POS_REQ,NB
1050 INTEGER(8)::LAST
1051 INTEGER, intent(out) :: IERR
1052 ierr=0
1053 IF(cur_pos_sequence.GT.total_nb_ooc_nodes(ooc_fct_type))THEN
1054 RETURN
1055 ENDIF
1056 nb=0
1057 local_dest=dest
1058 i=pos_seq
1059 pos_req=mod(request,max_nb_req)+1
1060 IF(req_id(pos_req).NE.-9999)THEN
1061 CALL mumps_wait_request(req_id(pos_req),ierr)
1062 IF(ierr.LT.0)THEN
1063 IF (icntl1.GT.0)
1064 & WRITE(icntl1,*)myid_ooc,': ',err_str_ooc(1:dim_err_str_ooc)
1065 RETURN
1066 ENDIF
1067 CALL cmumps_solve_update_pointers(request,ptrfac,nsteps)
1068 req_act=req_act-1
1069 ENDIF
1070 size_of_read(pos_req)=SIZE
1071 first_pos_in_read(pos_req)=i
1072 read_dest(pos_req)=dest
1073 IF(flag.EQ.0)THEN
1074 read_mng(pos_req)=current_pos_b(zone)-nb_nodes+1
1075 ELSEIF(flag.EQ.1)THEN
1076 read_mng(pos_req)=current_pos_t(zone)
1077 ENDIF
1078 req_to_zone(pos_req)=zone
1079 req_id(pos_req)=request
1080 j8=0_8
1081 IF(flag.EQ.0)THEN
1082 loc_i=current_pos_b(zone)-nb_nodes+1
1083 ENDIF
1084 DO WHILE((j8.LT.size).AND.(i.LE.total_nb_ooc_nodes(ooc_fct_type)))
1085 tmp_node=ooc_inode_sequence(i,ooc_fct_type)
1086 last=size_of_block(step_ooc(tmp_node),ooc_fct_type)
1087 IF(last.EQ.0_8)THEN
1088 inode_to_pos(step_ooc(tmp_node))=1
1089 ooc_state_node(step_ooc(tmp_node))=not_used
1090 i=i+1
1091 cycle
1092 ENDIF
1093 IF((io_req(step_ooc(tmp_node)).GE.0).OR.
1094 & (inode_to_pos(step_ooc(tmp_node)).NE.0))THEN
1095 IF(flag.EQ.1)THEN
1096 pos_in_mem(current_pos_t(zone))=0
1097 ELSEIF(flag.EQ.0)THEN
1098 pos_in_mem(current_pos_b(zone))=0
1099 ENDIF
1100 ELSE
1101 io_req(step_ooc(tmp_node))=request
1102 lrlus_solve(zone)=lrlus_solve(zone)-last
1103 IF(flag.EQ.1)THEN
1104 IF(posfac_solve(zone).EQ.ideb_solve_z(zone))THEN
1105 pos_hole_b(zone)=-9999
1106 current_pos_b(zone)=-9999
1107 lrlu_solve_b(zone)=0_8
1108 ENDIF
1109 posfac_solve(zone)=posfac_solve(zone)+last
1110 lrlu_solve_t(zone)=lrlu_solve_t(zone)-last
1111 pos_in_mem(current_pos_t(zone))=-tmp_node-
1112 & ((n_ooc+1)*nb_z)
1113 inode_to_pos(step_ooc(tmp_node))=-current_pos_t(zone)-
1114 & ((n_ooc+1)*nb_z)
1115 ooc_state_node(step_ooc(tmp_node))=being_read
1116 ptrfac(step_ooc(tmp_node))=-local_dest
1117 local_dest=local_dest+size_of_block(step_ooc(tmp_node),
1118 & ooc_fct_type)
1119 ELSEIF(flag.EQ.0)THEN
1120 lrlu_solve_b(zone)=lrlu_solve_b(zone)-last
1121 pos_in_mem(loc_i)=-tmp_node-((n_ooc+1)*nb_z)
1122 IF(loc_i.EQ.pos_hole_t(zone))THEN
1123 IF(pos_hole_t(zone).LT.current_pos_t(zone))THEN
1124 pos_hole_t(zone)=pos_hole_t(zone)+1
1125 ENDIF
1126 ENDIF
1127 inode_to_pos(step_ooc(tmp_node))=-loc_i-((n_ooc+1)*nb_z)
1128 ooc_state_node(step_ooc(tmp_node))=being_read
1129 ptrfac(step_ooc(tmp_node))=-local_dest
1130 local_dest=local_dest+size_of_block(step_ooc(tmp_node),
1131 & ooc_fct_type)
1132 ELSE
1133 WRITE(*,*)myid_ooc,': Internal error (39) in OOC ',
1134 & ' Invalid Flag Value in ',
1135 & ' CMUMPS_UPDATE_READ_REQ_NODE',flag
1136 CALL mumps_abort()
1137 ENDIF
1138 ENDIF
1139 IF(pos_in_mem(current_pos_t(zone)).NE.0)THEN
1140 IF(pos_in_mem(current_pos_t(zone)).EQ.
1141 & pos_in_mem(pdeb_solve_z(zone)))THEN
1142 IF(current_pos_t(zone).NE.pdeb_solve_z(zone))THEN
1143 WRITE(*,*)myid_ooc,': Internal error (40) in OOC ',
1144 & current_pos_t(zone),
1145 & pdeb_solve_z(zone),
1146 & pos_in_mem(current_pos_t(zone)),
1147 & pos_in_mem(pdeb_solve_z(zone))
1148 CALL mumps_abort()
1149 ENDIF
1150 ENDIF
1151 ENDIF
1152 j8=j8+last
1153 IF(lrlus_solve(zone).LT.0_8)THEN
1154 WRITE(*,*)myid_ooc,': Internal error (41) in OOC ',
1155 & ' LRLUS_SOLVE must be (1) > 0',
1156 & lrlus_solve(zone)
1157 CALL mumps_abort()
1158 ENDIF
1159 i=i+1
1160 IF(flag.EQ.1)THEN
1161 current_pos_t(zone)=current_pos_t(zone)+1
1162 IF(current_pos_t(zone).GT.
1163 & max_nb_nodes_for_zone+pdeb_solve_z(zone))THEN
1164 WRITE(*,*)myid_ooc,': Internal error (1) in OOC '
1165 CALL mumps_abort()
1166 ENDIF
1167 pos_hole_t(zone)=current_pos_t(zone)
1168 ELSEIF(flag.EQ.0)THEN
1169 IF(pos_hole_b(zone).LT.pdeb_solve_z(zone))THEN
1170 WRITE(*,*)myid_ooc,': Internal error (2) in OOC ',
1171 & pos_hole_b(zone),loc_i
1172 CALL mumps_abort()
1173 ENDIF
1174 current_pos_b(zone)=current_pos_b(zone)-1
1175 pos_hole_b(zone)=current_pos_b(zone)
1176 IF(pos_hole_b(zone).LT.pdeb_solve_z(zone))THEN
1177 pos_hole_b(zone)=-9999
1178 lrlu_solve_b(zone)=0_8
1179 ENDIF
1180 ELSE
1181 WRITE(*,*)myid_ooc,': Internal error (3) in OOC ',
1182 & ' Invalid Flag Value in ',
1183 & ' CMUMPS_UPDATE_READ_REQ_NODE',flag
1184 CALL mumps_abort()
1185 ENDIF
1186 IF(flag.EQ.0)THEN
1187 loc_i=loc_i+1
1188 ENDIF
1189 nb=nb+1
1190 ENDDO
1191 IF(nb.NE.nb_nodes)THEN
1192 WRITE(*,*)myid_ooc,': Internal error (4) in OOC ',
1193 & ' CMUMPS_UPDATE_READ_REQ_NODE ',nb,nb_nodes
1194 ENDIF
1195 IF(solve_step.EQ.0)THEN
1196 cur_pos_sequence=i
1197 ELSE
1198 cur_pos_sequence=pos_seq-1
1199 ENDIF
1200 RETURN

Variable Documentation

◆ already_used

integer cmumps_ooc::already_used

Definition at line 20 of file cmumps_ooc.F.

◆ being_read

integer cmumps_ooc::being_read

Definition at line 20 of file cmumps_ooc.F.

◆ cmumps_elementary_data_size

integer cmumps_ooc::cmumps_elementary_data_size

Definition at line 52 of file cmumps_ooc.F.

52 INTEGER CMUMPS_ELEMENTARY_DATA_SIZE,N_OOC

◆ cur_pos_sequence

integer, save cmumps_ooc::cur_pos_sequence

Definition at line 40 of file cmumps_ooc.F.

◆ current_pos_b

integer, dimension(:), allocatable cmumps_ooc::current_pos_b

Definition at line 54 of file cmumps_ooc.F.

◆ current_pos_t

integer, dimension(:), allocatable cmumps_ooc::current_pos_t

Definition at line 54 of file cmumps_ooc.F.

54 INTEGER, DIMENSION(:), ALLOCATABLE :: CURRENT_POS_T,CURRENT_POS_B

◆ current_solve_read_zone

integer, save cmumps_ooc::current_solve_read_zone

Definition at line 40 of file cmumps_ooc.F.

◆ fact_area_size

integer (8), save cmumps_ooc::fact_area_size

Definition at line 36 of file cmumps_ooc.F.

36 INTEGER (8),SAVE :: FACT_AREA_SIZE,
37 & SIZE_ZONE_SOLVE,SIZE_SOLVE_EMM,TMP_SIZE_FACT,
38 & MAX_SIZE_FACTOR_OOC

◆ first_pos_in_read

integer, dimension(:), allocatable cmumps_ooc::first_pos_in_read

Definition at line 49 of file cmumps_ooc.F.

49 INTEGER,DIMENSION(:),ALLOCATABLE :: FIRST_POS_IN_READ,
50 & READ_MNG,REQ_TO_ZONE,POS_HOLE_T,
51 & POS_HOLE_B,REQ_ID,OOC_STATE_NODE

◆ ideb_solve_z

integer(8), dimension(:), allocatable cmumps_ooc::ideb_solve_z

Definition at line 33 of file cmumps_ooc.F.

◆ inode_to_pos

integer, dimension(:), allocatable cmumps_ooc::inode_to_pos

Definition at line 53 of file cmumps_ooc.F.

◆ io_req

integer, dimension(:), allocatable cmumps_ooc::io_req

Definition at line 31 of file cmumps_ooc.F.

31 INTEGER, DIMENSION(:),ALLOCATABLE :: IO_REQ

◆ is_root_special

logical cmumps_ooc::is_root_special

Definition at line 55 of file cmumps_ooc.F.

55 LOGICAL IS_ROOT_SPECIAL

◆ lrlu_solve_b

integer(8), dimension(:), allocatable cmumps_ooc::lrlu_solve_b

Definition at line 33 of file cmumps_ooc.F.

◆ lrlu_solve_t

integer(8), dimension(:), allocatable cmumps_ooc::lrlu_solve_t

Definition at line 33 of file cmumps_ooc.F.

◆ lrlus_solve

integer(8), dimension(:), allocatable cmumps_ooc::lrlus_solve

Definition at line 32 of file cmumps_ooc.F.

32 INTEGER(8), DIMENSION(:), ALLOCATABLE:: LRLUS_SOLVE

◆ max_nb_nodes_for_zone

integer, save cmumps_ooc::max_nb_nodes_for_zone

Definition at line 40 of file cmumps_ooc.F.

◆ max_nb_req

integer, save cmumps_ooc::max_nb_req

Definition at line 40 of file cmumps_ooc.F.

◆ max_ooc_file_size

double precision, save cmumps_ooc::max_ooc_file_size

Definition at line 47 of file cmumps_ooc.F.

47 DOUBLE PRECISION,SAVE :: MAX_OOC_FILE_SIZE

◆ max_size_factor_ooc

integer (8), save cmumps_ooc::max_size_factor_ooc

Definition at line 36 of file cmumps_ooc.F.

◆ min_size_read

integer(8), save cmumps_ooc::min_size_read

Definition at line 39 of file cmumps_ooc.F.

39 INTEGER(8), SAVE :: MIN_SIZE_READ

◆ mtype_ooc

integer, save cmumps_ooc::mtype_ooc

Definition at line 40 of file cmumps_ooc.F.

◆ n_ooc

integer cmumps_ooc::n_ooc

Definition at line 52 of file cmumps_ooc.F.

◆ nb_act

integer, save cmumps_ooc::nb_act

Definition at line 40 of file cmumps_ooc.F.

◆ nb_call

integer, save cmumps_ooc::nb_call

Definition at line 40 of file cmumps_ooc.F.

◆ nb_called

integer, save cmumps_ooc::nb_called

Definition at line 40 of file cmumps_ooc.F.

◆ nb_z

integer, save cmumps_ooc::nb_z

Definition at line 40 of file cmumps_ooc.F.

◆ nb_zone_req

integer, save cmumps_ooc::nb_zone_req

Definition at line 40 of file cmumps_ooc.F.

◆ not_in_mem

integer cmumps_ooc::not_in_mem

Definition at line 20 of file cmumps_ooc.F.

20 INTEGER NOT_IN_MEM,BEING_READ,NOT_USED,PERMUTED,USED,
21 & USED_NOT_PERMUTED,ALREADY_USED

◆ not_used

integer cmumps_ooc::not_used

Definition at line 20 of file cmumps_ooc.F.

◆ ooc_node_not_in_mem

integer cmumps_ooc::ooc_node_not_in_mem

Definition at line 24 of file cmumps_ooc.F.

24 INTEGER OOC_NODE_NOT_IN_MEM,OOC_NODE_PERMUTED,
25 & OOC_NODE_NOT_PERMUTED

◆ ooc_node_not_permuted

integer cmumps_ooc::ooc_node_not_permuted

Definition at line 24 of file cmumps_ooc.F.

◆ ooc_node_permuted

integer cmumps_ooc::ooc_node_permuted

Definition at line 24 of file cmumps_ooc.F.

◆ ooc_solve_type_fct

integer cmumps_ooc::ooc_solve_type_fct

Definition at line 30 of file cmumps_ooc.F.

30 INTEGER :: OOC_SOLVE_TYPE_FCT

◆ ooc_state_node

integer, dimension(:), allocatable cmumps_ooc::ooc_state_node

Definition at line 49 of file cmumps_ooc.F.

◆ ooc_vaddr_ptr

integer(8), save cmumps_ooc::ooc_vaddr_ptr

Definition at line 45 of file cmumps_ooc.F.

45 INTEGER(8), SAVE :: OOC_VADDR_PTR

◆ pdeb_solve_z

integer, dimension(:), allocatable cmumps_ooc::pdeb_solve_z

Definition at line 35 of file cmumps_ooc.F.

35 INTEGER, DIMENSION(:),ALLOCATABLE :: PDEB_SOLVE_Z

◆ permuted

integer cmumps_ooc::permuted

Definition at line 20 of file cmumps_ooc.F.

◆ pos_hole_b

integer, dimension(:), allocatable cmumps_ooc::pos_hole_b

Definition at line 49 of file cmumps_ooc.F.

◆ pos_hole_t

integer, dimension(:), allocatable cmumps_ooc::pos_hole_t

Definition at line 49 of file cmumps_ooc.F.

◆ pos_in_mem

integer, dimension(:), allocatable cmumps_ooc::pos_in_mem

Definition at line 53 of file cmumps_ooc.F.

53 INTEGER, DIMENSION(:), ALLOCATABLE :: POS_IN_MEM, INODE_TO_POS

◆ posfac_solve

integer(8), dimension(:), allocatable cmumps_ooc::posfac_solve

Definition at line 33 of file cmumps_ooc.F.

◆ read_dest

integer(8), dimension(:), allocatable cmumps_ooc::read_dest

Definition at line 48 of file cmumps_ooc.F.

◆ read_mng

integer, dimension(:), allocatable cmumps_ooc::read_mng

Definition at line 49 of file cmumps_ooc.F.

◆ req_act

integer, save cmumps_ooc::req_act

Definition at line 40 of file cmumps_ooc.F.

◆ req_id

integer, dimension(:), allocatable cmumps_ooc::req_id

Definition at line 49 of file cmumps_ooc.F.

◆ req_to_zone

integer, dimension(:), allocatable cmumps_ooc::req_to_zone

Definition at line 49 of file cmumps_ooc.F.

◆ size_of_block

integer(8), dimension(:,:), pointer cmumps_ooc::size_of_block

Definition at line 28 of file cmumps_ooc.F.

28 INTEGER(8), DIMENSION(:,:),POINTER :: SIZE_OF_BLOCK

◆ size_of_read

integer(8), dimension(:), allocatable cmumps_ooc::size_of_read

Definition at line 48 of file cmumps_ooc.F.

48 INTEGER(8), DIMENSION(:), ALLOCATABLE :: SIZE_OF_READ, READ_DEST

◆ size_solve_emm

integer (8), save cmumps_ooc::size_solve_emm

Definition at line 36 of file cmumps_ooc.F.

◆ size_solve_z

integer(8), dimension(:), allocatable cmumps_ooc::size_solve_z

Definition at line 33 of file cmumps_ooc.F.

33 INTEGER(8), DIMENSION(:), ALLOCATABLE:: SIZE_SOLVE_Z,
34 & LRLU_SOLVE_T, POSFAC_SOLVE, IDEB_SOLVE_Z, LRLU_SOLVE_B

◆ size_zone_req

integer(8), save cmumps_ooc::size_zone_req

Definition at line 46 of file cmumps_ooc.F.

46 INTEGER(8), SAVE :: SIZE_ZONE_REQ

◆ size_zone_solve

integer (8), save cmumps_ooc::size_zone_solve

Definition at line 36 of file cmumps_ooc.F.

◆ solve_step

integer, save cmumps_ooc::solve_step

Definition at line 40 of file cmumps_ooc.F.

◆ special_root_node

integer cmumps_ooc::special_root_node

Definition at line 56 of file cmumps_ooc.F.

56 INTEGER SPECIAL_ROOT_NODE

◆ tmp_nb_nodes

integer, save cmumps_ooc::tmp_nb_nodes

Definition at line 40 of file cmumps_ooc.F.

40 INTEGER, SAVE :: TMP_NB_NODES, MAX_NB_NODES_FOR_ZONE,MAX_NB_REQ,
41 & CURRENT_SOLVE_READ_ZONE,
42 & CUR_POS_SEQUENCE,NB_Z,SOLVE_STEP,
43 & NB_ZONE_REQ,MTYPE_OOC,NB_ACT
44 & ,NB_CALLED,REQ_ACT,NB_CALL

◆ tmp_size_fact

integer (8), save cmumps_ooc::tmp_size_fact

Definition at line 36 of file cmumps_ooc.F.

◆ total_nb_ooc_nodes

integer, dimension(:), pointer cmumps_ooc::total_nb_ooc_nodes

Definition at line 29 of file cmumps_ooc.F.

29 INTEGER, DIMENSION(:),POINTER :: TOTAL_NB_OOC_NODES

◆ typef_both_lu

integer, parameter, public cmumps_ooc::typef_both_lu = -99976

Definition at line 64 of file cmumps_ooc.F.

64 INTEGER, PARAMETER, PUBLIC :: TYPEF_BOTH_LU = -99976

◆ used

integer cmumps_ooc::used

Definition at line 20 of file cmumps_ooc.F.

◆ used_not_permuted

integer cmumps_ooc::used_not_permuted

Definition at line 20 of file cmumps_ooc.F.