OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sfac_mem_free_block_cb.F File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine smumps_free_block_cb_static (ssarbr, myid, n, iposblock, iw, liw, lrlu, lrlus, iptrlu, iwposcb, la, keep, keep8, in_place_stats)

Function/Subroutine Documentation

◆ smumps_free_block_cb_static()

subroutine smumps_free_block_cb_static ( logical ssarbr,
integer myid,
integer n,
integer iposblock,
integer, dimension( liw ) iw,
integer liw,
integer(8) lrlu,
integer(8) lrlus,
integer(8) iptrlu,
integer iwposcb,
integer(8) la,
integer, dimension(500) keep,
integer(8), dimension(150) keep8,
logical in_place_stats )

Definition at line 14 of file sfac_mem_free_block_cb.F.

20!$ USE OMP_LIB
21 USE smumps_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 smumps_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 smumps_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 smumps_load_mem_update(ssarbr,.false.,
86 & la-lrlus,0_8,-sizfr_block_eff,keep,keep8,lrlus)
87 END IF
88 RETURN
subroutine, public smumps_load_mem_update(ssarbr, process_bande_arg, mem_value, new_lu, inc_mem_arg, keep, keep8, lrlus)
subroutine smumps_sizefreeinrec(iw, lrec, size_free, xsize)
subroutine mumps_geti8(i8, int_array)