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

Go to the source code of this file.

Functions/Subroutines

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

Function/Subroutine Documentation

◆ zmumps_free_block_cb_static()

subroutine zmumps_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 zfac_mem_free_block_cb.F.

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.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