OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
dmumps_parallel_analysis::dmumps_ana_f_par Interface Reference

Public Member Functions

subroutine dmumps_ana_f_par (id, work1, work2, nfsiz, fils, frere)

Detailed Description

Definition at line 20 of file dana_aux_par.F.

Constructor & Destructor Documentation

◆ dmumps_ana_f_par()

subroutine dmumps_parallel_analysis::dmumps_ana_f_par::dmumps_ana_f_par ( type(dmumps_struc) id,
integer, dimension(:), target work1,
integer, dimension(:), target work2,
integer, dimension(:) nfsiz,
integer, dimension(:) fils,
integer, dimension(:) frere )

Definition at line 53 of file dana_aux_par.F.

56 IMPLICIT NONE
57 TYPE(DMUMPS_STRUC) :: id
58 INTEGER, TARGET :: WORK1(:), WORK2(:)
59 INTEGER :: NFSIZ(:), FILS(:), FRERE(:)
60 TYPE(ORD_TYPE) :: ord
61 INTEGER, POINTER :: IPE(:), NV(:),
62 & NE(:), NA(:), NODE(:),
63 & ND(:), SUBORD(:), NAMALG(:),
64 & IPS(:), CUMUL(:),
65 & SAVEIRN(:), SAVEJCN(:)
66 INTEGER :: MYID, NPROCS, IERR, NEMIN, LDIAG
67 LOGICAL :: SPLITROOT
68 INTEGER(8), PARAMETER :: K79REF=12000000_8
69 INTEGER, PARAMETER :: LIDUMMY = 1
70 INTEGER :: IDUMMY(1)
71 DOUBLE PRECISION :: TIMEB
72 nullify(ipe, nv, ne, na, node, nd, subord, namalg, ips,
73 & cumul, saveirn, savejcn)
74 CALL mpi_comm_rank (id%COMM, myid, ierr)
75 CALL mpi_comm_size (id%COMM, nprocs, ierr)
76 lp = id%ICNTL(1)
77 mp = id%ICNTL(2)
78 mpg = id%ICNTL(3)
79 prok = (mp.GT.0)
80 prokg = (mpg.GT.0) .AND. (myid .EQ. 0)
81 lpok = (lp.GT.0) .AND. (id%ICNTL(4).GE.1)
82 ldiag = id%ICNTL(4)
83 ord%PERMTAB => work1(1 : id%N)
84 ord%PERITAB => work1(id%N+1 : 2*id%N)
85 ord%TREETAB => work1(2*id%N+1 : 3*id%N)
86 IF(id%KEEP(54) .NE. 3) THEN
87 IF(myid.EQ.0) THEN
88 saveirn => id%IRN_loc
89 savejcn => id%JCN_loc
90 id%IRN_loc => id%IRN
91 id%JCN_loc => id%JCN
92 id%KEEP8(29) = id%KEEP8(28)
93 ELSE
94 id%KEEP8(29)=0_8
95 END IF
96 END IF
97 maxmem=0
98 IF(memcnt .GT. maxmem) maxmem=memcnt
99 CALL dmumps_set_par_ord(id, ord)
100 id%INFOG(7) = id%KEEP(245)
101 CALL mumps_propinfo( id%ICNTL(1), id%INFO(1),
102 & id%COMM, id%MYID )
103 IF ( id%INFO(1) .LT. 0 ) RETURN
104 IF (prokg) CALL mumps_secdeb( timeb )
105 CALL dmumps_do_par_ord(id, ord, work2)
106 IF (prokg) THEN
107 CALL mumps_secfin( timeb )
108 WRITE(mpg,
109 & '(" ELAPSED time in parallel ordering =",F12.4)')
110 & timeb
111 ENDIF
112 CALL mumps_propinfo( id%ICNTL(1), id%INFO(1),
113 & id%COMM, id%MYID )
114 IF ( id%INFO(1) .LT. 0 ) RETURN
115 IF(id%MYID .EQ. 0) THEN
116 CALL mumps_realloc(ipe, id%N, id%INFO, lp, force=.false.,
117 & copy=.false., string='',
118 & memcnt=memcnt, errcode=-7)
119 CALL mumps_realloc(nv, id%N, id%INFO, lp,
120 & memcnt=memcnt, errcode=-7)
121 IF(memcnt .GT. maxmem) maxmem=memcnt
122 END IF
123 ord%SUBSTRAT = 0
124 ord%TOPSTRAT = 0
125 CALL dmumps_parsymfact(id, ord, ipe, nv, work2)
126 IF(id%KEEP(54) .NE. 3) THEN
127 IF(myid.EQ.0) THEN
128 id%IRN_loc => saveirn
129 id%JCN_loc => savejcn
130 END IF
131 END IF
132 CALL mumps_propinfo( id%ICNTL(1), id%INFO(1),
133 & id%COMM, id%MYID )
134 IF ( id%INFO(1) .LT. 0 ) RETURN
135 NULLIFY(ord%PERMTAB)
136 NULLIFY(ord%PERITAB)
137 NULLIFY(ord%TREETAB)
138 CALL mumps_idealloc(ord%FIRST, ord%LAST, memcnt=memcnt)
139 IF (myid .EQ. 0) THEN
140 ips => work1(1:id%N)
141 ne => work1(id%N+1 : 2*id%N)
142 na => work1(2*id%N+1 : 3*id%N)
143 node => work2(1 : id%N )
144 nd => work2(id%N+1 : 2*id%N)
145 subord => work2(2*id%N+1 : 3*id%N)
146 namalg => work2(3*id%N+1 : 4*id%N)
147 CALL mumps_realloc(cumul, id%N, id%INFO, lp,
148 & string='CUMUL', memcnt=memcnt, errcode=-7)
149 IF(memcnt .GT. maxmem) maxmem=memcnt
150 nemin = id%KEEP(1)
151 CALL dmumps_ana_lnew(id%N, ipe(1), nv(1), ips(1), ne(1),
152 & na(1), nfsiz(1), node(1), id%INFOG(6), fils(1), frere(1),
153 & nd(1), nemin, subord(1), id%KEEP(60), id%KEEP(20),
154 & id%KEEP(38), namalg(1), id%KEEP(104), cumul(1),
155 & id%KEEP(50), id%ICNTL(13), id%KEEP(37), id%KEEP(197),
156 & id%NSLAVES, id%KEEP(250).EQ.1, .false., idummy, lidummy)
157 CALL mumps_dealloc(cumul, nv, ipe, memcnt=memcnt)
158 CALL dmumps_ana_m(ne(1), nd(1), id%INFOG(6), id%INFOG(5),
159 & id%KEEP(2), id%KEEP(50), id%KEEP8(101), id%KEEP(108),
160 & id%KEEP(5), id%KEEP(6), id%KEEP(226), id%KEEP(253))
161 IF ( id%KEEP(53) .NE. 0 ) THEN
162 CALL mumps_make1root(id%N, frere(1), fils(1), nfsiz(1),
163 & id%KEEP(20))
164 END IF
165 IF ( (id%KEEP(48) == 4 .AND. id%KEEP8(21).GT.0_8)
166 & .OR.
167 & (id%KEEP (48)==5 .AND. id%KEEP8(21) .GT. 0_8 )
168 & .OR.
169 & (id%KEEP(24).NE.0.AND.id%KEEP8(21).GT.0_8) ) THEN
170 CALL dmumps_set_k821_surface(id%KEEP8(21), id%KEEP(2),
171 & id%KEEP(48), id%KEEP(50), id%NSLAVES)
172 END IF
173 IF ((id%KEEP(210).LT.0) .OR. (id%KEEP(210).GT.2))
174 & id%KEEP(210)=0
175 IF ((id%KEEP(210).EQ.0) .AND. (id%KEEP(201).GT.0))
176 & id%KEEP(210)=1
177 IF ((id%KEEP(210).EQ.0) .AND. (id%KEEP(201).EQ.0))
178 & id%KEEP(210)=2
179 IF (id%KEEP(210).EQ.2) id%KEEP8(79)=huge(id%KEEP8(79))
180 IF ((id%KEEP(210).EQ.1) .AND. (id%KEEP8(79).LE.0_8)) THEN
181 id%KEEP8(79)=k79ref * int(id%NSLAVES,8)
182 ENDIF
183 IF ( (id%KEEP(79).EQ.0).OR.(id%KEEP(79).EQ.2).OR.
184 & (id%KEEP(79).EQ.3).OR.(id%KEEP(79).EQ.5).OR.
185 & (id%KEEP(79).EQ.6)
186 & ) THEN
187 IF (id%KEEP(210).EQ.1) THEN
188 splitroot = .false.
189 IF ( id%KEEP(62).GE.1) THEN
190 idummy(1) = -1
191 CALL dmumps_cutnodes(id%N, frere(1), fils(1),
192 & nfsiz(1), idummy, lidummy, id%INFOG(6),
193 & id%NSLAVES, id%KEEP(1), id%KEEP8(1), splitroot,
194 & mp, ldiag, id%INFOG(1), id%INFOG(2))
195 IF (id%INFOG(1).LT.0) RETURN
196 ENDIF
197 ENDIF
198 ENDIF
199 splitroot = (((id%ICNTL(13).GT.0) .AND.
200 & (id%NSLAVES.GT.id%ICNTL(13))) .OR.
201 & (id%ICNTL(13).EQ.-1)) .AND. (id%KEEP(60).EQ.0)
202 IF (splitroot) THEN
203 idummy(1) = -1
204 CALL dmumps_cutnodes(id%N, frere(1), fils(1), nfsiz(1),
205 & idummy, lidummy, id%INFOG(6),
206 & id%NSLAVES, id%KEEP(1), id%KEEP8(1),
207 & splitroot, mp, ldiag, id%INFOG(1), id%INFOG(2))
208 IF (id%INFOG(1).LT.0) RETURN
209 ENDIF
210 END IF
211 RETURN
subroutine mumps_propinfo(icntl, info, comm, id)
subroutine dmumps_ana_m(ne, nd, nsteps, maxfr, maxelim, k50, sizefac_tot, maxnpiv, k5, k6, panel_size, k253)
Definition dana_aux.F:2780
subroutine dmumps_cutnodes(n, frere, fils, nfsiz, sizeofblocks, lsizeofblocks, nsteps, nslaves, keep, keep8, splitroot, mp, ldiag, info1, info2)
Definition dana_aux.F:2919
subroutine dmumps_set_k821_surface(keep821, keep2, keep48, keep50, nslaves)
Definition dana_aux.F:3554
subroutine dmumps_ana_lnew(n, ipe, nv, ips, ne, na, nfsiz, node, nsteps, fils, frere, nd, nemin, subord, keep60, keep20, keep38, namalg, namalgmax, cumul, keep50, icntl13, keep37, keep197, nslaves, allow_amalg_tiny_nodes, blkon, sizeofblocks, lsizeofblocks)
Definition dana_aux.F:2412
subroutine mpi_comm_size(comm, size, ierr)
Definition mpi.f:263
subroutine mpi_comm_rank(comm, rank, ierr)
Definition mpi.f:254
initmumps id
subroutine mumps_secfin(t)
subroutine mumps_secdeb(t)
subroutine mumps_make1root(n, frere, fils, nfsiz, theroot)

The documentation for this interface was generated from the following file: