20
22 IMPLICIT NONE
23 INTEGER IPOSBLOCK,
24 & LIW, IWPOSCB, N
25 INTEGER(8) :: LA, LRLU, LRLUS, IPTRLU
26 LOGICAL IN_PLACE_STATS
27 INTEGER IW( LIW ), (500)
28 INTEGER(8) KEEP8(150)
29 INTEGER MYID
30 LOGICAL SSARBR
31 INTEGER SIZFI_BLOCK, SIZFI
32 INTEGER IPOSSHIFT
33 INTEGER(8) :: SIZFR, SIZFR_BLOCK, SIZFR_BLOCK_EFF,
34 & SIZEHOLE, MEM_INC, DYNSIZE_BLOCK
35 include 'mumps_headers.h'
36 IPOSSHIFT = IPOSBLOCK + KEEP(IXSZ)
37 SIZFI_BLOCK=IW(IPOSBLOCK+XXI)
38 CALL MUMPS_GETI8( SIZFR_BLOCK, IW(IPOSBLOCK+XXR) )
39 CALL MUMPS_GETI8( DYNSIZE_BLOCK,IW(IPOSBLOCK+XXD) )
40.GT. IF (DYNSIZE_BLOCK 0_8) THEN
41 SIZFR_BLOCK_EFF = 0_8
42.eq. ELSE IF (KEEP(216)3
43 & ) THEN
44 SIZFR_BLOCK_EFF = SIZFR_BLOCK
45 ELSE
46 CALL ZMUMPS_SIZEFREEINREC( IW(IPOSBLOCK),
47 & LIW-IPOSBLOCK+1,
48 & SIZEHOLE, KEEP(IXSZ))
49 SIZFR_BLOCK_EFF = SIZFR_BLOCK - SIZEHOLE
50 ENDIF
51.NOT. IF ( IN_PLACE_STATS) THEN
52 LRLUS = LRLUS + SIZFR_BLOCK_EFF
53.EQ. IF (KEEP(405) 0) THEN
54 KEEP8(69) = KEEP8(69) - SIZFR_BLOCK_EFF
55 ELSE
56!$OMP ATOMIC UPDATE
57 KEEP8(69) = KEEP8(69) - SIZFR_BLOCK_EFF
58!$OMP END ATOMIC
59 ENDIF
60 ENDIF
61.eq. IF ( IPOSBLOCK IWPOSCB + 1 ) THEN
62 IPTRLU = IPTRLU + SIZFR_BLOCK
63 IWPOSCB = IWPOSCB + SIZFI_BLOCK
64 LRLU = LRLU + SIZFR_BLOCK
65 MEM_INC = -SIZFR_BLOCK_EFF
66 IF (IN_PLACE_STATS) THEN
67 MEM_INC= 0_8
68 ENDIF
69 CALL ZMUMPS_LOAD_MEM_UPDATE(SSARBR,.FALSE.,
70 & LA-LRLUS,0_8,MEM_INC,KEEP,KEEP8,LRLUS)
71.eq. 90 IF ( IWPOSCB LIW ) GO TO 100
72 IPOSSHIFT = IWPOSCB + KEEP(IXSZ)
73 SIZFI = IW( IWPOSCB+1+XXI )
74 CALL MUMPS_GETI8( SIZFR, IW(IWPOSCB+1+XXR) )
75.EQ. IF ( IW( IWPOSCB+1+XXS ) S_FREE ) THEN
76 IPTRLU = IPTRLU + SIZFR
77 LRLU = LRLU + SIZFR
78 IWPOSCB = IWPOSCB + SIZFI
79 GO TO 90
80 ENDIF
81 100 CONTINUE
82 IW( IWPOSCB+1+XXP)=TOP_OF_STACK
83 ELSE
84 IW( IPOSBLOCK +XXS)=S_FREE
85 CALL ZMUMPS_LOAD_MEM_UPDATE(SSARBR,.FALSE.,
86 & LA-LRLUS,0_8,-SIZFR_BLOCK_EFF,KEEP,KEEP8,LRLUS)
87 END IF
88 RETURN