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,
48#include "implicit_f.inc"
54#include "tablen_c.inc"
55#include "ddspmd_c.inc"
60 . NUMMAT,NUMGEO,IXC(NIXC,*),
61 . IGEO(NPROPGI,NUMGEO),IPM(NPROPMI,NUMMAT),TABMP_L
62 INTEGER,
INTENT(IN) :: SIZE_IRUP
66 . pm(npropm,nummat), geo(npropg,numgeo),bufmat(*)
68 INTEGER MID_OLD,PID_OLD,MLN_OLD,RECHERCHE
71 INTEGER,
DIMENSION(*),
INTENT(IN) :: IPARTC
72 INTEGER,
DIMENSION(2,*),
INTENT(IN) :: POIN_PART_SHELL
73 TYPE(
mid_pid_type),
DIMENSION(*),
INTENT(INOUT) :: MID_PID_SHELL
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),
83 . indi,iad,indi2,mult,idril
84 INTEGER :: INDI3,IGTYP,INDI4,INDI5
86 INTEGER :: POIN_PID,POIN_MID,POIN_PART,COST_CHECK
87 INTEGER :: FLAG_NICE_NEWTON,FLAG_GURSON,FLAG_NON_LOCAL
88 INTEGER :: SPECIAL_OPTION,SPE_I_1,SPE_I_2,SPE_I_3
91 . wtype(9),fwihbe,fac8,
92 . tabmat(3),tabx(3),timmat,npt,telt,poids,w,
93 . batozmult,tmat,trup,tabrup(3),trup_local,tmatadd,
100 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))
144 ihbe = nint(geo(171,pid))
145 ithk = nint(geo(35,pid))
146 ipla = nint(geo(39,pid))
148 nfail = mat_param(mid)%NFAIL
157 irup_tab(j) = mat_param(mid)%FAIL(j)%IRUPT
165 IF((mln<28).OR.(mln==32))
THEN
179 IF (mat_param(abs(mid))%IVISC > 0)
THEN
180 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
190 IF (mat_param(abs(mid))%IVISC > 0)
THEN
191 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
195 ELSEIF ((mln==36))
THEN
199 nfunc = nint(pm(40,mid))
203 ELSEIF (nfunc>2.AND.nfunc<=7)
THEN
205 ELSEIF (nfunc>7)
THEN
208 IF (mat_param(abs(mid))%IVISC > 0)
THEN
209 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
213 ELSEIF((mln==86).AND.(abs(npn)==0))
THEN
214 nfunc = nint(pm(40,mid))
217 ELSEIF (nfunc>2.AND.nfunc<=7)
THEN
219 ELSEIF (nfunc>7)
THEN
224 IF (mat_param(abs(mid))%IVISC > 0)
THEN
225 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
230 ELSEIF((mln==42).OR.(mln==62).OR.(mln==69))
THEN
233 IF (mln==42) nfunc = mat_param(abs(mid))%IPARAM(2)
235 iad=ipm(7,abs(mid))-1
236 nfunc = nint(bufmat(iad+3))
241 IF (mat_param(abs(mid))%IVISC > 0)
THEN
242 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
244 ELSEIF(nfunc==1)
THEN
246 ELSEIF(nfunc==2)
THEN
255 ELSEIF((mln==82))
THEN
256 iad=ipm(7,abs(mid))-1
257 nfunc=nint(bufmat(iad+1))
260 IF (mat_param(abs(mid))%IVISC > 0)
THEN
261 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
263 ELSEIF(nfunc==2)
THEN
265 ELSEIF(nfunc==3)
THEN
274 ELSEIF(mln==104)
THEN
275 iad=ipm(7,abs(mid))-1
276 flag_nice_newton=nint(bufmat(iad+11))
277 IF(flag_nice_newton==2)
THEN
282 flag_gurson=nint(bufmat(iad+30))
283 IF(flag_gurson/=0)
THEN
288 IF(flag_gurson==1)
THEN
290 ELSEIF(flag_gurson==2)
THEN
292 ELSEIF(flag_gurson==3)
THEN
295 flag_non_local = mat_param(abs(mid))%NLOC
300 IF (mat_param(abs(mid))%IVISC > 0)
THEN
301 visc_prony = visc_prony_cost * mat_param(abs(mid))%VISC%IPARAM(1)
307 IF(flag_non_local/
THEN
317 IF(recherche==0.AND.test_poids/=0)
THEN
318 poin_part = ipartc(i)
319 poin_mid = poin_part_shell(1,poin_part)
320 poin_pid = poin_part_shell(2,poin_part)
323 IF(poin_mid/=0.AND.poin_pid/=0)
THEN
324 IF(mid_pid_shell(poin_mid)%COST1D(poin_pid)/=zero)
THEN
326 telt = mid_pid_shell(poin_mid)%COST1D(poin_pid)
331IF(cost_check==0)
THEN
335 IF(ddweights(1,2,mid)/=zero)
THEN
337 a1 = ddweights(1,2,mid) * tpsref
338 a2 = ddweights(2,2,mid) * tpsref
352 a1 = rupture_shell(irup_tab(j),irup2+1)
353 a2 = rupture_shell(irup_tab(j),irup2+3)
365! ----------------------------------------
373 istrain = nint(geo(11,pid))
374 IF(mln==19.OR.mln>=25)istrain = 1
375 issn = nint(geo(3,pid))
377 IF (wd_local==0.)
THEN
384 IF(mult/=0) tmatadd = mult *
385 . (shtnl(
min(mln,maxlaw),j,indi) - shtnl(
min(mln,maxlaw),j,indi2) )
386 IF(special_option/=0) tmatadd = tmatadd + shtnl_option(spe_i_1,spe_i_2)
387 tabmat(j) = shtnl(
min(mln,maxlaw),j,indi) + tmatadd
397 tabrup(ii) = rupture_shell(irup_tab(j),irup2+ii)
401 trup = trup + trup_local
408 IF(mult/=0) tmatadd = mult *
409 . (shtnl(
min(mln,maxlaw),0,indi) - shtnl(
min(mln,maxlaw),0,indi2) )
410 timmat = shtnl(
min(mln,maxlaw),0,indi) + tmatadd
424 ELSEIF(igtyp==11)
THEN
426 ELSEIF(igtyp==9)
THEN
428 ELSEIF(igtyp==16)
THEN
430 ELSEIF(igtyp==51)
THEN
440 IF (ihbe>=11.AND.ihbe<=19)
THEN
442 telt = shtelt(indi4*5+3+indi5)+batozmult*(timmat + trup) + mult_spe*nlocal_option(spe_i_3) +
visc_prony
443 ELSEIF (ihbe>=21.AND.ihbe<=29)
THEN
445 telt = shtelt(indi4*5+2+indi5) + timmat + trup + mult_spe*nlocal_option(spe_i_3) +
visc_prony
448 telt = shtelt(indi4*5+1) + timmat + trup + mult_spe*nlocal_option(spe_i_3) +
visc_prony
455 IF(recherche==0)
THEN
456 IF((wd_local==0.).AND.(mln/=0))
THEN
457 poids = telt * invtref
459 poin_part = ipartc(i)
460 poin_mid = poin_part_shell(1,poin_part)
461 poin_pid = poin_part_shell(2,poin_part)
462 IF(poin_mid/=0.AND.poin_pid/=0) mid_pid_shell(poin_mid)%COST1D(poin_pid) = telt
463 ELSEIF((wd_local==0.).AND.(mln==0))
THEN