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,
44 use element_mod ,
only : nixtg
48#include "implicit_f.inc"
54#include "tablen_c.inc"
55#include "ddspmd_c.inc"
59 INTEGER OFF,NUMELTG,TABMP_L,
60 . NUMMAT,NUMGEO, IXTG(NIXTG,*),IGEO(NPROPGI,*),
62 INTEGER,
INTENT(IN) :: SIZE_IRUP
66 . pm(npropm,*), geo(npropg,*),bufmat(*)
69 INTEGER MID_OLD,PID_OLD,MLN_OLD,RECHERCHE
72 INTEGER,
DIMENSION(*),
INTENT(IN) :: IPARTG
73 INTEGER,
DIMENSION(2,*),
INTENT(IN) :: POIN_PART_TRI
74 TYPE(MID_PID_TYPE),
DIMENSION(*),
INTENT(INOUT) :: MID_PID_TRI
75 TYPE(matparam_struct_) ,
DIMENSION(NUMMAT),
INTENT(IN) :: MAT_PARAM
77 INTEGER NPN, MID, PID, MLN,
78 . istrain, ithk, ihbe, ipla, issn, i, j,
83 . nfail,irup2,ii,irup_tab(size_irup),
85 INTEGER :: INDI3,COST_CHECK,POIN_PART,POIN_MID,POIN_PID
86 INTEGER :: FLAG_NICE_NEWTON,FLAG_GURSON,FLAG_NON_LOCAL
87 INTEGER :: SPECIAL_OPTION,SPE_I_1,SPE_I_2,SPE_I_3
91 . tabmat(3),tabx(3),timmat,npt,telt,poids,
92 . batozmult,trup,tabrup(3),trup_local,tmatadd,
99 DATA wtype /1.6 ,1. ,1. ,.9 ,1.1 ,1.4 ,0.65 ,.9 ,2.0/
108 IF(dd_optimization==1)
THEN
110#include "weights_p4linux964_spmd_avx512.inc"
111 ELSEIF(dd_optimization==2)
THEN
113#include "weights_p4linux964_spmd_sse3.inc"
114 ELSEIF(dd_optimization==3)
THEN
116#include "weights_p4linuxa964_spmd.inc"
121#include "weights_p4linuxa964_spmd.inc"
124#include "weights_p4linux964_spmd.inc"
132 mln = nint(pm(19,abs(mid)))
135 IF(recherche==1)
THEN
142 npn = nint(geo(6,pid))
143 ihbe = nint(geo(171,pid))
144 ithk = nint(geo(35,pid))
145 ipla = nint(geo(39,pid))
146 npt =
max(abs(npn),1)
151 nfail = mat_param(mid)%NFAIL
155 irup_tab(j) = mat_param(mid)%FAIL(j)%IRUPT
163 IF((mln<28).OR.(mln==32))
THEN
169 IF (mln==2.OR.mln==3)
THEN
176 IF (mat_param(abs(mid))%IVISC > 0)
THEN
177 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
179 ELSEIF ((mln==25).AND.(abs(npn)>0))
THEN
180 iflag = nint( pm(40,mid))
186 IF (mat_param(abs(mid))%IVISC > 0)
THEN
187 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
190 ELSEIF (mln==36.OR.(mln==86).AND.(abs(npn)>0))
THEN
191 nfunc = nint(pm(40,mid))
194 ELSEIF (nfunc>2.AND.nfunc<=7)
THEN
196 ELSEIF (nfunc>7)
THEN
199 IF (mat_param(abs(mid))%IVISC > 0)
THEN
200 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
202 ELSEIF((mln==42).OR.(mln==62).OR.(mln==69))
THEN
204 IF (mln==42) nfunc = mat_param(abs(mid))%IPARAM(2)
206 iad=ipm(7,abs(mid))-1
207 nfunc = nint(bufmat(iad+3))
212 IF (mat_param(abs(mid))%IVISC > 0)
THEN
213 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
215 ELSEIF(nfunc==1)
THEN
217 ELSEIF(nfunc==2)
THEN
224 ELSEIF((mln==82))
THEN
225 iad=ipm(7,abs(mid))-1
226 nfunc=nint(bufmat(iad+1))
229 IF (mat_param(abs(mid))%IVISC > 0)
THEN
230 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
232 ELSEIF(nfunc==2)
THEN
234 ELSEIF(nfunc==3)
THEN
241 ELSEIF(mln==104)
THEN
242 iad=ipm(7,abs(mid))-1
243 flag_nice_newton=nint(bufmat(iad+11))
244 IF(flag_nice_newton==2)
THEN
249 flag_gurson=nint(bufmat(iad+30))
250 IF(flag_gurson/=0)
THEN
255 IF(flag_gurson==1)
THEN
257 ELSEIF(flag_gurson==2)
THEN
259 ELSEIF(flag_gurson==3)
THEN
262 flag_non_local = mat_param(abs(mid))%NLOC
265 IF (mat_param(abs(mid))%IVISC > 0)
THEN
266 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM
272 IF(flag_non_local/=0)
THEN
283 IF(recherche==0.AND.test_poids/=0)
THEN
284 poin_part = ipartg(i)
285 poin_mid = poin_part_tri(1,poin_part)
286 poin_pid = poin_part_tri(2,poin_part)
289 IF(poin_mid/=0.AND.poin_pid/=0)
THEN
290 IF(mid_pid_tri(poin_mid)%COST1D(poin_pid)/=zero)
THEN
292 telt = mid_pid_tri(poin_mid)%COST1D(poin_pid)
297 IF(cost_check==0)
THEN
298 IF( ddweights(1,2,mid)/=zero)
THEN
300 a1 = ddweights(1,2,mid) * tpsref
301 a2 = ddweights(2,2,mid) * tpsref
315 a1 = rupture_shell(irup_tab(j),irup2+1)
316 a2 = rupture_shell(irup_tab(j),irup2+3)
320 trup = trup + a*npt + b
333 istrain = nint(geo(11,pid))
334 IF(mln==19.OR.mln>=25)istrain = 1
335 issn = nint(geo(3,pid))
337 IF (wd_local==0.)
THEN
344 IF(mult/=0) tmatadd = mult *
345 . (tritnl(
min(mln,maxlaw),j,indi) - tritnl(
min(mln,maxlaw),j,indi2) )
346 IF(special_option/=0) tmatadd = tmatadd + shtnl_option(spe_i_1
347 tabmat(j) = tritnl(
min(mln,maxlaw),j,indi) + tmatadd
357 tabrup(ii) = rupture_shell(irup_tab(j),irup2+ii)
360 trup = trup + trup_local
368 IF(mult/=0) tmatadd = mult *
369 . (tritnl(
min(mln,maxlaw),0,indi) - tritnl(
min(mln,maxlaw),0,indi2) )
370 timmat = tritnl(
min(mln,maxlaw),0,indi) + tmatadd
388 IF(recherche==0)
THEN
389 IF((wd_local==0.).AND.(mln/=0))
THEN
390 poids = (telt + timmat + trup + mult_spe*nlocal_option(spe_i_3) +
visc_prony) * invtref
393 poin_part = ipartg(i)
394 poin_mid = poin_part_tri(1,poin_part)
395 poin_pid = poin_part_tri(2,poin_part)
396 IF(poin_mid/=0.AND.poin_pid/=0)
397 . mid_pid_tri(poin_mid)%COST1D(poin_pid) = telt + timmat + trup +
398 . mult_spe*nlocal_option(spe_i_3)
403 telt_pro = telt + timmat + trup + mult_spe*nlocal_option(spe_i_3)