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 ), KEEP(500)
28 INTEGER(8) KEEP8(150)
29 INTEGER
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)
40 IF (dynsize_block .GT. 0_8) THEN
41 sizfr_block_eff = 0_8
42 ELSE IF (keep(216).eq.3
43 & ) THEN
44 sizfr_block_eff = sizfr_block
45 ELSE
47 & liw-iposblock+1,
48 & sizehole, keep(ixsz))
49 sizfr_block_eff = sizfr_block - sizehole
50 ENDIF
51 IF (.NOT. in_place_stats) THEN
52 lrlus = lrlus + sizfr_block_eff
53 IF (keep(405) .EQ. 0) THEN
54 keep8(69) = keep8(69) - sizfr_block_eff
55 ELSE
56
57 keep8(69) = keep8(69) - sizfr_block_eff
58!$omp END atomic
59 ENDIF
60 ENDIF
61 IF ( iposblock .eq. 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
70 & la-lrlus,0_8,mem_inc,keep,keep8,lrlus)
71 90 IF ( iwposcb .eq. liw ) GO TO 100
72 iposshift = iwposcb + keep(ixsz)
73 sizfi = iw( iwposcb+1+xxi )
75 IF ( iw( iwposcb+1+xxs ) .EQ. 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
86 & la-lrlus,0_8,-sizfr_block_eff,keep,keep8,lrlus)
87 END IF
88 RETURN
subroutine dmumps_sizefreeinrec(iw, lrec, size_free, xsize)
subroutine, public dmumps_load_mem_update(ssarbr, process_bande_arg, mem_value, new_lu, inc_mem_arg, keep, keep8, lrlus)