OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sfac_mem_dynamic.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 CONTAINS
16 SUBROUTINE smumps_dm_set_dynptr( CB_STATE, A, LA,
17 & PAMASTER_OR_PTRAST, IXXD,
18 & IXXR, SON_A, IACHK, RECSIZE )
19 IMPLICIT NONE
20 INTEGER, INTENT(IN) :: CB_STATE
21 INTEGER, INTENT(IN) :: IXXR(2), IXXD(2)
22 INTEGER(8), INTENT(IN) :: LA, PAMASTER_OR_PTRAST
23 REAL, INTENT(IN), TARGET :: A( LA )
24#if defined(mumps_f2003)
25 REAL, POINTER, DIMENSION(:), INTENT(OUT) :: SON_A
26#else
27 REAL, POINTER, DIMENSION(:) :: SON_A
28#endif
29 INTEGER(8), INTENT(OUT) :: IACHK, RECSIZE
30 IF ( SMUMPS_DM_IS_DYNAMIC( IXXD ) ) THEN
31 CALL mumps_geti8(recsize, ixxd)
32 CALL smumps_dm_set_ptr( pamaster_or_ptrast, recsize, son_a )
33 iachk = 1_8
34 ELSE
35 CALL mumps_geti8(recsize, ixxr)
36 iachk = pamaster_or_ptrast
37 son_a => a
38 ENDIF
39 RETURN
40 END SUBROUTINE smumps_dm_set_dynptr
41 SUBROUTINE smumps_dm_pamasterorptrast( N, SLAVEF, MYID, KEEP28,
42 & KEEP199, INODE, CB_STATE, IXXD,
43 & STEP, DAD, PROCNODE_STEPS,
44 & RCURRENT, PAMASTER, PTRAST,
45 & IS_PAMASTER, IS_PTRAST )
46 IMPLICIT NONE
47 INTEGER, INTENT(in) :: KEEP28, N, SLAVEF, MYID, INODE, CB_STATE
48 INTEGER, INTENT(in) :: KEEP199
49 INTEGER, INTENT(in) :: IXXD(2)
50 INTEGER, INTENT(in) :: DAD(KEEP28)
51 INTEGER, INTENT(in) :: STEP(N)
52 INTEGER, INTENT(in) :: PROCNODE_STEPS(KEEP28)
53 LOGICAL, INTENT(out) :: IS_PAMASTER, IS_PTRAST
54 INTEGER(8), INTENT(in) :: PAMASTER(KEEP28), PTRAST(KEEP28)
55 INTEGER(8), INTENT(in) :: RCURRENT
56 LOGICAL :: DAD_TYPE2_NOT_ON_MYID
57 INTEGER :: NODETYPE, DADTYPE
58 include 'mumps_headers.h'
59 INTEGER, EXTERNAL :: MUMPS_TYPENODE
60 INTEGER, EXTERNAL :: MUMPS_PROCNODE
61 is_pamaster = .false.
62 is_ptrast = .false.
63 IF (cb_state .EQ. s_free) THEN
64 RETURN
65 ENDIF
66 nodetype = mumps_typenode(procnode_steps(step(inode)), keep199)
67 dadtype=-99999
68 dad_type2_not_on_myid = .false.
69 IF (dad(step(inode)) .NE. 0) THEN
70 dadtype= mumps_typenode(
71 & procnode_steps(step(dad(step(inode)))),
72 & keep199)
73 IF (dadtype .EQ. 2 .AND.
74 & mumps_procnode(
75 & procnode_steps(step(dad(step(inode)))),
76 & keep199).NE.myid
77 & ) THEN
78 dad_type2_not_on_myid = .true.
79 ENDIF
80 ENDIF
81 IF (smumps_dm_isband(cb_state)) THEN
82 is_ptrast=.true.
83 ELSE IF (nodetype.EQ.1
84 & .AND. mumps_procnode(procnode_steps(step(inode)),
85 & keep199).EQ.myid
86 & .AND. dad_type2_not_on_myid)
87 & THEN
88 is_ptrast=.true.
89 ELSE
90 is_pamaster=.true.
91 ENDIF
92 RETURN
93 END SUBROUTINE smumps_dm_pamasterorptrast
94 LOGICAL FUNCTION smumps_dm_isband(XXSTATE)
95 INTEGER, INTENT(IN) :: xxstate
96 include 'mumps_headers.h'
97 SELECT CASE (xxstate)
98 CASE(s_notfree, s_cb1comp);
99 smumps_dm_isband = .false.
100 CASE(s_active, s_all,
101 & s_nolcbcontig, s_nolcbnocontig, s_nolcleaned,
102 & s_nolcbnocontig38, s_nolcbcontig38, s_nolcleaned38,
103 & s_nolnocb, s_nolnocbcleaned);
104 smumps_dm_isband = .true.
105 CASE(s_free);
106 smumps_dm_isband = .false.
107 CASE DEFAULT;
108 WRITE(*,*) "Wrong state during SMUMPS_DM_ISBAND", xxstate
109 CALL mumps_abort()
110 END SELECT
111 RETURN
112 END FUNCTION smumps_dm_isband
113 LOGICAL FUNCTION smumps_dm_is_dynamic(IXXD)
114 INTEGER :: ixxd(2)
115 INTEGER(8) :: dyn_size
116 CALL mumps_geti8( dyn_size, ixxd )
117 smumps_dm_is_dynamic = dyn_size > 0_8
118 RETURN
119 END FUNCTION smumps_dm_is_dynamic
121 & (mem_count_to_allocate, keep8,
122 & iflag, ierror)
123 IMPLICIT NONE
124 INTEGER(8), INTENT(IN) :: MEM_COUNT_TO_ALLOCATE
125 INTEGER(8), INTENT(INOUT) :: KEEP8(150)
126 INTEGER, INTENT(INOUT) :: IFLAG, IERROR
127 IF ( KEEP8(73) + MEM_COUNT_TO_ALLOCATE
128 & .GT. KEEP8(75) ) THEN
129 iflag = -19
130 CALL mumps_set_ierror(
131 & keep8(73) + mem_count_to_allocate -keep8(75),
132 & ierror )
133 ENDIF
134 RETURN
135 END SUBROUTINE smumps_dm_fac_alloc_allowed
136 SUBROUTINE smumps_dm_cbstatic2dynamic( STRATEGY,
137 & SIZER_NEEDED, SKIP_TOP_STACK,
138 & MYID, N, SLAVEF,
139 & KEEP, KEEP8,
140 & IW, LIW, IWPOSCB, IWPOS,
141 & A, LA, LRLU, IPTRLU, LRLUS,
142 & STEP, PTRAST, PAMASTER,
143 & PROCNODE_STEPS, DAD, IFLAG, IERROR)
144!$ USE OMP_LIB
146 IMPLICIT NONE
147 INTEGER, INTENT(in) :: STRATEGY
148 INTEGER(8), INTENT(in) :: SIZER_NEEDED
149 LOGICAL, INTENT(in) :: SKIP_TOP_STACK
150 INTEGER, INTENT(in) :: N, SLAVEF, KEEP(500)
151 INTEGER, INTENT(in) :: MYID
152 INTEGER(8), INTENT(inout) :: KEEP8(150)
153 INTEGER :: IWPOS, IWPOSCB, LIW
154 INTEGER, INTENT(inout) :: IW( LIW )
155 INTEGER(8) :: LA, LRLU, IPTRLU, LRLUS
156 REAL, INTENT(in) :: A( LA )
157 INTEGER, INTENT(in) :: STEP(N)
158 INTEGER(8), INTENT(inout) :: PTRAST(KEEP(28)), PAMASTER(KEEP(28))
159 INTEGER, INTENT(in) :: PROCNODE_STEPS(KEEP(28)), DAD(KEEP(28))
160 INTEGER, INTENT(inout) :: IFLAG, IERROR
161 include 'mumps_headers.h'
162 INTEGER :: ICURRENT, INODE, TYPEINODE, CB_STATE
163 INTEGER(8) :: RCURRENT, RCURRENT_SIZE, SIZEHOLE
164 INTEGER(8) :: KEEP8TMPCOPY
165 LOGICAL :: MOVE2DYNAMIC
166 LOGICAL :: SSARBRDAD
167 INTEGER(8) :: TMP_ADDRESS, ITMP8
168 INTEGER(8) :: I8
169 REAL, DIMENSION(:), POINTER :: DYNAMIC_CB
170 LOGICAL :: IS_PAMASTER, IS_PTRAST
171 INTEGER :: allocok
172!$ INTEGER(8) :: CHUNK8
173!$ LOGICAL :: OMP_FLAG
174!$ INTEGER :: NOMP
175 LOGICAL :: IFLAG_M13_OCCURED, IFLAG_M19_OCCURED
176 INTEGER(8) :: MIN_SIZE_M13, MIN_SIZE_M19
177 INTEGER, EXTERNAL :: MUMPS_TYPENODE
178 IF ( strategy .EQ. 0 ) THEN
179 IF (lrlus.LT.sizer_needed) THEN
180 iflag = -9
181 CALL mumps_set_ierror(sizer_needed-lrlus, ierror)
182 ENDIF
183 RETURN
184 ENDIF
185 iflag_m13_occured = .false.
186 min_size_m13 = huge(min_size_m13)
187 iflag_m19_occured = .false.
188 min_size_m19 = huge(min_size_m19)
189!$ NOMP = OMP_GET_MAX_THREADS()
190 icurrent = iwposcb + 1
191 rcurrent = iptrlu + 1
192 IF (strategy.EQ.1 .AND. sizer_needed.LE.lrlus) GOTO 500
193 IF (( keep8(73) + sizer_needed-lrlus).GT.
194 & keep8(75)) THEN
195 iflag = -19
197 & (keep8(73) + sizer_needed-lrlus-keep8(75), ierror)
198 GOTO 500
199 ENDIF
200 DO WHILE (icurrent .NE. liw-keep(ixsz)+1)
201 inode = iw(icurrent+xxn)
202 cb_state = iw(icurrent+xxs)
203 CALL mumps_geti8( rcurrent_size, iw(icurrent+xxr))
204 CALL smumps_dm_pamasterorptrast( n, slavef, myid, keep(28),
205 & keep(199), inode, cb_state,
206 & iw(icurrent+xxd:icurrent+xxd+1),
207 & step, dad, procnode_steps,
208 & rcurrent, pamaster, ptrast,
209 & is_pamaster, is_ptrast )
210 IF ( cb_state .NE. s_free .AND.
211 & .NOT. smumps_dm_is_dynamic(iw(icurrent+xxd)) ) THEN
212 typeinode = mumps_typenode(procnode_steps(step(inode)),
213 & keep(199))
214 IF (strategy .EQ. -1) THEN
215 move2dynamic = .false.
216 move2dynamic = move2dynamic .OR.
217 & cb_state .EQ. s_nolcbcontig .OR.
218 & cb_state .EQ. s_nolcbnocontig .OR.
219 & cb_state .EQ. s_nolcleaned .OR.
220 & cb_state .EQ. s_all .OR.
221 & cb_state .EQ. s_active
222 ELSE IF (strategy .EQ. 2 .OR. strategy .EQ. 3) THEN
223 move2dynamic = .true.
224 move2dynamic = move2dynamic .AND. (typeinode.NE.3)
225 ELSE IF (strategy .EQ. 1) THEN
226 move2dynamic = .false.
227 IF (lrlus.GT.sizer_needed) GOTO 500
228 IF (typeinode.EQ.3) GOTO 100
229 move2dynamic = move2dynamic.OR..true.
230 ELSE
231 WRITE(*,*) "Internal error in SMUMPS_DM_CBSTATIC2DYNAMIC",
232 & move2dynamic
233 CALL mumps_abort()
234 ENDIF
235 move2dynamic = move2dynamic .AND. (rcurrent_size .NE. 0_8)
236 move2dynamic = move2dynamic .AND.
237 & .NOT. ((icurrent.EQ.iwposcb + 1).AND.(skip_top_stack))
238 IF (strategy .NE. 3) THEN
239 IF ( keep(405) .EQ. 1 ) THEN
240!$OMP ATOMIC READ
241 keep8tmpcopy = keep8(73)
242!$OMP END ATOMIC
243 ELSE
244 keep8tmpcopy = keep8(73)
245 ENDIF
246 IF ( rcurrent_size + keep8tmpcopy .GT. keep8(75) ) THEN
247 iflag_m19_occured= .true.
248 min_size_m19 = min( min_size_m19,
249 & rcurrent_size+keep8(73)-keep8(75) )
250 move2dynamic = .false.
251 ENDIF
252 ENDIF
253 IF ( move2dynamic ) THEN
254#if defined(MUMPS_ALLOC_FROM_C)
255 CALL mumps_malloc_c( tmp_address,
256 & rcurrent_size * keep(35) )
257 IF (tmp_address .EQ. 0_8) THEN
258 allocok=1
259 ELSE
260 allocok=0
261 ENDIF
262#else
263 ALLOCATE(dynamic_cb(rcurrent_size), stat=allocok)
264#endif
265 IF (allocok .GT. 0) THEN
266 IF ( (strategy .NE. 1).OR.
267 & (sizer_needed-lrlus).GE.rcurrent_size) THEN
268 iflag = -13
269 CALL mumps_set_ierror(sizer_needed-lrlus, ierror)
270 GOTO 500
271 ENDIF
272 iflag_m13_occured = .true.
273 min_size_m13 = min(min_size_m13, rcurrent_size)
274 GOTO 100
275 ENDIF
276 sizehole=0_8
277 IF (keep(216).NE.3) THEN
278 CALL smumps_sizefreeinrec( iw(icurrent),
279 & liw-icurrent+1, sizehole, keep(ixsz))
280 ENDIF
281 CALL mumps_storei8(rcurrent_size,iw(icurrent+xxd))
282#if defined(MUMPS_ALLOC_FROM_C)
283 CALL smumps_dm_set_ptr( tmp_address, rcurrent_size,
284 & dynamic_cb )
285#else
286 CALL mumps_addr_c(dynamic_cb(1), tmp_address)
287#endif
288 IF (is_ptrast) THEN
289 ptrast(step(inode)) = tmp_address
290 ELSE IF (is_pamaster) THEN
291 pamaster(step(inode)) = tmp_address
292 ELSE
293 WRITE(*,*)
294 & "Internal error 3 in SMUMPS_DM_CBSTATIC2DYNAMIC",
295 & rcurrent, ptrast(step(inode)), pamaster(step(inode))
296 CALL mumps_abort()
297 ENDIF
298 itmp8 = (rcurrent_size-sizehole)
299 lrlus = lrlus + itmp8
300 IF (keep(405).EQ.1) THEN
301 IF (sizehole .NE. 0_8) THEN
302!$OMP ATOMIC CAPTURE
303 keep8(69) = keep8(69) + sizehole
304 keep8tmpcopy = keep8(69)
305!$OMP END ATOMIC
306!$OMP ATOMIC UPDATE
307 keep8(68) = max( keep8(68), keep8tmpcopy )
308!$OMP END ATOMIC
309 ENDIF
310 ELSE
311 keep8(69) = keep8(69) + sizehole
312 keep8(68) = max( keep8(68), keep8(69) )
313 ENDIF
314 CALL mumps_set_ssarbr_dad(ssarbrdad, inode,
315 & dad, n, keep(28),
316 & step, procnode_steps, keep(199))
317 CALL smumps_load_mem_update( ssarbrdad, .false.,
318 & la - lrlus, 0_8, -(rcurrent_size-sizehole),
319 & keep, keep8, lrlus)
320 IF (icurrent .EQ. iwposcb+1) THEN
321 iptrlu = iptrlu + rcurrent_size
322 lrlu = lrlu + rcurrent_size
323 CALL mumps_storei8(0_8, iw(icurrent+xxr))
324 ENDIF
325 IF (strategy .NE. 3) THEN
327 & rcurrent_size, keep(405).EQ.1, keep8,
328 & iflag, ierror, .false., .false.)
329 IF (iflag.LT.0) GOTO 500
330 ENDIF
331!$ CHUNK8 = max( int(KEEP(361),8),
332!$ & (RCURRENT_SIZE+NOMP-1) / NOMP)
333!$ OMP_FLAG = ( (RCURRENT_SIZE > int(KEEP(361),8))
334!$ & .AND.(NOMP.GT.1)
335!$ & )
336!$OMP PARALLEL DO PRIVATE(I8) SCHEDULE(STATIC, CHUNK8)
337!$OMP& IF (OMP_FLAG)
338 DO i8=1_8, rcurrent_size
339 dynamic_cb(i8) = a(rcurrent+i8-1_8)
340 ENDDO
341!$OMP END PARALLEL DO
342 ENDIF
343 ENDIF
344 100 CONTINUE
345 rcurrent = rcurrent + rcurrent_size
346 icurrent = icurrent + iw(icurrent+xxi)
347 END DO
348 IF (lrlus.LT.sizer_needed) THEN
349 IF (iflag_m19_occured) THEN
350 iflag = -19
351 CALL mumps_set_ierror(min_size_m19, ierror)
352 ELSE IF (iflag_m13_occured) THEN
353 iflag = -13
354 CALL mumps_set_ierror(min_size_m13, ierror)
355 ELSE
356 iflag = -9
357 CALL mumps_set_ierror(sizer_needed-lrlus, ierror)
358 ENDIF
359 ENDIF
360 500 CONTINUE
361 RETURN
362 END SUBROUTINE smumps_dm_cbstatic2dynamic
363 SUBROUTINE smumps_dm_freealldynamiccb( MYID, N, SLAVEF,
364 & KEEP, KEEP8, IW, LIW, IWPOSCB, IWPOS,
365 & STEP, PTRAST, PAMASTER,
366 & PROCNODE_STEPS, DAD, ATOMIC_UPDATES )
367 INTEGER, INTENT(in) :: N, SLAVEF, KEEP(500)
368 INTEGER, INTENT(in) :: MYID
369 INTEGER(8), INTENT(inout) :: KEEP8(150)
370 INTEGER :: IWPOS, IWPOSCB, LIW
371 INTEGER, INTENT(inout) :: IW( LIW )
372 INTEGER, INTENT(in) :: STEP(N)
373 INTEGER(8), INTENT(in) :: PTRAST(KEEP(28)), PAMASTER(KEEP(28))
374 INTEGER, INTENT(in) :: PROCNODE_STEPS(KEEP(28)), DAD(KEEP(28))
375 LOGICAL, INTENT(in) :: ATOMIC_UPDATES
376 include 'mumps_headers.h'
377 INTEGER :: ICURRENT, INODE
378 INTEGER :: CB_STATE
379 INTEGER(8) :: DYN_SIZE, TMP_ADDRESS
380 INTEGER(8), PARAMETER :: RDUMMY = -987654
381 logical :: is_pamaster, is_ptrast
382 REAL, DIMENSION(:), POINTER :: TMP_PTR
383 icurrent = iwposcb + 1
384 IF (keep8(73) .NE. 0_8) THEN
385 DO WHILE (icurrent .LT. liw-keep(ixsz)+1)
386 inode = iw(icurrent+xxn)
387 cb_state = iw(icurrent+xxs)
388 IF (cb_state.NE.s_free) THEN
389 CALL mumps_geti8( dyn_size, iw(icurrent+xxd) )
390 IF (dyn_size .GT. 0_8) THEN
391 CALL smumps_dm_pamasterorptrast( n, slavef, myid, keep(28),
392 & keep(199), inode, cb_state, iw(icurrent+xxd),
393 & step, dad, procnode_steps,
394 & rdummy, pamaster, ptrast,
395 & is_pamaster, is_ptrast )
396 IF (is_pamaster) THEN
397 tmp_address = pamaster(step(inode))
398 ELSE IF (is_ptrast) THEN
399 tmp_address = ptrast(step(inode))
400 ELSE
401 WRITE(*,*) "Internal error 1 in SMUMPS_DM_FREEALLDYNAMICCB"
402 & , is_ptrast, is_pamaster
403 ENDIF
404 CALL smumps_dm_set_ptr(tmp_address, dyn_size, tmp_ptr)
405 CALL smumps_dm_free_block( iw(icurrent+xxg),
406 & tmp_ptr, dyn_size,
407 & atomic_updates, keep8 )
408 CALL mumps_storei8(0_8, iw(icurrent+xxd))
409 ENDIF
410 ENDIF
411 icurrent = icurrent + iw(icurrent+xxi)
412 ENDDO
413 ENDIF
414 RETURN
415 END SUBROUTINE smumps_dm_freealldynamiccb
416 SUBROUTINE smumps_dm_set_ptr(ADDRESS, SIZFR8, CBPTR)
418 IMPLICIT NONE
419 INTEGER(8), INTENT(IN) :: ADDRESS, SIZFR8
420#if defined(MUMPS_F2003)
421 REAL, DIMENSION(:), POINTER, INTENT(out) :: CBPTR
422#else
423 REAL, DIMENSION(:), POINTER :: CBPTR
424#endif
425!$OMP CRITICAL(STATIC_PTR_ACCESS)
426 CALL smumps_set_tmp_ptr_c( address, sizfr8 )
427 CALL smumps_get_tmp_ptr( cbptr )
428!$OMP END CRITICAL(STATIC_PTR_ACCESS)
429 RETURN
430 END SUBROUTINE smumps_dm_set_ptr
431 SUBROUTINE smumps_dm_free_block( XXG_STATUS, DYNPTR, SIZFR8,
432 & ATOMIC_UPDATES, KEEP8 )
433 IMPLICIT NONE
434 include 'mumps_headers.h'
435 INTEGER :: XXG_STATUS
436 REAL, POINTER, DIMENSION(:) :: DYNPTR
437 INTEGER(8) :: SIZFR8
438 LOGICAL, INTENT(IN) :: ATOMIC_UPDATES
439 INTEGER(8) :: KEEP8(150)
440 INTEGER IDUMMY
441#if defined(MUMPS_ALLOC_FROM_C)
442 CALL MUMPS_FREE_C(DYNPTR(1))
443#else
444 DEALLOCATE(dynptr)
445#endif
446 NULLIFY(dynptr)
448 & -sizfr8, atomic_updates, keep8, idummy, idummy,
449 & .true., .false.)
450 RETURN
451 END SUBROUTINE smumps_dm_free_block
452 END MODULE smumps_dynamic_memory_m
453 SUBROUTINE smumps_dm_freealldynamiccb_i( MYID, N, SLAVEF,
454 & KEEP, KEEP8, IW, LIW, IWPOSCB, IWPOS,
455 & STEP, PTRAST, PAMASTER,
456 & PROCNODE_STEPS, DAD, ATOMIC_UPDATES )
458 IMPLICIT NONE
459 INTEGER, INTENT(in) :: N, SLAVEF, KEEP(500)
460 INTEGER, INTENT(in) :: MYID
461 INTEGER(8), INTENT(inout) :: KEEP8(150)
462 INTEGER :: IWPOS, IWPOSCB, LIW
463 INTEGER, INTENT(inout) :: IW( LIW )
464 INTEGER, INTENT(in) :: STEP(N)
465 INTEGER(8), INTENT(in) :: PTRAST(KEEP(28)), PAMASTER(KEEP(28))
466 INTEGER, INTENT(in) :: PROCNODE_STEPS(KEEP(28)), DAD(KEEP(28))
467 LOGICAL, INTENT(in) :: ATOMIC_UPDATES
468 CALL SMUMPS_DM_FREEALLDYNAMICCB( MYID, N, SLAVEF,
469 & KEEP, KEEP8, IW, LIW, IWPOSCB, IWPOS,
470 & step, ptrast, pamaster,
471 & procnode_steps, dad, atomic_updates )
472 RETURN
473 END SUBROUTINE smumps_dm_freealldynamiccb_i
475 & STRATEGY,
476 & SIZER_NEEDED, SKIP_TOP_STACK,
477 & MYID, N, SLAVEF,
478 & KEEP, KEEP8,
479 & IW, LIW, IWPOSCB, IWPOS,
480 & A, LA, LRLU, IPTRLU, LRLUS,
481 & STEP, PTRAST, PAMASTER,
482 & PROCNODE_STEPS, DAD, IFLAG, IERROR)
484 IMPLICIT NONE
485 INTEGER, INTENT(in) :: STRATEGY
486 INTEGER(8), INTENT(in) :: SIZER_NEEDED
487 LOGICAL, INTENT(in) :: SKIP_TOP_STACK
488 INTEGER, INTENT(in) :: N, SLAVEF, KEEP(500)
489 INTEGER, INTENT(in) :: MYID
490 INTEGER(8), INTENT(inout) :: KEEP8(150)
491 INTEGER :: IWPOS, IWPOSCB, LIW
492 INTEGER, INTENT(inout) :: IW( LIW )
493 INTEGER(8) :: LA, LRLU, IPTRLU, LRLUS
494 REAL, INTENT(in) :: A( LA )
495 INTEGER, INTENT(in) :: STEP(N)
496 INTEGER(8), INTENT(inout) :: PTRAST(KEEP(28)), PAMASTER(KEEP(28))
497 INTEGER, INTENT(in) :: PROCNODE_STEPS(KEEP(28)), DAD(KEEP(28))
498 INTEGER, INTENT(inout) :: IFLAG, IERROR
499 CALL SMUMPS_DM_CBSTATIC2DYNAMIC( STRATEGY,
500 & sizer_needed, skip_top_stack,
501 & myid, n, slavef,
502 & keep, keep8,
503 & iw, liw, iwposcb, iwpos,
504 & a, la, lrlu, iptrlu, lrlus,
505 & step, ptrast, pamaster,
506 & procnode_steps, dad, iflag, ierror)
507 RETURN
508 END SUBROUTINE smumps_dm_cbstatic2dynamic_i
#define mumps_abort
Definition VE_Metis.h:25
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
logical function smumps_dm_isband(xxstate)
subroutine smumps_dm_fac_alloc_allowed(mem_count_to_allocate, keep8, iflag, ierror)
subroutine smumps_dm_set_dynptr(cb_state, a, la, pamaster_or_ptrast, ixxd, ixxr, son_a, iachk, recsize)
subroutine smumps_dm_freealldynamiccb(myid, n, slavef, keep, keep8, iw, liw, iwposcb, iwpos, step, ptrast, pamaster, procnode_steps, dad, atomic_updates)
logical function smumps_dm_is_dynamic(ixxd)
subroutine smumps_dm_free_block(xxg_status, dynptr, sizfr8, atomic_updates, keep8)
subroutine smumps_dm_set_ptr(address, sizfr8, cbptr)
subroutine smumps_dm_cbstatic2dynamic(strategy, sizer_needed, skip_top_stack, myid, n, slavef, keep, keep8, iw, liw, iwposcb, iwpos, a, la, lrlu, iptrlu, lrlus, step, ptrast, pamaster, procnode_steps, dad, iflag, ierror)
subroutine smumps_dm_pamasterorptrast(n, slavef, myid, keep28, keep199, inode, cb_state, ixxd, step, dad, procnode_steps, rcurrent, pamaster, ptrast, is_pamaster, is_ptrast)
subroutine, public smumps_load_mem_update(ssarbr, process_bande_arg, mem_value, new_lu, inc_mem_arg, keep, keep8, lrlus)
subroutine, public smumps_get_tmp_ptr(ptr)
subroutine smumps_sizefreeinrec(iw, lrec, size_free, xsize)
subroutine smumps_dm_cbstatic2dynamic_i(strategy, sizer_needed, skip_top_stack, myid, n, slavef, keep, keep8, iw, liw, iwposcb, iwpos, a, la, lrlu, iptrlu, lrlus, step, ptrast, pamaster, procnode_steps, dad, iflag, ierror)
subroutine smumps_dm_freealldynamiccb_i(myid, n, slavef, keep, keep8, iw, liw, iwposcb, iwpos, step, ptrast, pamaster, procnode_steps, dad, atomic_updates)
subroutine mumps_storei8(i8, int_array)
subroutine mumps_set_ierror(size8, ierror)
subroutine mumps_set_ssarbr_dad(ssarbr, inode, dad, n, keep28, step, procnode_steps, k199)
subroutine mumps_geti8(i8, int_array)
subroutine mumps_dm_fac_upd_dyn_memcnts(mem_count_allocated, atomic_updates, keep8, iflag, ierror, k69upd, k71upd)