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

Go to the source code of this file.

Functions/Subroutines

subroutine cmumps_fac_b (n, s_is_pointers, la, liw, sym_perm, na, lna, ne_steps, nfsiz, fils, step, frere, dad, cand, istep_to_iniv2, tab_pos_in_pere, ptrar, ldptrar, ptrist, ptlust_s, ptrfac, iw1, iw2, itloc, rhs_mumps, pool, lpool, cntl1, icntl, info, rinfo, keep, keep8, procnode_steps, slavef, comm_nodes, myid, myid_nodes, bufr, lbufr, lbufr_bytes, cmumps_lbuf, intarr, dblarr, root, nelt, frtptr, frtelt, comm_load, ass_irecv, seuil, seuil_ldlt_niv2, mem_distrib, dkeep, pivnul_list, lpn_list, lrgroups, ipool_b_l0_omp, lpool_b_l0_omp, ipool_a_l0_omp, lpool_a_l0_omp, l_virt_l0_omp, virt_l0_omp, virt_l0_omp_mapping, l_phys_l0_omp, phys_l0_omp, perm_l0_omp, ptr_leafs_l0_omp, l0_omp_mapping, ll0_omp_mapping, thread_la, l0_omp_factors, ll0_omp_factors, i4_l0_omp, nbstats_i4, nbcols_i4, i8_l0_omp, nbstats_i8, nbcols_i8)
subroutine cmumps_fac_par_i (n, iw, liw, a, la, nstk_steps, nd, fils, step, frere, dad, cand, istep_to_iniv2, tab_pos_in_pere, nstepsdone, opass, opeli, nelva, comp, maxfrt, nmaxnpiv, ntotpv, noffnegpv, nb22t1, nb22t2, nbtiny, det_exp, det_mant, det_sign, ptrist, ptrast, pimaster, pamaster, ptrarw, ptraiw, itloc, rhs_mumps, ipool, lpool, l0_omp_mapping, ll0_omp_mapping, mumps_tps_arr, cmumps_tps_arr, ltps_arr, rinfo, posfac, iwpos, lrlu, iptrlu, lrlus, leaf, nbroot, nbrtot, nbroot_under_l0, uu, icntl, ptlust, ptrfac, info, keep, keep8, procnode_steps, slavef, myid, comm_nodes, myid_nodes, bufr, lbufr, lbufr_bytes, intarr, dblarr, root, perm, nelt, frtptr, frtelt, lptrar, comm_load, ass_irecv, seuil, seuil_ldlt_niv2, mem_distrib, ne, dkeep, pivnul_list, lpn_list, lrgroups)

Function/Subroutine Documentation

◆ cmumps_fac_b()

subroutine cmumps_fac_b ( integer n,
type (s_is_pointers_t) s_is_pointers,
integer(8) la,
integer liw,
integer, dimension(n) sym_perm,
integer, dimension(lna) na,
integer lna,
integer, dimension(keep(28)) ne_steps,
integer, dimension(keep(28)) nfsiz,
integer, dimension(n) fils,
integer, dimension(n) step,
integer, dimension(keep(28)) frere,
integer, dimension(keep(28)) dad,
integer, dimension(slavef+1, max(1,keep(56))) cand,
integer, dimension(keep(71)) istep_to_iniv2,
integer, dimension(slavef+2,max(1,keep(56))) tab_pos_in_pere,
integer(8), dimension(ldptrar,2), intent(in) ptrar,
integer ldptrar,
integer, dimension(keep(28)) ptrist,
integer, dimension(keep(28)) ptlust_s,
integer(8), dimension(keep(28)) ptrfac,
integer, dimension(2*keep(28)) iw1,
integer(8), dimension(2*keep(28)) iw2,
integer, dimension(n+keep(253)) itloc,
complex, dimension(keep(255)) rhs_mumps,
integer, dimension(lpool) pool,
integer lpool,
real cntl1,
integer, dimension(60) icntl,
integer, dimension(80) info,
real, dimension(40) rinfo,
integer, dimension(500) keep,
integer(8), dimension(150) keep8,
integer, dimension(keep(28)) procnode_steps,
integer slavef,
integer comm_nodes,
integer myid,
integer myid_nodes,
integer, dimension( lbufr ) bufr,
integer, intent(in) lbufr,
integer, intent(in) lbufr_bytes,
integer, intent(in) cmumps_lbuf,
integer, dimension(keep8(27)) intarr,
complex, dimension(keep8(26)) dblarr,
type (cmumps_root_struc) root,
integer nelt,
integer, dimension(*) frtptr,
integer, dimension(*) frtelt,
integer comm_load,
integer ass_irecv,
real seuil,
real seuil_ldlt_niv2,
integer, dimension(0:slavef - 1) mem_distrib,
real, dimension(230) dkeep,
integer, dimension(lpn_list) pivnul_list,
integer lpn_list,
integer, dimension(n) lrgroups,
integer, dimension( lpool_b_l0_omp ), intent(in) ipool_b_l0_omp,
integer, intent(in) lpool_b_l0_omp,
integer, dimension( lpool_a_l0_omp ), intent(in) ipool_a_l0_omp,
integer, intent(in) lpool_a_l0_omp,
integer, intent(in) l_virt_l0_omp,
integer, dimension( l_virt_l0_omp ), intent(in) virt_l0_omp,
integer, dimension( l_virt_l0_omp ), intent(in) virt_l0_omp_mapping,
integer, intent(in) l_phys_l0_omp,
integer, dimension( l_phys_l0_omp ), intent(in) phys_l0_omp,
integer, dimension( l_phys_l0_omp ), intent(in) perm_l0_omp,
integer, dimension( l_phys_l0_omp + 1), intent(in) ptr_leafs_l0_omp,
integer, dimension( ll0_omp_mapping ), intent(out) l0_omp_mapping,
integer, intent(in) ll0_omp_mapping,
integer(8), intent(in) thread_la,
type(cmumps_l0ompfac_t), dimension( ll0_omp_factors ), intent(out) l0_omp_factors,
integer, intent(in) ll0_omp_factors,
integer, dimension(nbstats_i4, nbcols_i4), intent(in) i4_l0_omp,
integer, intent(in) nbstats_i4,
integer, intent(in) nbcols_i4,
integer(8), dimension(nbstats_i8, nbcols_i8), intent(in) i8_l0_omp,
integer, intent(in) nbstats_i8,
integer, intent(in) nbcols_i8 )

Definition at line 14 of file cfac_b.F.

30 USE cmumps_load
33 USE omp_lib
34 USE mumps_tps_m
35 USE cmumps_tps_m
37 USE cmumps_struc_def, ONLY : cmumps_root_struc
38 & , cmumps_l0ompfac_t
39 IMPLICIT NONE
40 include 'mpif.h'
41 TYPE (CMUMPS_ROOT_STRUC) :: root
42 INTEGER(8) :: LA
43 INTEGER N,LIW,LPOOL,SLAVEF,COMM_NODES
44 INTEGER MYID, MYID_NODES,LNA
45 TYPE (S_IS_POINTERS_T) :: S_IS_POINTERS
46 REAL RINFO(40)
47 INTEGER, INTENT( IN ) :: LBUFR, LBUFR_BYTES
48 INTEGER :: BUFR( LBUFR )
49 INTEGER, INTENT( IN ) :: CMUMPS_LBUF
50 INTEGER, DIMENSION(0:SLAVEF - 1) :: MEM_DISTRIB
51 INTEGER NELT, LDPTRAR
52 INTEGER FRTPTR(*), FRTELT(*)
53 INTEGER LRGROUPS(N)
54 REAL CNTL1
55 INTEGER ICNTL(60)
56 INTEGER INFO(80), KEEP(500)
57 INTEGER(8) KEEP8(150)
58 INTEGER SYM_PERM(N), NA(LNA),
59 & NE_STEPS(KEEP(28)), FILS(N),
60 & FRERE(KEEP(28)), NFSIZ(KEEP(28)),
61 & DAD(KEEP(28))
62 INTEGER CAND(SLAVEF+1, max(1,KEEP(56)))
63 INTEGER STEP(N)
64 INTEGER(8), INTENT(IN) :: PTRAR(LDPTRAR,2)
65 INTEGER(8) :: PTRFAC(KEEP(28))
66 INTEGER PTRIST(KEEP(28)), PTLUST_S(KEEP(28))
67 INTEGER IW1(2*KEEP(28)), ITLOC(N+KEEP(253)), POOL(LPOOL)
68 COMPLEX :: RHS_MUMPS(KEEP(255))
69 INTEGER(8) :: IW2(2*KEEP(28))
70 INTEGER PROCNODE_STEPS(KEEP(28))
71 INTEGER COMM_LOAD, ASS_IRECV
72 INTEGER ISTEP_TO_INIV2(KEEP(71)),
73 & TAB_POS_IN_PERE(SLAVEF+2,max(1,KEEP(56)))
74 COMPLEX DBLARR(KEEP8(26))
75 INTEGER INTARR(KEEP8(27))
76 REAL SEUIL, SEUIL_LDLT_NIV2
77 INTEGER LPN_LIST
78 INTEGER PIVNUL_LIST(LPN_LIST)
79 REAL DKEEP(230)
80 INTEGER, INTENT (IN) :: LPOOL_B_L0_OMP
81 INTEGER, INTENT (IN) :: IPOOL_B_L0_OMP( LPOOL_B_L0_OMP )
82 INTEGER, INTENT (IN) :: LPOOL_A_L0_OMP
83 INTEGER, INTENT (IN) :: IPOOL_A_L0_OMP( LPOOL_A_L0_OMP )
84 INTEGER, INTENT (IN) :: L_PHYS_L0_OMP
85 INTEGER, INTENT (IN) :: PHYS_L0_OMP( L_PHYS_L0_OMP )
86 INTEGER, INTENT (IN) :: L_VIRT_L0_OMP
87 INTEGER, INTENT (IN) :: VIRT_L0_OMP( L_VIRT_L0_OMP )
88 INTEGER, INTENT (IN) :: VIRT_L0_OMP_MAPPING( L_VIRT_L0_OMP )
89 INTEGER, INTENT (IN) :: PERM_L0_OMP( L_PHYS_L0_OMP )
90 INTEGER, INTENT (IN) :: PTR_LEAFS_L0_OMP( L_PHYS_L0_OMP + 1)
91 INTEGER, INTENT (IN) :: LL0_OMP_MAPPING
92 INTEGER, INTENT (OUT):: L0_OMP_MAPPING( LL0_OMP_MAPPING )
93 INTEGER, INTENT (IN) :: LL0_OMP_FACTORS
94 TYPE(CMUMPS_L0OMPFAC_T), INTENT (OUT) :: L0_OMP_FACTORS(
95 & LL0_OMP_FACTORS )
96 INTEGER, INTENT (IN) :: NBSTATS_I4, NBSTATS_I8
97 INTEGER, INTENT (IN) :: NBCOLS_I4, NBCOLS_I8
98 INTEGER, INTENT (IN) :: I4_L0_OMP(NBSTATS_I4, NBCOLS_I4)
99 INTEGER(8), INTENT (IN) :: I8_L0_OMP(NBSTATS_I8, NBCOLS_I8)
100 INTEGER(8), INTENT ( IN ) :: THREAD_LA
101 INTEGER, EXTERNAL :: MUMPS_PROCNODE
102 INTEGER allocok
103 REAL UULOC
104 INTEGER IERR
105 INTEGER LP, MPRINT
106 LOGICAL LPOK
107 INTEGER NSTK,PTRAST
108 INTEGER PIMASTER, PAMASTER
109 LOGICAL PROK
110 REAL,PARAMETER :: ZERO = 0.0e0
111 INTEGER I
112 INTEGER LTPS_ARR
113 TYPE (MUMPS_TPS_T), DIMENSION(:), ALLOCATABLE :: MUMPS_TPS_ARR
114 TYPE (CMUMPS_TPS_T), DIMENSION(:), ALLOCATABLE :: CMUMPS_TPS_ARR
115 INTEGER NBROOT_UNDER_L0
116 INTEGER :: NSTEPSDONE
117 DOUBLE PRECISION :: OPASS, OPELI
118 INTEGER :: NELVA, COMP
119 INTEGER :: MAXFRT, NTOTPV, NMAXNPIV, NOFFNEGPV
120 INTEGER :: NB22T1, NB22T2, NBTINY, DET_EXP, DET_SIGN
121 COMPLEX :: DET_MANT
122 INTEGER :: NTOTPVTOT
123 INTEGER(8) :: POSFAC, LRLU, IPTRLU, LRLUS
124 INTEGER IWPOS, LEAF, NBROOT, NROOT
125 INTEGER :: LIW_ARG_FAC_PAR
126 INTEGER(8) :: LA_ARG_FAC_PAR
127 COMPLEX, TARGET:: CDUMMY(1)
128 INTEGER, TARGET :: IDUMMY(1)
129 LOGICAL :: IW_DUMMY, A_DUMMY
130 keep(41)=0
131 keep(42)=0
132 lp = icntl(1)
133 lpok = (lp.GT.0) .AND. (icntl(4).GE.1)
134 mprint = icntl(2)
135 prok = (mprint.GT.0) .AND. (icntl(4).GE.2)
136 uuloc = cntl1
137 pimaster = 1
138 nstk = pimaster + keep(28)
139 ptrast = 1
140 pamaster = 1 + keep(28)
141 IF (keep(4).LE.0) keep(4)=32
142 IF (keep(5).LE.0) keep(5)=16
143 IF (keep(5).GT.keep(4)) keep(5) = keep(4)
144 IF (keep(6).LE.0) keep(6)=24
145 IF (keep(3).LE.keep(4)) keep(3)=keep(4)*2
146 IF (keep(6).GT.keep(3)) keep(6) = keep(3)
147 posfac = 1_8
148 iwpos = 1
149 lrlu = la
150 lrlus = lrlu
151 keep8(63) = 0_8
152 keep8(64) = 0_8
153 keep8(65) = 0_8
154 keep8(66) = 0_8
155 keep8(68) = 0_8
156 keep8(69) = 0_8
157 keep8(70) = 0_8
158 keep8(71) = 0_8
159 keep8(73) = 0_8
160 keep8(74) = 0_8
161 iptrlu = lrlu
162 nstepsdone = 0
163 opass = 0.0d0
164 opeli = 0.0d0
165 nelva = 0
166 comp = 0
167 maxfrt = 0
168 nmaxnpiv = 0
169 ntotpv = 0
170 noffnegpv = 0
171 nb22t1 = 0
172 nb22t2 = 0
173 nbtiny = 0
174 det_exp = 0
175 det_sign = 1
176 det_mant = cmplx(1.0e0,0.0e0, kind=kind(1.0e0))
177 iw1(nstk:nstk+keep(28)-1) = ne_steps(1:keep(28))
178 CALL mumps_init_nroot_dist(n, nbroot, nroot,
179 & myid_nodes,
180 & slavef, na, lna,
181 & keep, step,
182 & procnode_steps)
183 IF (keep(400) .GT. 0
184 & ) THEN
185 IF (lpool .NE. lpool_a_l0_omp) THEN
186 WRITE(*,*) "Check LPOOL vs. LPOOL_A_L0_OMP",
187 & lpool, lpool_a_l0_omp, keep(28)
188 CALL mumps_abort()
189 ENDIF
190 DO i = 1, lpool
191 pool(i) = ipool_a_l0_omp(i)
192 ENDDO
193 ELSE
194 CALL mumps_init_pool_dist(n, leaf,
195 & myid_nodes,
196 & slavef, na, lna,
197 & keep,keep8, step,
198 & procnode_steps,
199 & pool, lpool)
200 CALL cmumps_init_pool_last3(pool, lpool, leaf)
201 ENDIF
202 CALL cmumps_load_init_sbtr_struct(pool, lpool,keep,keep8)
203 IF ( keep( 38 ) .NE. 0 ) THEN
204 nbroot = nbroot + root%NPROW * root%NPCOL - 1
205 END IF
206 IF ( root%yes ) THEN
207 IF ( mumps_procnode( procnode_steps(step(keep(38))),
208 & keep(199) )
209 & .NE. myid_nodes ) THEN
210 nroot = nroot + 1
211 END IF
212 END IF
213 ptrist(1:keep(28))=0
214 ptlust_s(1:keep(28))=0
215 ptrfac(1:keep(28))=-99999_8
216 iw2(ptrast:ptrast+keep(28)-1)=0_8
217 iw1(pimaster:pimaster+keep(28)-1)=-99999_8
218 keep(405) = 0
219 dkeep(95)=0.0d0
220 dkeep(96)=0.0d0
221 nbroot_under_l0 = 0
222 IF (keep(400).GT.0
223 & ) THEN
224 keep(405)=1
225 ALLOCATE( mumps_tps_arr( keep(400) ), stat=allocok )
226 IF (allocok .GT. 0) THEN
227 IF (lpok) THEN
228 WRITE(lp,*) "Problem allocating MUMPS_TPS_ARR",
229 & keep(400)
230 ENDIF
231 CALL mumps_abort()
232 ENDIF
233 ALLOCATE( cmumps_tps_arr( keep(400) ), stat=allocok )
234 IF (allocok .GT. 0) THEN
235 WRITE(*,*) "Problem allocating CMUMPS_TPS_ARR", keep(400)
236 CALL mumps_abort()
237 ENDIF
238 CALL cmumps_fac_l0_omp(n,liw, iw1(nstk), nfsiz,
239 & fils,step, frere, dad, istep_to_iniv2, tab_pos_in_pere, ptrist,
240 & iw2(ptrast), iw1(pimaster), iw2(pamaster), ptrar(1,2),
241 & ptrar(1,1),
242 & itloc, rhs_mumps, rinfo, nroot, nbroot, nbroot_under_l0,
243 & uuloc, icntl, ptlust_s, ptrfac, info, keep, keep8,
244 & procnode_steps,slavef, comm_nodes, myid_nodes, bufr,
245 & lbufr,lbufr_bytes,intarr,dblarr,root, sym_perm, nelt, frtptr,
246 & frtelt, ldptrar, comm_load, ass_irecv, seuil, seuil_ldlt_niv2,
247 & mem_distrib, ne_steps, dkeep,pivnul_list,lpn_list,
248 & lpool_b_l0_omp, ipool_b_l0_omp, l_virt_l0_omp,
249 & virt_l0_omp, virt_l0_omp_mapping, l_phys_l0_omp, phys_l0_omp,
250 & perm_l0_omp, ptr_leafs_l0_omp, l0_omp_mapping, ll0_omp_mapping,
251 & thread_la, mumps_tps_arr, cmumps_tps_arr, nstepsdone,
252 & opass, opeli, nelva, comp, maxfrt, nmaxnpiv, ntotpv, noffnegpv,
253 & nb22t1, nbtiny, det_exp, det_mant, det_sign,
254 & lrgroups(1), l0_omp_factors, ll0_omp_factors,
255 & i4_l0_omp, nbstats_i4, nbcols_i4,
256 & i8_l0_omp, nbstats_i8, nbcols_i8 )
257 keep(405)=0
258 dkeep(16) = opeli
259 keep8(75)=keep8(76)
260 keep8(63)=keep8(74)
261 keep8(62) = keep8(74)-keep8(62)
262 IF (info(1) .LT. 0) THEN
263 keep8(69) = keep8(73)
264 ENDIF
265 keep8(74) = keep8(73)
266 IF ((info(1).GE.0).AND.(keep8(74).GT.keep8(75))) THEN
267 info(1) = -19
268 CALL mumps_set_ierror (
269 & keep8(74)-keep8(75), info(2))
270 IF (lpok) THEN
271 WRITE(lp,'(/A/,A,I8,A,I10/,A/,A/)')
272 & '** ERROR: memory allowed (ICNTL(23)) is not large enough:',
273 & ' INFO(1)=', info(1), ' INFO(2)=', info(2),
274 & ' memory used at the end of the treatment of L0 thread ',
275 & ' does not enable processing nodes above L0 thread '
276 ENDIF
277 ENDIF
278 keep8(66) = keep8(68)
279 keep8(65) = keep8(64) + keep8(71)
280 ENDIF
281 keep8(67) = lrlus
282 IF (associated(s_is_pointers%IW)) THEN
283 WRITE(*,*) " Internal error CMUMPS_FAC_B IW"
284 CALL mumps_abort()
285 ENDIF
286 IF (info(1) .GE. 0 ) THEN
287 ALLOCATE(s_is_pointers%IW(liw), stat=allocok)
288 IF (allocok .GT.0) THEN
289 info(1) = -13
290 info(2) = liw
291 IF (lpok) THEN
292 WRITE(lp,*)
293 & 'Allocation error for id%IS(',liw,') on worker',
294 & myid_nodes
295 ENDIF
296 ENDIF
297 ENDIF
298 IF (info(1) .GE. 0) THEN
299 IF (.NOT. associated(s_is_pointers%A)) THEN
300 ALLOCATE(s_is_pointers%A(la), stat=allocok)
301 IF (allocok .GT. 0) THEN
302 info(1) = -13
303 CALL mumps_seti8toi4(la, info(2))
304 DEALLOCATE(s_is_pointers%IW); NULLIFY(s_is_pointers%IW)
305 keep8(23)=0_8
306 ELSE
307 keep8(23)=la
308 ENDIF
309 ENDIF
310 ENDIF
311 IF (info(1) .GE. 0) THEN
312 CALL cmumps_buf_alloc_cb( cmumps_lbuf, ierr )
313 IF ( ierr .NE. 0 ) THEN
314 info(1)= -13
315 info(2)= (cmumps_lbuf+keep(34)-1)/keep(34)
316 IF (lpok) THEN
317 WRITE(lp,*)
318 & 'Allocation error in CMUMPS_BUF_ALLOC_CB'
319 & ,info(2), ' on worker', myid_nodes
320 ENDIF
321 DEALLOCATE(s_is_pointers%IW); NULLIFY(s_is_pointers%IW)
322 DEALLOCATE(s_is_pointers%A); NULLIFY(s_is_pointers%A)
323 END IF
324 ENDIF
325 IF ( keep(400) .EQ. 0
326 & ) THEN
327 ltps_arr = 1
328 ALLOCATE( mumps_tps_arr(1))
329 ALLOCATE(cmumps_tps_arr(1))
330 ELSE
331 ltps_arr = keep(400)
332 ENDIF
333 iw_dummy = .false.
334 a_dummy = .false.
335 IF (info(1) .GE. 0) THEN
336 liw_arg_fac_par = liw
337 la_arg_fac_par = la
338 ELSE
339 liw_arg_fac_par = 1
340 la_arg_fac_par = 1_8
341 IF (.NOT. associated(s_is_pointers%IW)) THEN
342 s_is_pointers%IW => idummy
343 iw_dummy = .true.
344 ENDIF
345 IF (.NOT. associated(s_is_pointers%A)) THEN
346 s_is_pointers%A => cdummy
347 a_dummy = .true.
348 ENDIF
349 ENDIF
350 IF ( info(1) .LT. 0 ) THEN
351 CALL cmumps_bdc_error( myid_nodes, slavef, comm_nodes, keep )
352 ENDIF
353 keep(398)=nstepsdone
354 CALL cmumps_fac_par_i(n,s_is_pointers%IW(1),liw_arg_fac_par,
355 & s_is_pointers%A(1),la_arg_fac_par,iw1(nstk),
356 & nfsiz,fils,step,frere,dad,cand,istep_to_iniv2, tab_pos_in_pere,
357 & nstepsdone, opass, opeli, nelva, comp, maxfrt, nmaxnpiv, ntotpv,
358 & noffnegpv, nb22t1, nb22t2, nbtiny, det_exp, det_mant, det_sign,
359 & ptrist, iw2(ptrast), iw1(pimaster), iw2(pamaster),
360 & ptrar(1,2), ptrar(1,1),
361 & itloc, rhs_mumps, pool, lpool,
362 & l0_omp_mapping, ll0_omp_mapping,
363 & mumps_tps_arr, cmumps_tps_arr, ltps_arr,
364 & rinfo, posfac, iwpos, lrlu, iptrlu, lrlus, leaf, nroot, nbroot,
365 & nbroot_under_l0,
366 & uuloc, icntl, ptlust_s, ptrfac, info, keep, keep8,
367 & procnode_steps,slavef,myid,comm_nodes, myid_nodes, bufr, lbufr,
368 & lbufr_bytes, intarr, dblarr, root, sym_perm, nelt, frtptr,
369 & frtelt, ldptrar, comm_load, ass_irecv, seuil, seuil_ldlt_niv2,
370 & mem_distrib,ne_steps, dkeep(1),pivnul_list(1),lpn_list,
371 & lrgroups(1) )
372 IF (iw_dummy) THEN
373 NULLIFY( s_is_pointers%IW )
374 ENDIF
375 IF (a_dummy) THEN
376 NULLIFY( s_is_pointers%A )
377 ENDIF
378 CALL cmumps_buf_deall_cb( ierr )
379 rinfo(2) = real(opass)
380 rinfo(3) = real(opeli)
381 info(13) = nelva
382 info(14) = comp
383 keep(33) = maxfrt; info(11) = maxfrt
384 keep(246) = nmaxnpiv
385 keep(89) = ntotpv; info(23) = ntotpv
386 info(12) = noffnegpv
387 keep(103) = nb22t1
388 keep(105) = nb22t2
389 keep(98) = nbtiny
390 IF (keep(258) .NE. 0) THEN
391 keep(260) = keep(260) * det_sign
392 keep(259) = keep(259) + det_exp
393 CALL cmumps_updatedeter( det_mant, dkeep(6), keep(259) )
394 ENDIF
395 IF (keep(400) .GT. 0
396 & ) THEN
397 IF (ll0_omp_factors.NE.keep(400)) THEN
398 WRITE(*,*) "Internal error in CMUMPS_FAC_B, KEEP(400), L..=",
399 & keep(400), ll0_omp_factors
400 CALL mumps_abort()
401 ENDIF
402 IF ( info(1) .GE. 0 ) THEN
403 CALL cmumps_l0omp_copy_iw(s_is_pointers%IW,
404 & liw, iwpos, mumps_tps_arr, keep, ptlust_s,
405 & icntl, info)
406 ENDIF
407!$OMP PARALLEL DO
408 DO i=1, keep(400)
409 IF (info(1) .LT. 0) THEN
410 IF ( associated( l0_omp_factors(i)%A ) ) THEN
411 DEALLOCATE( l0_omp_factors(i)%A )
412 NULLIFY ( l0_omp_factors(i)%A )
414 & -l0_omp_factors(i)%LA, .true.,
415 & keep8, info(1), info(2), .true., .false. )
416 ENDIF
417 l0_omp_factors(i)%LA = -99999_8
418 ENDIF
419 IF (associated(mumps_tps_arr(i)%IW)) THEN
420 DEALLOCATE(mumps_tps_arr(i)%IW)
421 NULLIFY(mumps_tps_arr(i)%IW)
423 & -((int(mumps_tps_arr(i)%LIW,8) * int(keep(34),8))
424 & / int(keep(35),8)),
425 & .true.,
426 & keep8, info(1), info(2), .true., .false. )
427 ENDIF
428 ENDDO
429!$OMP END PARALLEL DO
430 ENDIF
431 IF (allocated(mumps_tps_arr)) THEN
432 DEALLOCATE(mumps_tps_arr)
433 ENDIF
434 IF (allocated(cmumps_tps_arr)) THEN
435 DEALLOCATE(cmumps_tps_arr)
436 ENDIF
437 posfac = posfac -1_8
438 iwpos = iwpos -1
439 IF (keep(201).LE.0) THEN
440 IF (keep(201) .EQ. -1 .AND. info(1) .LT. 0) THEN
441 posfac = 0_8
442 ENDIF
443 keep8(31) = posfac
444 rinfo(6) = zero
445 ELSE
446 rinfo(6) = real(keep8(31)*int(keep(35),8))/1e6
447 ENDIF
448 keep8(48) = keep8(31)+keep8(71)+keep8(64)
449 keep(32) = iwpos
450 CALL mumps_seti8toi4(keep8(48), info(9))
451 info(10) = keep(32)
452 keep8(67) = la - keep8(67)
453 CALL mpi_allreduce(ntotpv, ntotpvtot, 1, mpi_integer, mpi_sum,
454 & comm_nodes, ierr)
455 IF ( ( (info(1).EQ.-10 .OR. info(1).EQ.-40)
456 & .AND. (ntotpvtot.EQ.n) )
457 & .OR. ( ntotpvtot.GT.n ) ) THEN
458 write(*,*) ' Error 1 NTOTPVTOT=', ntotpvtot,n
459 CALL mumps_abort()
460 ENDIF
461 IF ( (keep(19).NE.0 ) .AND. (ntotpvtot.NE.n) .AND.
462 & (info(1).GE.0) ) THEN
463 write(*,*) ' Error 2 NTOTPVTOT=', ntotpvtot
464 CALL mumps_abort()
465 ENDIF
466 IF ( (info(1) .GE. 0 )
467 & .AND. (ntotpvtot.NE.n) ) THEN
468 info(1) = -10
469 ENDIF
470 IF (info(1).EQ.-10) THEN
471 info(2) = ntotpvtot
472 ENDIF
473 IF (prok) THEN
474 WRITE (mprint,99980) info(1), info(2),
475 & keep(28), keep8(48), info(10), info(11)
476 IF(keep(50) .EQ. 0) THEN
477 WRITE(mprint,99982) info(12)
478 ENDIF
479 WRITE (mprint, 99986)
480 & info(13), info(14), rinfo(2), rinfo(3)
481 IF (keep(97) .NE. 0) THEN
482 WRITE (mprint, 99987) info(25)
483 ENDIF
484 ENDIF
485 RETURN
48699980 FORMAT (/' LEAVING FACTORIZATION PHASE WITH ...'/
487 & ' INFO (1) =',i15/
488 & ' --- (2) =',i15/
489 & ' Number of nodes in the tree =',i15/
490 & ' INFO (9) Real space for factors =',i15/
491 & ' --- (10) Integer space for factors =',i15/
492 & ' --- (11) Maximum size of frontal matrices =',i15)
49399982 FORMAT (' --- (12) Number of off diagonal pivots =',i15)
49499986 FORMAT (' --- (13) Number of delayed pivots =',i15/
495 & ' --- (14) Number of memory compresses =',i15/
496 & ' RINFO(2) Operations during node assembly =',1pd10.3/
497 & ' -----(3) Operations during node elimination =',1pd10.3)
49899987 FORMAT (' INFO (25) Number of tiny pivots(static) =',i15)
float cmplx[2]
Definition pblas.h:136
#define mumps_abort
Definition VE_Metis.h:25
subroutine cmumps_bdc_error(myid, slavef, comm, keep)
Definition cbcast_int.F:38
subroutine cmumps_fac_par_i(n, iw, liw, a, la, nstk_steps, nd, fils, step, frere, dad, cand, istep_to_iniv2, tab_pos_in_pere, nstepsdone, opass, opeli, nelva, comp, maxfrt, nmaxnpiv, ntotpv, noffnegpv, nb22t1, nb22t2, nbtiny, det_exp, det_mant, det_sign, ptrist, ptrast, pimaster, pamaster, ptrarw, ptraiw, itloc, rhs_mumps, ipool, lpool, l0_omp_mapping, ll0_omp_mapping, mumps_tps_arr, cmumps_tps_arr, ltps_arr, rinfo, posfac, iwpos, lrlu, iptrlu, lrlus, leaf, nbroot, nbrtot, nbroot_under_l0, uu, icntl, ptlust, ptrfac, info, keep, keep8, procnode_steps, slavef, myid, comm_nodes, myid_nodes, bufr, lbufr, lbufr_bytes, intarr, dblarr, root, perm, nelt, frtptr, frtelt, lptrar, comm_load, ass_irecv, seuil, seuil_ldlt_niv2, mem_distrib, ne, dkeep, pivnul_list, lpn_list, lrgroups)
Definition cfac_b.F:516
subroutine cmumps_updatedeter(piv, deter, nexp)
subroutine cmumps_init_pool_last3(ipool, lpool, leaf)
subroutine mpi_allreduce(sendbuf, recvbuf, cnt, datatype, operation, comm, ierr)
Definition mpi.f:103
subroutine, public cmumps_buf_deall_cb(ierr)
subroutine, public cmumps_buf_alloc_cb(size, ierr)
subroutine cmumps_fac_l0_omp(n, liw, nstk_steps, nd, fils, step, frere, dad, istep_to_iniv2, tab_pos_in_pere, ptrist, ptrast, pimaster, pamaster, ptrarw, ptraiw, itloc, rhs_mumps, rinfo, nbroot, nbrtot, nbroot_under_l0, uu, icntl, ptlust_s, ptrfac, info, keep, keep8, procnode_steps, slavef, comm_nodes, myid_nodes, bufr, lbufr, lbufr_bytes, intarr, dblarr, root, perm, nelt, frtptr, frtelt, lptrar, comm_load, ass_irecv, seuil, seuil_ldlt_niv2, mem_distrib, ne, dkeep, pivnul_list, lpn_list, lpool_b_l0_omp, ipool_b_l0_omp, l_virt_l0_omp, virt_l0_omp, virt_l0_omp_mapping, l_phys_l0_omp, phys_l0_omp, perm_l0_omp, ptr_leafs_l0_omp, l0_omp_mapping, ll0_omp_mapping, thread_la, mumps_tps_arr, cmumps_tps_arr, nstepsw, opassw, opeliw, nelvaw, comp, maxfrw, nmaxnpivw, npvw, noffnegw, nb22t1w, nbtinyw, det_expw, det_mantw, det_signw, lrgroups, l0_omp_factors, ll0_omp_factors, i4_l0_omp, nbstats_i4, nbcols_i4, i8_l0_omp, nbstats_i8, nbcols_i8)
Definition cfac_omp_m.F:42
subroutine cmumps_l0omp_copy_iw(iw, liw, iwpos, mumps_tps_arr, keep, ptlust, icntl, info)
Definition cfac_omp_m.F:770
subroutine, public cmumps_load_init_sbtr_struct(pool, lpool, keep, keep8)
integer, save, private myid
Definition cmumps_load.F:57
integer, save, private comm_nodes
Definition cmumps_load.F:58
int comp(int a, int b)
subroutine mumps_init_pool_dist(n, leaf, myid_nodes, k199, na, lna, keep, keep8, step, procnode_steps, ipool, lpool)
subroutine mumps_seti8toi4(i8, i)
integer function mumps_procnode(procinfo_inode, k199)
subroutine mumps_set_ierror(size8, ierror)
subroutine mumps_dm_fac_upd_dyn_memcnts(mem_count_allocated, atomic_updates, keep8, iflag, ierror, k69upd, k71upd)
subroutine mumps_init_nroot_dist(n, nbroot, nroot_loc, myid_nodes, slavef, na, lna, keep, step, procnode_steps)

◆ cmumps_fac_par_i()

subroutine cmumps_fac_par_i ( integer n,
integer, dimension(liw) iw,
integer liw,
complex, dimension(la) a,
integer(8) la,
integer, dimension(keep(28)) nstk_steps,
integer, dimension(keep(28)) nd,
integer, dimension(n) fils,
integer, dimension(n) step,
integer, dimension(keep(28)) frere,
integer, dimension(keep(28)) dad,
integer, dimension(slavef+1,max(1,keep(56))) cand,
integer, dimension(keep(71)) istep_to_iniv2,
integer, dimension(slavef+2,max(1,keep(56))) tab_pos_in_pere,
integer nstepsdone,
double precision, intent(inout) opass,
double precision, intent(inout) opeli,
integer, intent(inout) nelva,
integer, intent(inout) comp,
integer, intent(inout) maxfrt,
integer, intent(inout) nmaxnpiv,
integer, intent(inout) ntotpv,
integer, intent(inout) noffnegpv,
integer, intent(inout) nb22t1,
integer, intent(inout) nb22t2,
integer, intent(inout) nbtiny,
integer, intent(inout) det_exp,
complex, intent(inout) det_mant,
integer, intent(inout) det_sign,
integer, dimension(keep(28)) ptrist,
integer(8), dimension(keep(28)) ptrast,
integer, dimension(keep(28)) pimaster,
integer(8), dimension(keep(28)) pamaster,
integer(8), dimension(lptrar), intent(in) ptrarw,
integer(8), dimension(lptrar), intent(in) ptraiw,
integer, dimension(n+keep(253)) itloc,
complex, dimension(keep(255)) rhs_mumps,
integer, dimension(lpool) ipool,
integer lpool,
integer, dimension( ll0_omp_mapping ), intent(in) l0_omp_mapping,
integer, intent(in) ll0_omp_mapping,
type (mumps_tps_t), dimension(ltps_arr) mumps_tps_arr,
type (cmumps_tps_t), dimension(ltps_arr) cmumps_tps_arr,
integer, intent(in) ltps_arr,
real, dimension(40) rinfo,
integer(8) posfac,
integer iwpos,
integer(8) lrlu,
integer(8) iptrlu,
integer(8) lrlus,
integer leaf,
integer nbroot,
integer nbrtot,
integer, intent(in) nbroot_under_l0,
real uu,
integer, dimension(60) icntl,
integer, dimension(keep(28)) ptlust,
integer(8), dimension(keep(28)) ptrfac,
integer, dimension(80) info,
integer, dimension(500) keep,
integer(8), dimension(150) keep8,
integer, dimension(keep(28)) procnode_steps,
integer slavef,
integer myid,
integer comm_nodes,
integer myid_nodes,
integer, dimension( lbufr ) bufr,
integer lbufr,
integer lbufr_bytes,
integer, dimension( keep8(27) ) intarr,
complex, dimension( keep8(26) ) dblarr,
type (cmumps_root_struc) root,
integer, dimension(n) perm,
integer nelt,
integer, dimension( n+1 ) frtptr,
integer, dimension( nelt ) frtelt,
integer lptrar,
integer comm_load,
integer ass_irecv,
real seuil,
real seuil_ldlt_niv2,
integer, dimension(0: slavef - 1) mem_distrib,
integer, dimension(keep(28)) ne,
real, dimension(230) dkeep,
integer, dimension(lpn_list) pivnul_list,
integer lpn_list,
integer, dimension(n) lrgroups )

Definition at line 500 of file cfac_b.F.

516 USE cmumps_load
517 USE cmumps_ooc
524 USE omp_lib
525 USE mumps_tps_m
526 USE cmumps_tps_m
527 USE cmumps_struc_def, ONLY : cmumps_root_struc
529 IMPLICIT NONE
530 TYPE (CMUMPS_ROOT_STRUC) :: root
531 INTEGER N, LIW, LPTRAR, NSTEPSDONE, INFO(80)
532 DOUBLE PRECISION, INTENT(INOUT) :: OPASS, OPELI
533 INTEGER, INTENT(INOUT) :: NELVA, COMP
534 INTEGER, INTENT(INOUT) :: MAXFRT, NTOTPV, NMAXNPIV, NOFFNEGPV
535 INTEGER, INTENT(INOUT) :: NB22T1, NB22T2, NBTINY
536 INTEGER, INTENT(INOUT) :: DET_SIGN, DET_EXP
537 COMPLEX, INTENT(INOUT) :: DET_MANT
538 INTEGER(8) :: LA
539 COMPLEX :: A(LA)
540 INTEGER SLAVEF, COMM_NODES, MYID, MYID_NODES
541 INTEGER, DIMENSION(0: SLAVEF - 1) :: MEM_DISTRIB
542 INTEGER KEEP(500), ICNTL(60)
543 INTEGER(8) KEEP8(150)
544 INTEGER LPOOL
545 INTEGER PROCNODE_STEPS(KEEP(28))
546 INTEGER ITLOC(N+KEEP(253))
547 COMPLEX :: RHS_MUMPS(KEEP(255))
548 INTEGER IW(LIW), NSTK_STEPS(KEEP(28))
549 INTEGER(8), INTENT(IN) :: PTRARW(LPTRAR), PTRAIW(LPTRAR)
550 INTEGER ND(KEEP(28))
551 INTEGER FILS(N),PTRIST(KEEP(28))
552 INTEGER STEP(N), FRERE(KEEP(28)), DAD(KEEP(28))
553 INTEGER PIMASTER(KEEP(28))
554 INTEGER PTLUST(KEEP(28)), PERM(N)
555 INTEGER CAND(SLAVEF+1,max(1,KEEP(56)))
556 INTEGER ISTEP_TO_INIV2(KEEP(71)),
557 & TAB_POS_IN_PERE(SLAVEF+2,max(1,KEEP(56)))
558 INTEGER IPOOL(LPOOL)
559 INTEGER NE(KEEP(28))
560 REAL RINFO(40)
561 INTEGER(8) :: PAMASTER(KEEP(28)), PTRAST(KEEP(28))
562 INTEGER(8) :: PTRFAC(KEEP(28))
563 INTEGER(8) :: POSFAC, LRLU, LRLUS, IPTRLU
564 INTEGER IWPOS, LEAF, NBROOT, NBRTOT
565 INTEGER, INTENT(in) :: NBROOT_UNDER_L0
566 INTEGER COMM_LOAD, ASS_IRECV
567 REAL UU, SEUIL, SEUIL_LDLT_NIV2
568 INTEGER NELT
569 INTEGER FRTPTR( N+1 ), FRTELT( NELT )
570 INTEGER LBUFR, LBUFR_BYTES
571 INTEGER BUFR( LBUFR )
572 COMPLEX DBLARR( KEEP8(26) )
573 INTEGER INTARR( KEEP8(27) )
574 INTEGER LPN_LIST
575 INTEGER PIVNUL_LIST(LPN_LIST)
576 REAL DKEEP(230)
577 INTEGER LRGROUPS(N)
578 INTEGER, INTENT( IN ) :: LTPS_ARR, LL0_OMP_MAPPING
579 TYPE (MUMPS_TPS_T) :: MUMPS_TPS_ARR(LTPS_ARR)
580 TYPE (CMUMPS_TPS_T) :: CMUMPS_TPS_ARR(LTPS_ARR)
581 INTEGER, INTENT( IN ) :: L0_OMP_MAPPING( LL0_OMP_MAPPING )
582 CALL cmumps_fac_par( n, iw, liw, a, la, nstk_steps,
583 & nd,fils,step, frere, dad, cand, istep_to_iniv2, tab_pos_in_pere,
584 & nstepsdone, opass, opeli, nelva, comp, maxfrt, nmaxnpiv, ntotpv,
585 & noffnegpv, nb22t1, nb22t2, nbtiny, det_exp, det_mant, det_sign,
586 & ptrist, ptrast, pimaster, pamaster, ptrarw, ptraiw,
587 & itloc, rhs_mumps, ipool, lpool,
588 & l0_omp_mapping, ll0_omp_mapping,
589 & mumps_tps_arr, cmumps_tps_arr, ltps_arr,
590 & rinfo, posfac ,iwpos, lrlu, iptrlu, lrlus, leaf, nbroot, nbrtot,
591 & nbroot_under_l0,
592 & uu, icntl, ptlust, ptrfac, info, keep,keep8,
593 & procnode_steps,slavef,myid, comm_nodes, myid_nodes,
594 & bufr,lbufr,lbufr_bytes,intarr,dblarr,root, perm, nelt,
595 & frtptr, frtelt, lptrar, comm_load, ass_irecv,
596 & seuil, seuil_ldlt_niv2, mem_distrib, ne, dkeep,
597 & pivnul_list,lpn_list, lrgroups )
598 RETURN
subroutine cmumps_fac_par(n, iw, liw, a, la, nstk_steps, nd, fils, step, frere, dad, cand, istep_to_iniv2, tab_pos_in_pere, nstepsdone, opass, opeli, nelva, comp, maxfrt, nmaxnpiv, ntotpv, noffnegpv, nb22t1, nb22t2, nbtiny, det_exp, det_mant, det_sign, ptrist, ptrast, pimaster, pamaster, ptrarw, ptraiw, itloc, rhs_mumps, ipool, lpool, l0_omp_mapping, ll0_omp_mapping, mumps_tps_arr, cmumps_tps_arr, ltps_arr, rinfo, posfac, iwpos, lrlu, iptrlu, lrlus, leaf, nbroot, nbrtot, nbroot_under_l0, uu, icntl, ptlust, ptrfac, info, keep, keep8, procnode_steps, slavef, myid, comm_nodes, myid_nodes, bufr, lbufr, lbufr_bytes, intarr, dblarr, root, perm, nelt, frtptr, frtelt, lptrar, comm_load, ass_irecv, seuil, seuil_ldlt_niv2, mem_distrib, ne, dkeep, pivnul_list, lpn_list, lrgroups)
Definition cfac_par_m.F:31