43 . IXC,IXT,IXP,IXR,IXTG,
44 . KXX,IGEO,ISOLNOD,IDARCH,
45 . NUMELS,NUMELQ,NUMELC,NUMELT,NUMELP,
46 . NUMELR,NUMELTG,NUMELX,IPM ,
47 . BUFMAT,NUMMAT,NUMGEO,TAILLE,POIN_UMP,
48 . TAB_UMP,POIN_UMP_OLD,TAB_UMP_OLD,CPUTIME_MP_OLD,
49 . TABMP_L,IPART,IPARTC,IPARTG,
50 . IPARTS,NPART,POIN_PART_SHELL,POIN_PART_TRI,POIN_PART_SOL,
51 . MID_PID_SHELL,MID_PID_TRI,MID_PID_SOL,IDDLEVEL,
59 use element_mod ,
only : nixs,nixq,nixc,nixp,nixt,nixr,nixtg
63#include "implicit_f.inc"
70#include "tablen_c.inc"
72#include "ddspmd_c.inc"
78 . NUMELS,NUMELQ,NUMELC,NUMELT,NUMELP,
79 . NUMELR,NUMELTG,NUMELX,
80 . NUMMAT,NUMGEO,TAILLE,
81 . IXS(NIXS,*),IXQ(NIXQ,*),IXC(NIXC,*),
82 . IXT(NIXT,*), IXP(NIXP,*), IXR(NIXR,*), IXTG(NIXTG,*),
83 . KXX(NIXX,*),IGEO(NPROPGI,*),ISOLNOD(*),
84 . IPM(NPROPMI,*),TABMP_L,NPART,IDDLEVEL
85 INTEGER,
DIMENSION(NUMMAT_OLD) :: POIN_UMP_OLD
86 INTEGER,
DIMENSION(7,TAILLE_OLD) :: TAB_UMP_OLD
87 INTEGER,
DIMENSION(NUMMAT) :: POIN_UMP
88 INTEGER,
DIMENSION(7,TAILLE) :: TAB_UMP
89 INTEGER,
DIMENSION(LIPART1,*),
INTENT(IN) :: IPART
90 INTEGER,
DIMENSION(*),
INTENT(IN) :: IPARTC,IPARTG,IPARTS
92 INTEGER,
DIMENSION(2,NPART),
INTENT(INOUT) :: POIN_PART_SHELL,POIN_PART_TRI
93 INTEGER,
DIMENSION(2,NPART,7),
INTENT(INOUT) :: POIN_PART_SOL
94 TYPE(MID_PID_TYPE),
DIMENSION(NUMMAT),
INTENT(INOUT) :: MID_PID_SHELL,MID_PID_TRI
95 TYPE(
mid_pid_type),
DIMENSION(NUMMAT,7),
INTENT(INOUT) :: MID_PID_SOL
99 . pm(npropm,*), geo(npropg,*),bufmat(*)
100 my_real,
DIMENSION(TAILLE_OLD) :: cputime_mp_old
102 TYPE(matparam_struct_) ,
DIMENSION(NUMMAT),
INTENT(IN) :: MAT_PARAM
104 INTEGER OFF, NPN, MID, PID, JHBE, IGT, MLN,
105 . istrain, ithk, ihbe, ipla, issn, mtn, i, j, k,l,
106 . nfunc,mpt,npts,nptt,nptr,nptot,iflag,jsrot,
107 . nfunc1,nfunc2,irup,ii,irup2,irup_tab(6),
108 . i_mid,i_pid,i_mid_old,i_pid_old,puid,muid,
109 . elm_typ,elm_typ_old,ilaw,ilaw_old,test_mat,
110 . i_pro,isol,mid_old,pid_old,muid_old,puid_old,
111 . test,recherche,numel_re,iad,indi,
112 . max_elm_old,max_elm,max_elm_old_36_2,max_elm_36_2,
113 . k_36_2,i_pro_36_2,nbr_elm
115 INTEGER,
DIMENSION(TAILLE) :: CONCORDANCE_MAT
117 . WTYPE(9),FWIHBE,FAC8,
118 . TABMAT(3),TABX(3),,NPT,TELT,POIDS,W,
119 . BATOZMULT,TMAT,TABRUP(3),TRUP_LOCAL,TRUP
120 my_real INVTELT_PRO,TELT_PRO
122 INTEGER,
DIMENSION(NUMMAT) :: PID_SHELL,PID_TRI
123 INTEGER,
DIMENSION(NUMMAT,7) :: PID_SOL
124 INTEGER :: IPID,ID,IGTYP,MODE
127 . cc, invtref,a,b,a1,a2
128 my_real,
DIMENSION(TAILLE_OLD) :: cputime_mp_old_2
132 DATA wtype /1.6 ,1. ,1. ,.9 ,1.1 ,1.4 ,0.65 ,.9 ,2.0/
138 size_irup =
max(size_irup, mat_param(i)%NFAIL)
142 poin_part_shell(1:2,1:npart) = 0
143 poin_part_tri(1:2,1:npart) = 0
144 poin_part_sol(1:2,1:npart,1:7) = 0
145 pid_shell(1:nummat) = 0
146 pid_tri(1:nummat) = 0
147 pid_sol(1:nummat,1:7) = 0
152 1 tab_ump ,pid_shell ,pid_tri ,pid_sol,
153 2 mid_pid_shell ,mid_pid_tri ,mid_pid_sol
154 3 ipart ,ipm ,geo ,cputime_mp_old_2,
155 4 poin_part_shell,poin_part_tri,poin_part_sol)
157 concordance_mat(1:taille) = 0
159 IF(domdec_tuning/=0)
WRITE(iout,
'(A)')
160 .
' DOMAIN DECOMPOSITION : MANUAL TUNING'
161 IF(dd_optimization==1)
THEN
164 .
' DOMAIN DECOMPOSITION : OPTIMIZED FOR SKYLAKE PROCESSOR'
165 ELSEIF(dd_optimization==2)
THEN
168 .
' DOMAIN DECOMPOSITION : OPTIMIZED FOR SANDY BRIDGE PROCESSOR'
169 ELSEIF(dd_optimization==3)
THEN
172 .
' DOMAIN DECOMPOSITION : OPTIMIZED FOR ARM64 PROCESSOR'
173 ELSEIF(dd_optimization==0.OR.dd_optimization==4)
THEN
177 .
' DOMAIN DECOMPOSITION : OPTIMIZED FOR BROADWELL PROCESSOR'
182 IF( (test_poids==1).AND.
183 . (nummat_old/=0).AND.
184 . (numgeo_old/=0).AND.
185 . (taille_old/=0) )
THEN
191 max_elm_old_36_2 = -1
193 ilaw_old = tab_ump_old(6,i)
194 muid_old = tab_ump_old(1,i)
195 mid_old = tab_ump_old(3,i)
196 puid_old = tab_ump_old(2,i)
197 elm_typ_old = tab_ump_old(7,i)
198 pid_old = tab_ump_old(4,i)
200 IF(cputime_mp_old(i)>zero)
THEN
206 elm_typ = tab_ump(7,j)
209 IF((ilaw==ilaw_old).AND.(muid_old==muid).AND.
210 . (puid_old==puid).AND.(elm_typ==elm_typ_old) )
THEN
211 concordance_mat(j) = i
214 IF((ilaw/=0).OR.(ilaw/=29).OR.(ilaw/=30).OR.
215 . (ilaw/=31).OR.(ilaw<99))
THEN
216 max_elm_old = max_elm
217 max_elm =
max(max_elm,tab_ump_old(5,i))
219 IF((ilaw==2).OR.(ilaw==36))
THEN
220 max_elm_old_36_2 = max_elm_36_2
221 max_elm_36_2 =
max(max_elm_36_2,tab_ump_old(5,i))
222 IF( (max_elm_old_36_2<max_elm_36_2) ) i_pro_36_2 = j
224 IF( (max_elm_old<max_elm) ) i_pro = j
239 IF(i_pro_36_2>0)
THEN
240 k_36_2 = concordance_mat(i_pro_36_2)
241 nbr_elm = tab_ump_old(5,k_36_2)
242 IF(nbr_elm>1024) i_pro = i_pro_36_2
244 IF(i_pro>0) k = concordance_mat(i_pro)
246 elm_typ_old = tab_ump_old(7,k)
247 mln = tab_ump_old(6,k)
248 mid = tab_ump_old(3,k)
249 pid = tab_ump_old(4,k)
252 IF(elm_typ_old==3)
THEN
255 . numel_re,ipm,nummat,numgeo,poin_part_shell,
256 . mid_pid_shell,ipartc,off,bufmat,
257 . mid,pid,mln,recherche,telt_pro,
261 ELSEIF(elm_typ_old==7)
THEN
263 CALL initwg_tri(wd,pm,geo,ixtg,igeo,numel_re,ipm ,size_irup,
264 . nummat,numgeo,poin_part_tri,mid_pid_tri,ipartg,
265 . off,bufmat,mid,pid,mln,recherche,telt_pro,
270 ELSEIF((elm_typ_old==1004).OR.(elm_typ_old==1010).OR.
271 . (elm_typ_old==1) .OR.(elm_typ_old==1006).OR.
272 . (elm_typ_old==1008).OR.(elm_typ_old==1016).OR.
273 . (elm_typ_old==1020))
THEN
275 IF(elm_typ_old>1000)
THEN
276 isol = elm_typ_old - 1000
281 . numel_re,ipm ,size_irup,
283 . poin_part_sol,mid_pid_sol,iparts,bufmat,
284 . mid,pid,mln,recherche,isol,
285 . telt_pro,tabmp_l,npart,mat_param)
291 invtelt_pro = telt_pro/cputime_mp_old(k)
293 IF(cputime_mp_old(i)>zero)
THEN
294 cputime_mp_old_2(i) = cputime_mp_old(i) * invtelt_pro
296 cputime_mp_old_2(i) = zero
301 1 tab_ump ,pid_shell ,pid_tri ,pid_sol,
302 2 mid_pid_shell ,mid_pid_tri ,mid_pid_sol,
303 3 ipart ,ipm ,geo ,cputime_mp_old_2,
304 4 poin_part_shell,poin_part_tri,poin_part_sol)
319 . numels,ipm ,size_irup,
321 . poin_part_sol,mid_pid_sol,iparts,bufmat,
322 . mid,pid,mln,recherche,isol,
323 . telt_pro,tabmp_l,npart,mat_param)
333 . numelc,ipm,nummat,numgeo,poin_part_shell,
334 . mid_pid_shell,ipartc,off,bufmat,
335 . mid,pid,mln,recherche,telt_pro,
341 . numelt,ipm,nummat,numgeo,off)
346 . numelp,ipm,nummat,numgeo,off)
351 . numelr,ipm,nummat,numgeo,off)
355 CALL initwg_tri(wd,pm,geo,ixtg,igeo,numeltg,ipm , size_irup
356 . nummat,numgeo,poin_part_tri,mid_pid_tri,ipartg,
357 . off,bufmat,mid,pid,mln,recherche,telt_pro,
363 . numelx,ipm,nummat,numgeo,off)