35 . NUMELC,IPM,NUMMAT,NUMGEO,POIN_PART_SHELL,
36 . MID_PID_SHELL,IPARTC,OFF,BUFMAT,
37 . MID_OLD,PID_OLD,MLN_OLD,RECHERCHE,TELT_PRO,
45 use element_mod ,
only : nixc
49#include "implicit_f.inc"
55#include "tablen_c.inc"
56#include "ddspmd_c.inc"
61 . NUMMAT,NUMGEO,IXC(NIXC,*),
62 . IGEO(NPROPGI,NUMGEO),IPM(NPROPMI,NUMMAT),TABMP_L
63 INTEGER,
INTENT(IN) :: SIZE_IRUP
67 . pm(npropm,nummat), geo(npropg,numgeo),bufmat(*)
69 INTEGER MID_OLD,PID_OLD,MLN_OLD,RECHERCHE
72 INTEGER,
DIMENSION(*),
INTENT(IN) :: IPARTC
73 INTEGER,
DIMENSION(2,*),
INTENT(IN) :: POIN_PART_SHELL
74 TYPE(
mid_pid_type),
DIMENSION(*),
INTENT(INOUT) :: MID_PID_SHELL
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),
84 . indi,iad,indi2,mult,idril
85 INTEGER :: INDI3,IGTYP,INDI4,INDI5
87 INTEGER :: POIN_PID,POIN_MID,POIN_PART,COST_CHECK
88 INTEGER :: FLAG_NICE_NEWTON,FLAG_GURSON,FLAG_NON_LOCAL
89 INTEGER :: SPECIAL_OPTION,SPE_I_1,SPE_I_2,SPE_I_3
93 . tabmat(3),tabx(3),timmat,npt,telt,poids,
94 . batozmult,trup,tabrup(3),trup_local,tmatadd,
101 DATA wtype /1.6 ,1. ,1. ,.9 ,1.1 ,1.4 ,0.65 ,.9 ,2.0/
109 IF(dd_optimization==1)
THEN
111#include "weights_p4linux964_spmd_avx512.inc"
112 ELSEIF(dd_optimization==2)
THEN
114#include "weights_p4linux964_spmd_sse3.inc"
115 ELSEIF(dd_optimization==3)
THEN
117#include "weights_p4linuxa964_spmd.inc"
122#include "weights_p4linuxa964_spmd.inc"
125#include "weights_p4linux964_spmd.inc"
133 mln = nint(pm(19,abs(mid)))
136 IF(recherche==1)
THEN
143 npn = nint(geo(6,pid))
145 ihbe = nint(geo(171,pid))
146 ithk = nint(geo(35,pid))
147 ipla = nint(geo(39,pid))
149 nfail = mat_param(mid)%NFAIL
158 irup_tab(j) = mat_param(mid)%FAIL(j)%IRUPT
166 IF((mln<28).OR.(mln==32))
THEN
180 IF (mat_param(abs(mid))%IVISC > 0)
THEN
181 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
191 IF (mat_param(abs(mid))%IVISC > 0)
THEN
192 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
196 ELSEIF ((mln==36))
THEN
200 nfunc = nint(pm(40,mid))
204 ELSEIF (nfunc>2.AND.nfunc<=7)
THEN
206 ELSEIF (nfunc>7)
THEN
209 IF (mat_param(abs(mid))%IVISC > 0)
THEN
210 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
214 ELSEIF((mln==86).AND.(abs(npn)==0))
THEN
215 nfunc = nint(pm(40,mid))
218 ELSEIF (nfunc>2.AND.nfunc<=7)
THEN
220 ELSEIF (nfunc>7)
THEN
225 IF (mat_param(abs(mid))%IVISC > 0)
THEN
226 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
231 ELSEIF((mln==42).OR.(mln==62).OR.(mln==69))
THEN
234 IF (mln==42) nfunc = mat_param(abs(mid))%IPARAM(2)
236 iad=ipm(7,abs(mid))-1
237 nfunc = nint(bufmat(iad+3))
242 IF (mat_param(abs(mid))%IVISC > 0)
THEN
243 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
245 ELSEIF(nfunc==1)
THEN
247 ELSEIF(nfunc==2)
THEN
256 ELSEIF((mln==82))
THEN
257 iad=ipm(7,abs(mid))-1
258 nfunc=nint(bufmat(iad+1))
261 IF (mat_param(abs(mid))%IVISC > 0)
THEN
262 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
264 ELSEIF(nfunc==2)
THEN
266 ELSEIF(nfunc==3)
THEN
275 ELSEIF(mln==104)
THEN
276 iad=ipm(7,abs(mid))-1
277 flag_nice_newton=nint(bufmat(iad+11))
278 IF(flag_nice_newton==2)
THEN
283 flag_gurson=nint(bufmat(iad+30))
284 IF(flag_gurson/=0)
THEN
289 IF(flag_gurson==1)
THEN
291 ELSEIF(flag_gurson==2)
THEN
293 ELSEIF(flag_gurson==3)
THEN
296 flag_non_local = mat_param(abs(mid))%NLOC
301 IF (mat_param(abs(mid))%IVISC > 0)
THEN
302 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
308 IF(flag_non_local/=0)
THEN
318 IF(recherche==0.AND.test_poids/=0)
THEN
319 poin_part = ipartc(i)
320 poin_mid = poin_part_shell(1,poin_part)
321 poin_pid = poin_part_shell(2,poin_part)
324 IF(poin_mid/=0.AND.poin_pid/=0)
THEN
325 IF(mid_pid_shell(poin_mid)%COST1D(poin_pid)/=zero)
THEN
327 telt = mid_pid_shell(poin_mid)%COST1D(poin_pid)
332 IF(cost_check==0)
THEN
336 IF(ddweights(1,2,mid)/=zero)
THEN
338 a1 = ddweights(1,2,mid) * tpsref
339 a2 = ddweights(2,2,mid) * tpsref
353 a1 = rupture_shell(irup_tab(j),irup2+1)
354 a2 = rupture_shell(irup_tab(j),irup2+3)
358 trup = trup + a*npt + b
374 istrain = nint(geo(11,pid))
375 IF(mln==19.OR.mln>=25)istrain = 1
376 issn = nint(geo(3,pid))
378 IF (wd_local==0.)
THEN
385 IF(mult/=0) tmatadd = mult *
386 . (shtnl(
min(mln,maxlaw),j,indi) - shtnl(
min(mln,maxlaw),j,indi2) )
387 IF(special_option/=0) tmatadd = tmatadd + shtnl_option(spe_i_1,spe_i_2)
388 tabmat(j) = shtnl(
min(mln,maxlaw),j,indi) + tmatadd
398 tabrup(ii) = rupture_shell(irup_tab(j),irup2+ii)
402 trup = trup + trup_local
409 IF(mult/=0) tmatadd = mult *
410 . (shtnl(
min(mln,maxlaw),0,indi) - shtnl(
min(mln,maxlaw),0,indi2) )
411 timmat = shtnl(
min(mln,maxlaw),0,indi) + tmatadd
425 ELSEIF(igtyp==11)
THEN
427 ELSEIF(igtyp==9)
THEN
429 ELSEIF(igtyp==16)
THEN
431 ELSEIF(igtyp==51)
THEN
441 IF (ihbe>=11.AND.ihbe<=19)
THEN
443 telt = shtelt(indi4*5+3+indi5)+batozmult*(timmat + trup) + mult_spe*nlocal_option
444 ELSEIF (ihbe>=21.AND.ihbe<=29)
THEN
446 telt = shtelt(indi4*5+2+indi5) + timmat + trup + mult_spe*nlocal_option(spe_i_3) +
visc_prony
449 telt = shtelt(indi4*5+1) + timmat + trup + mult_spe*nlocal_option(spe_i_3) +
visc_prony
456 IF(recherche==0)
THEN
457 IF((wd_local==0.).AND.(mln/=0))
THEN
458 poids = telt * invtref
460 poin_part = ipartc(i)
461 poin_mid = poin_part_shell(1,poin_part)
462 poin_pid = poin_part_shell(2,poin_part)
463 IF(poin_mid/=0.AND.poin_pid/=0) mid_pid_shell(poin_mid)%COST1D(poin_pid) = telt
464 ELSEIF((wd_local==0.).AND.(mln==0))
THEN