OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
zfac_mem_free_block_cb.F
Go to the documentation of this file.
1C
2C This file is part of MUMPS 5.5.1, released
3C on Tue Jul 12 13:17:24 UTC 2022
4C
5C
6C Copyright 1991-2022 CERFACS, CNRS, ENS Lyon, INP Toulouse, Inria,
7C Mumps Technologies, University of Bordeaux.
8C
9C This version of MUMPS is provided to you free of charge. It is
10C released under the CeCILL-C license
11C (see doc/CeCILL-C_V1-en.txt, doc/CeCILL-C_V1-fr.txt, and
12C https://cecill.info/licences/Licence_CeCILL-C_V1-en.html)
13C
15 & SSARBR, MYID, N, IPOSBLOCK,
16 & IW, LIW,
17 & LRLU, LRLUS, IPTRLU,
18 & IWPOSCB, LA, KEEP, KEEP8, IN_PLACE_STATS
19 & )
20!$ USE OMP_LIB
21 USE zmumps_load
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 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 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
46 CALL zmumps_sizefreeinrec( iw(iposblock),
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!$OMP ATOMIC UPDATE
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
69 CALL zmumps_load_mem_update(ssarbr,.false.,
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 )
74 CALL mumps_geti8( sizfr, iw(iwposcb+1+xxr) )
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
85 CALL zmumps_load_mem_update(ssarbr,.false.,
86 & la-lrlus,0_8,-sizfr_block_eff,keep,keep8,lrlus)
87 END IF
88 RETURN
89 END SUBROUTINE zmumps_free_block_cb_static
subroutine, public zmumps_load_mem_update(ssarbr, process_bande_arg, mem_value, new_lu, inc_mem_arg, keep, keep8, lrlus)
subroutine mumps_geti8(i8, int_array)
subroutine zmumps_sizefreeinrec(iw, lrec, size_free, xsize)
subroutine zmumps_free_block_cb_static(ssarbr, myid, n, iposblock, iw, liw, lrlu, lrlus, iptrlu, iwposcb, la, keep, keep8, in_place_stats)