15 & SSARBR, PROCESS_BANDE,
16 & MYID,N, KEEP,KEEP8,DKEEP,
18 & LRLU, IPTRLU,IWPOS,IWPOSCB,
19 & SLAVEF, PROCNODE_STEPS, DAD,
20 & PTRIST,PTRAST,STEP,PIMASTER,PAMASTER,
21 & LREQ, LREQCB, NODE_ARG, STATE_ARG, SET_HEADER,
22 & COMP, LRLUS, LRLUSM, IFLAG, IERROR )
26 INTEGER N,LIW, KEEP(500)
27 INTEGER(8) LA, LRLU, IPTRLU, LRLUS, LRLUSM, LREQCB
28 INTEGER(8) PAMASTER(KEEP(28)), PTRAST(KEEP(28))
30 INTEGER(8) :: MIN_SPACE_IN_PLACE
31 INTEGER NODE_ARG, STATE_ARG
34 INTEGER IW(LIW),PTRIST(KEEP(28))
35 INTEGER STEP(N), PIMASTER((28))
36 INTEGER,
INTENT(IN) :: SLAVEF
37 INTEGER,
INTENT(IN) :: PROCNODE_STEPS(KEEP(28)), DAD(KEEP(28))
40 LOGICAL INPLACE, PROCESS_BANDE, SSARBR, SET_HEADER
41 INTEGER COMP, LREQ, , IERROR
42 include
'mumps_headers.h'
43 INTEGER INODE_LOC,NPIV,NASS,NROW,NCB
45 INTEGER(8) :: , RSIZEHOLE, LREQCB_EFF, LREQCB_WISHED
46 INTEGER(8) :: DYN_SIZE, KEEP8TMPCOPY
48 lreqcb_eff = min_space_in_place
49 IF ( min_space_in_place > 0_8 )
THEN
50 lreqcb_wished = lreqcb
56 lreqcb_wished = lreqcb
58 IF (iwposcb.EQ.liw)
THEN
59 IF (lreq.NE.keep(ixsz).OR.lreqcb.NE.0_8
60 & .OR. .NOT. set_header)
THEN
61 WRITE(*,*)
"Internal error in CMUMPS_ALLOC_CB ",
62 & set_header, lreq, lreqcb
65 IF (iwposcb-iwpos+1 .LT. keep(ixsz))
THEN
66 WRITE(*,*)
"Problem with integer stack size",iwposcb,
72 iwposcb=iwposcb-keep(ixsz)
73 iw(iwposcb+1+xxi)=keep(ixsz)
76 iw(iwposcb+1+xxn)=-919191
77 iw(iwposcb+1+xxs)=s_notfree
78 iw(iwposcb+1+xxp)=top_of_stack
83 & .AND. keep(214).EQ.1.AND.
85 & iwposcb.NE.liw)
THEN
86 IF (iw(iwposcb+1 + xxs).EQ.s_nolcbnocontig.OR.
87 & iw(iwposcb+1 + xxs).EQ.s_nolcbnocontig38)
THEN
88 ncb = iw( iwposcb+1 + keep(ixsz) )
89 nrow = iw( iwposcb+1 + keep(ixsz
90 npiv = iw( iwposcb+1 + keep(ixsz) + 3)
91 inode_loc= iw( iwposcb+1 + xxn)
93 & isizehole,rsizehole)
94 IF (iw(iwposcb+1 + xxs).EQ.s_nolcbnocontig)
THEN
96 & nrow,ncb,npiv+ncb,0,
97 & iw(iwposcb+1 + xxs),rsizehole)
98 iw(iwposcb+1 + xxs) =s_nolcleaned
99 mem_gain = int(nrow,8)*int(npiv,8)
101 IF (iw(iwposcb+1 + xxs).EQ.s_nolcbnocontig38)
THEN
102 nass = iw( iwposcb+1 + keep(ixsz) + 4)
104 & nrow,ncb,npiv+ncb,nass-npiv,
105 & iw(iwposcb+1 + xxs),rsizehole)
106 iw(iwposcb+1 + xxs) =s_nolcleaned38
107 mem_gain = int(nrow,8)*int(npiv+ncb-(nass-npiv),8)
109 IF (isizehole.NE.0)
THEN
111 & iwposcb+iw(iwposcb+1+xxi),
113 iwposcb=iwposcb+isizehole
114 iw(iwposcb+1+xxp+iw(iwposcb+1+xxi))=iwposcb+1
115 ptrist(step(inode_loc))=ptrist(step(inode_loc))+
119 iptrlu = iptrlu+mem_gain+rsizehole
120 lrlu = lrlu+mem_gain+rsizehole
121 ptrast(step(inode_loc))=
122 & ptrast(step(inode_loc))+mem_gain+rsizehole
125 IF (lrlu.LT.lreqcb_wished)
THEN
126 IF (lreqcb_eff.LT.lreqcb_wished)
THEN
128 & lrlu,iptrlu,iwpos,iwposcb,
130 & step, pimaster,pamaster,lrlus,
131 & keep(ixsz), comp, dkeep(97), myid,
132 & slavef, procnode_steps, dad)
136 & (lreq, lreqcb_eff, .false.,
139 & lrlu,iptrlu,iwpos,iwposcb,
141 & step, pimaster,pamaster,lrlus,
142 & keep(ixsz), comp, dkeep(97), myid,
143 & slavef, procnode_steps, dad,
145 IF (iflag.LT.0)
GOTO 650
147 IF (ixxp.GT.liw)
THEN
148 WRITE(*,*)
"Internal error 3 in CMUMPS_ALLOC_CB ",ixxp
150 IF (iw(ixxp).GT.0)
THEN
151 WRITE(*,*)
"Internal error 2 in CMUMPS_ALLOC_CB ",iw(ixxp),ixxp
153 iwposcb = iwposcb - lreq
155 iw(ixxp)= iwposcb + 1
156 iw(iwposcb+1:iwposcb+1+keep(ixsz))=-99999
157 iw(iwposcb+1+xxi)=lreq
160 iw(iwposcb+1+xxs)=state_arg
161 iw(iwposcb+1+xxn)=node_arg
162 iw(iwposcb+1+xxp)=top_of_stack
163 iw(iwposcb+1+xxnbpr)=0
165 iptrlu = iptrlu - lreqcb
167 lrlus = lrlus - lreqcb_eff
168 lrlusm =
min(lrlus, lrlusm)
169 IF (keep(405) .EQ. 0)
THEN
170 keep8(69) = keep8(69) + lreqcb_eff
171 keep8(68) =
max(keep8(69), keep8(68))
174 keep8(69) = keep8(69) + lreqcb_eff
175 keep8tmpcopy = keep8(69)
178 keep8(68) =
max(keep8tmpcopy, keep8(68))
182 & la-lrlus,0_8,lreqcb_eff,keep,keep8,lrlus)
subroutine cmumps_alloc_cb(inplace, min_space_in_place, ssarbr, process_bande, myid, n, keep, keep8, dkeep, iw, liw, a, la, lrlu, iptrlu, iwpos, iwposcb, slavef, procnode_steps, dad, ptrist, ptrast, step, pimaster, pamaster, lreq, lreqcb, node_arg, state_arg, set_header, comp, lrlus, lrlusm, iflag, ierror)
subroutine cmumps_get_size_needed(sizei_needed, sizer_needed, skip_top_stack, keep, keep8, n, iw, liw, a, la, lrlu, iptrlu, iwpos, iwposcb, ptrist, ptrast, step, pimaster, pamaster, lrlus, xsize, comp, acc_time, myid, slavef, procnode_steps, dad, iflag, ierror)