34 SUBROUTINE initwg_tri(WD,PM,GEO,IXTG,IGEO,NUMELTG,IPM ,SIZE_IRUP,
35 . NUMMAT,NUMGEO,POIN_PART_TRI,MID_PID_TRI,IPARTG,
36 . OFF,BUFMAT,MID_OLD,PID_OLD,MLN_OLD,RECHERCHE,TELT_PRO,
47#include "implicit_f.inc"
53#include "tablen_c.inc"
54#include "ddspmd_c.inc"
58 INTEGER OFF,NUMELTG,TABMP_L,
59 . NUMMAT,NUMGEO, IXTG(NIXTG,*),IGEO(NPROPGI,*),
61 INTEGER,
INTENT(IN) :: SIZE_IRUP
65 . pm(npropm,*), geo(npropg,*),bufmat(*)
68 INTEGER MID_OLD,PID_OLD,MLN_OLD,RECHERCHE
71 INTEGER,
DIMENSION(*),
INTENT(IN) :: IPARTG
72 INTEGER,
DIMENSION(2,*),
INTENT(IN) :: POIN_PART_TRI
73 TYPE(MID_PID_TYPE),
DIMENSION(*),
INTENT(INOUT) :: MID_PID_TRI
74 TYPE(matparam_struct_) ,
DIMENSION(NUMMAT),
INTENT(IN) :: MAT_PARAM
76 INTEGER NPN, MID, PID, JHBE, IGT, MLN,
77 . istrain, ithk, ihbe, ipla, issn, mtn, i, j, k,l,
78 . nfunc,mpt,npts,nptt,nptr,nptot,iflag,jsrot,
79 . i_mid,i_pid,i_mid_old,i_pid_old,puid,muid,
80 . elm_typ,elm_typ_old,ilaw,ilaw_old,test_mat,
81 . i_pro,isol2,muid_old,puid_old,
82 . test,nfunc1,nfunc2,nfail,irup2,ii,irup_tab(size_irup),
84 INTEGER :: INDI3,COST_CHECK,POIN_PART,POIN_MID,POIN_PID
85 INTEGER :: FLAG_NICE_NEWTON,FLAG_GURSON,FLAG_NON_LOCAL
86 INTEGER :: ,SPE_I_1,SPE_I_2,SPE_I_3
89 . wtype(9),fwihbe,fac8,
90 . tabmat(3),tabx(3),timmat,npt,telt,poids,w,
91 . batozmult,tmat,trup,tabrup(3),trup_local,tmatadd,
98 DATA wtype /1.6 ,1. ,1. ,.9 ,1.1 ,1.4 ,0.65 ,.9 ,2.0/
107 IF(dd_optimization==1)
THEN
109#include "weights_p4linux964_spmd_avx512.inc"
110 ELSEIF(dd_optimization==2)
THEN
112#include "weights_p4linux964_spmd_sse3.inc"
113 ELSEIF(dd_optimization==3)
THEN
115#include "weights_p4linuxa964_spmd.inc"
120#include "weights_p4linuxa964_spmd.inc"
123#include "weights_p4linux964_spmd.inc"
131 mln = nint(pm(19,abs(mid
134 IF(recherche==1)
THEN
141 npn = nint(geo(6,pid))
142 ihbe = nint(geo(171,pid))
143 ithk = nint(geo(35,pid))
144 ipla = nint(geo(39,pid))
145 npt =
max(abs(npn),1)
150 nfail = mat_param(mid)%NFAIL
154 irup_tab(j) = mat_param(mid)%FAIL(j
162 IF((mln<28).OR.(mln==32))
THEN
168 IF (mln==2.OR.mln==3)
THEN
175 IF (mat_param(abs(mid))%IVISC > 0)
THEN
176 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
178 ELSEIF ((mln==25).AND.(abs(npn)>0))
THEN
179 iflag = nint( pm(40,mid))
185 IF (mat_param(abs(mid))%IVISC > 0)
THEN
186 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
189 ELSEIF (mln==36.OR.(mln==86).AND.(abs(npn)>0))
THEN
190 nfunc = nint(pm(40,mid))
193 ELSEIF (nfunc>2.AND.nfunc<=7)
THEN
195 ELSEIF (nfunc>7)
THEN
198 IF (mat_param(abs(mid))%IVISC > 0)
THEN
199 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
201 ELSEIF((mln==42).OR.(mln==62).OR.(mln==69))
THEN
203 IF (mln==42) nfunc = mat_param(abs(mid))%IPARAM(2)
205 iad=ipm(7,abs(mid))-1
206 nfunc = nint(bufmat(iad+3))
211 IF (mat_param(abs(mid))%IVISC > 0)
THEN
212 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
214 ELSEIF(nfunc==1)
THEN
216 ELSEIF(nfunc==2)
THEN
223 ELSEIF((mln==82))
THEN
224 iad=ipm(7,abs(mid))-1
225 nfunc=nint(bufmat(iad+1))
228 IF (mat_param(abs(mid))%IVISC > 0)
THEN
229 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
231 ELSEIF(nfunc==2)
THEN
233 ELSEIF(nfunc==3)
THEN
240 ELSEIF(mln==104)
THEN
241 iad=ipm(7,abs(mid))-1
242 flag_nice_newton=nint(bufmat(iad+11))
243 IF(flag_nice_newton==2)
THEN
248 flag_gurson=nint(bufmat(iad+30))
249 IF(flag_gurson/=0)
THEN
254 IF(flag_gurson==1)
THEN
256 ELSEIF(flag_gurson==2)
THEN
258 ELSEIF(flag_gurson==3)
THEN
261 flag_non_local = mat_param(abs(mid))%NLOC
264 IF (mat_param(abs(mid))%IVISC > 0)
THEN
265 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
271 IF(flag_non_local/=0)
THEN
282 IF(recherche==0.AND.test_poids/=0)
THEN
283 poin_part = ipartg(i)
284 poin_mid = poin_part_tri(1,poin_part)
285 poin_pid = poin_part_tri(2,poin_part)
288 IF(poin_mid/=0.AND.poin_pid/=0)
THEN
289 IF(mid_pid_tri(poin_mid)%COST1D(poin_pid)/=zero)
THEN
291 telt = mid_pid_tri(poin_mid)%COST1D(poin_pid)
296 IF(cost_check==0)
THEN
297 IF( ddweights(1,2,mid)/=zero)
THEN
299 a1 = ddweights(1,2,mid) * tpsref
300 a2 = ddweights(2,2,mid) * tpsref
314 a1 = rupture_shell(irup_tab(j),irup2+1)
315 a2 = rupture_shell(irup_tab(j),irup2+3)
319 trup = trup + a*npt + b
332 istrain = nint(geo(11,pid))
333 IF(mln==19.OR.mln>=25)istrain = 1
334 issn = nint(geo(3,pid))
336 IF (wd_local==0.)
THEN
343 IF(mult/=0) tmatadd = mult *
344 . (tritnl(
min(mln,maxlaw),j,indi) - tritnl(
min(mln,maxlaw),j,indi2) )
345 IF(special_option/=0) tmatadd = tmatadd + shtnl_option(spe_i_1,spe_i_2)
346 tabmat(j) = tritnl(
min(mln,maxlaw),j,indi) + tmatadd
356 tabrup(ii) = rupture_shell(irup_tab(j),irup2+ii)
359 trup = trup + trup_local
361 ENDIF ! <--- fin nfail/=0
367 IF(mult/=0) tmatadd = mult *
368 . (tritnl(
min(mln,maxlaw),0,indi) - tritnl(
min(mln,maxlaw),0,indi2) )
369 timmat = tritnl(
min(mln,maxlaw),0,indi) + tmatadd
387 IF(recherche==0)
THEN
388 IF((wd_local==0.).AND.(mln/=0))
THEN
389 poids = (telt + timmat + trup + mult_spe*nlocal_option(spe_i_3) +
visc_prony) * invtref
392 poin_part = ipartg(i)
393 poin_mid = poin_part_tri(1,poin_part)
394 poin_pid = poin_part_tri(2,poin_part)
395 IF(poin_mid/=0.AND.poin_pid/=0)
396 . mid_pid_tri(poin_mid)%COST1D(poin_pid) = telt + timmat + trup +
397 . mult_spe*nlocal_option(spe_i_3)
402 telt_pro = telt + timmat + trup + mult_spe*nlocal_option(spe_i_3)