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

Go to the source code of this file.

Functions/Subroutines

subroutine smumps_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, smumps_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 smumps_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, smumps_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

◆ smumps_fac_b()

subroutine smumps_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,
real, 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) smumps_lbuf,
integer, dimension(keep8(27)) intarr,
real, dimension(keep8(26)) dblarr,
type (smumps_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(smumps_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 sfac_b.F.

30 USE smumps_load
33 USE omp_lib
34 USE mumps_tps_m
35 USE smumps_tps_m
37 USE smumps_struc_def, ONLY : smumps_root_struc
38 & , smumps_l0ompfac_t
39 IMPLICIT NONE
40 include 'mpif.h'
41 TYPE (SMUMPS_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 ) :: SMUMPS_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 REAL :: 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 REAL 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(SMUMPS_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 (SMUMPS_TPS_T), DIMENSION(:), ALLOCATABLE :: SMUMPS_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 REAL :: 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 REAL, 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 = 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 smumps_init_pool_last3(pool, lpool, leaf)
201 ENDIF
202 CALL smumps_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( smumps_tps_arr( keep(400) ), stat=allocok )
234 IF (allocok .GT. 0) THEN
235 WRITE(*,*) "Problem allocating SMUMPS_TPS_ARR", keep(400)
236 CALL mumps_abort()
237 ENDIF
238 CALL smumps_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, smumps_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 SMUMPS_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 smumps_buf_alloc_cb( smumps_lbuf, ierr )
313 IF ( ierr .NE. 0 ) THEN
314 info(1)= -13
315 info(2)= (smumps_lbuf+keep(34)-1)/keep(34)
316 IF (lpok) THEN
317 WRITE(lp,*)
318 & 'Allocation error in SMUMPS_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(smumps_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 smumps_bdc_error( myid_nodes, slavef, comm_nodes, keep )
352 ENDIF
353 keep(398)=nstepsdone
354 CALL smumps_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, smumps_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 smumps_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 smumps_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 SMUMPS_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 smumps_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(smumps_tps_arr)) THEN
435 DEALLOCATE(smumps_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 IF (keep(50) .NE. 0) THEN
480 WRITE(mprint,99984) info(12)
481 ENDIF
482 WRITE (mprint, 99986)
483 & info(13), info(14), rinfo(2), rinfo(3)
484 IF (keep(97) .NE. 0) THEN
485 WRITE (mprint, 99987) info(25)
486 ENDIF
487 ENDIF
488 RETURN
48999980 FORMAT (/' LEAVING FACTORIZATION PHASE WITH ...'/
490 & ' INFO (1) =',i15/
491 & ' --- (2) =',i15/
492 & ' Number of nodes in the tree =',i15/
493 & ' INFO (9) Real space for factors =',i15/
494 & ' --- (10) Integer space for factors =',i15/
495 & ' --- (11) Maximum size of frontal matrices =',i15)
49699982 FORMAT (' --- (12) Number of off diagonal pivots =',i15)
49799984 FORMAT (' --- (12) Number of negative pivots =',i15)
49899986 FORMAT (' --- (13) Number of delayed pivots =',i15/
499 & ' --- (14) Number of memory compresses =',i15/
500 & ' RINFO(2) Operations during node assembly =',1pd10.3/
501 & ' -----(3) Operations during node elimination =',1pd10.3)
50299987 FORMAT (' INFO (25) Number of tiny pivots(static) =',i15)
#define mumps_abort
Definition VE_Metis.h:25
subroutine mpi_allreduce(sendbuf, recvbuf, cnt, datatype, operation, comm, ierr)
Definition mpi.f:103
subroutine, public smumps_buf_deall_cb(ierr)
subroutine, public smumps_buf_alloc_cb(size, ierr)
subroutine smumps_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, smumps_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 sfac_omp_m.F:42
subroutine smumps_l0omp_copy_iw(iw, liw, iwpos, mumps_tps_arr, keep, ptlust, icntl, info)
Definition sfac_omp_m.F:770
subroutine, public smumps_load_init_sbtr_struct(pool, lpool, keep, keep8)
integer, save, private comm_nodes
Definition smumps_load.F:58
integer, save, private myid
Definition smumps_load.F:57
subroutine smumps_bdc_error(myid, slavef, comm, keep)
Definition sbcast_int.F:38
int comp(int a, int b)
subroutine smumps_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, smumps_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 sfac_b.F:520
subroutine smumps_updatedeter(piv, deter, nexp)
subroutine smumps_init_pool_last3(ipool, lpool, leaf)
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)

◆ smumps_fac_par_i()

subroutine smumps_fac_par_i ( integer n,
integer, dimension(liw) iw,
integer liw,
real, 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,
real, 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,
real, 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 (smumps_tps_t), dimension(ltps_arr) smumps_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,
real, dimension( keep8(26) ) dblarr,
type (smumps_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 504 of file sfac_b.F.

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