83
84
85
87 USE elbufdef_mod
91 USE m36init_mod
92 USE matparam_def_mod , ONLY : matparam_struct_
93
94
95
96#include "implicit_f.inc"
97
98
99
100#include "mvsiz_p.inc"
101
102
103
104#include "com01_c.inc"
105#include "com04_c.inc"
106#include "param_c.inc"
107#include "scr19_c.inc"
108#include "units_c.inc"
109#include "vect01_c.inc"
110#include "scr17_c.inc"
111#include "tabsiz_c.inc"
112
113
114
115 INTEGER NIX,NEL,NSIG,NUMS,IPT,JALE_FROM_PROP,JALE_FROM_MAT,JALE_MAX
116 INTEGER IX(NIX,*), IPARG(*),IPART(LIPART1,*),IPARTEL(*),MAT(*),IPM(NPROPMI,*),PT(*), NGL(*),NPF(*)
117 INTEGER,INTENT(IN) :: IGEO(NPROPGI,NUMGEO)
118 INTEGER,INTENT(IN) :: ILOADP(SIZLOADP,*)
119 my_real x(*), geo(*), pm(npropm,*),sigi(nsig,*),skew(lskew,*),bufmat(*),tf(*)
120 my_real,
INTENT(IN) :: facload(lfacload,*)
121 my_real,
INTENT(IN) :: ddeltax(*)
122 my_real,
INTENT(IN) :: tempel(nel)
123 TYPE(G_BUFEL_), TARGET :: GBUF
124 TYPE(L_BUFEL_), TARGET :: LBUF
125 TYPE(BUF_MAT_) :: MBUF
126 TYPE(ELBUF_STRUCT_), TARGET :: ELBUF_STR
127 TYPE(DETONATORS_STRUCT_)::DETONATORS
128 TYPE(t_ale_connectivity), INTENT(INOUT) :: ALE_CONNECTIVITY
129 TARGET :: bufmat
130 TYPE (MATPARAM_STRUCT_),DIMENSION(NUMMAT), INTENT(IN) :: MAT_PARAM
131
132
133
134 CHARACTER(LEN=NCHARTITLE)::TITR
135 INTEGER I,IADBUF,NPAR,NFUNC,NUVAR,IFORM,NUMEL
136 INTEGER IFUNC(MAXFUNC)
137 INTEGER ID
138 my_real,
DIMENSION(MVSIZ) :: rho0,yldfac
139 my_real,
DIMENSION(MVSIZ) ,
TARGET :: tmp,epl,fillo
140 my_real,
DIMENSION(:) ,
POINTER ::
141 . off,sig,eint,rho,vol,epsd,deltax,tb,ang,sf,vk,rob,eplas,fill,
dtel,uparam,temp
142
143 tmp(1:nel)=zero
144 epl(1:nel)=zero
145
146 IF (ipt == 0) THEN
147 off => gbuf%OFF(1:nel)
148 sig => gbuf%SIG(1:nel*6)
149 eint => gbuf%EINT(1:nel)
150 epsd => gbuf%EPSD(1:nel)
151 rho => gbuf%RHO(1:nel)
152 vol => gbuf%VOL(1:nel)
153 IF(SIZE(gbuf%DELTAX)>0) deltax=> gbuf%DELTAX(1:nel)
154 IF(SIZE(gbuf%TB)>0) tb => gbuf%TB(1:nel)
155 dtel => gbuf%DT(1:nel)
156 IF (gbuf%G_TEMP > 0) THEN
157 temp => gbuf%TEMP(1:nel)
158 ELSE
159 temp => tmp(1:nel)
160 ENDIF
161 IF (gbuf%G_PLA > 0) THEN
162 eplas => gbuf%PLA(1:nel)
163 ELSE
164 eplas => epl(1:nel)
165 ENDIF
166 ELSE
167 off => lbuf%OFF(1:nel)
168 sig => lbuf%SIG(1:nel*6)
169 eint => lbuf%EINT(1:nel)
170 epsd => lbuf%EPSD(1:nel)
171 rho => lbuf%RHO(1:nel)
172 vol => lbuf%VOL(1:nel)
173 IF(SIZE(lbuf%DELTAX)>0) deltax=> lbuf%DELTAX(1:nel)
174 IF(SIZE(lbuf%TB)>0) tb => lbuf%TB(1:nel)
175 IF (elbuf_str%BUFLY(1)%L_TEMP > 0) THEN
176 temp => lbuf%TEMP(1:nel)
177 ELSE
178 temp => tmp(1:nel)
179 ENDIF
180 IF (elbuf_str%BUFLY(1)%L_PLA > 0) THEN
181 eplas => lbuf%PLA(1:nel)
182 ELSE
183 eplas => epl(1:nel)
184 ENDIF
185 ENDIF
186
187 IF(jsph==0)THEN
188 fill => gbuf%FILL(1:nel)
189 ELSE
190 fillo(1:nel)=one
191 fill => fillo(1:nel)
192 END IF
193
194 CALL mating(pm ,vol ,off ,eint ,rho ,
195 . sig ,ix ,nix ,sigi ,eplas ,
196 . nsig ,mat ,nums ,pt ,nel ,
197 . fill ,temp ,tempel )
198
199
200 IF(jmult <= 1)THEN
201 iparg(15)=0
202 iparg(16)=0
203 iparg(63)=0
204 iparg(64)=0
205 ENDIF
206
207 IF (mtn == 1) THEN
208 iparg(15)=1
209 ELSEIF (mtn == 2.OR.mtn == 3.OR.mtn == 4) THEN
210 iparg(15)=1
211 iparg(16)=1
212 ELSEIF (mtn == 5) THEN
213 iparg(16)=1
214 IF(n2d == 0)THEN
215 CALL m5in3 (pm,mat,0,detonators,tb,iparg,x,ix,nix)
216 ELSE
217 CALL m5in2 (pm,mat,0,detonators,tb,x,ix,nix)
218 ENDIF
219 iparg(63)=1
220 ELSEIF (mtn == 6) THEN
221 iparg(15)=0
222 iparg(63)=1
223 ELSEIF (mtn == 10) THEN
224 iparg(15)=1
225 iparg(16)=1
226 ELSEIF (mtn == 11) THEN
227 iparg(63)=1
228 iparg(64)=1
229 IF(n2d == 0)THEN
230 numel=numels
231 ELSE
232 numel=numelq+numeltg
233 ENDIF
234 jale_from_prop = igeo(62,iabs(ix(nix-1,1)))
235 jale_from_mat = iparg(7)+iparg(11)
236 jale_max =
max(jale_from_prop, jale_from_mat)
238 CALL mat11check(pm,nix,ix,ale_connectivity,numel,jale_max,nel,nft,
id,nummat,npropm)
239 ELSEIF (mtn == 12) THEN
240 iparg(15)=1
241 iparg(16)=1
242 IF (n2d /= 0)THEN
243 WRITE(iout,'(A)') ' LAW 12 IS NOT AVAILABLE IN 2D ANALYSIS'
245 ENDIF
246 ELSEIF (mtn == 14) THEN
247 iparg(15)=1
248 iparg(16)=1
249 IF (n2d /= 0)THEN
250 WRITE(iout,'(a)') ' law 14 is not available in 2d analysis'
251 CALL ARRET(2)
252 ENDIF
253 ELSEIF (MTN == 16) THEN
254 IPARG(15)=1
255 IPARG(16)=1
256 ELSEIF (MTN == 17) THEN
257 IPARG(15)=0
258 IPARG(63)=1 !Loi fluide
259 ELSEIF (MTN == 18) THEN
260 CALL ATHLEN(DELTAX, DDELTAX)
261 IF(JSPH == 0)THEN
262 IF(N2D == 0)THEN
263 CALL AGRAD3(IX,X,ALE_CONNECTIVITY,SIG,NEL)
264 ELSE
265 CALL AGRAD2(IX,X,ALE_CONNECTIVITY,SIG,NEL)
266 ENDIF
267 ENDIF
268 ELSEIF (MTN == 20) THEN
269 IF(IPARG(5)/=2)THEN
270 CALL ANCMSG(MSGID=129,MSGTYPE=MSGERROR,ANMODE=ANINFO)
271 CALL ARRET(2)
272 ENDIF
273.OR..OR. ELSEIF (MTN == 21 MTN == 22 MTN == 23) THEN
274 IPARG(15)=1
275 IPARG(16)=1
276 ELSEIF (MTN == 24) THEN
277 IPARG(15)=1
278 IPARG(16)=1
279 ANG => LBUF%ANG(1:NEL*6)
280 SF => LBUF%SF(1:NEL*3)
281 VK => LBUF%VK(1:NEL)
282 ROB => LBUF%ROB(1:NEL)
283 IF (JSPH == 0) THEN
284 IF (N2D == 0) THEN
285 CALL M24IN3(PM ,IX ,ANG ,SF ,VK ,ROB, NEL)
286 ELSE
287 CALL M24IN2(PM ,IX ,ANG ,SF ,VK ,ROB, NEL)
288 ENDIF
289 ELSE
290 CALL M24INSPH(PM ,ANG ,SF ,VK ,ROB ,
291 . IPART ,IPARTEL ,NEL )
292 ENDIF
293 ELSEIF (MTN == 26) THEN
294 IPARG(15)=1
295 IPARG(16)=1
296.OR. ELSEIF (MTN == 46MTN == 47) THEN
297 IPARG(63)=1 !Loi fluide
298 ELSEIF (MTN == 49) THEN
299 IPARG(15)=1
300 IPARG(16)=1
301 ELSEIF (MTN >= 28) THEN
302! User-type laws
303 IF(MTN /= 67)THEN
304 IPARG(15)=1
305 IPARG(16)=1
306 END IF
307
308 NUVAR = IPM(8,MAT(1))
309 NPAR = IPM(9,MAT(1))
310 IADBUF = IPM(7,MAT(1))
311 IADBUF = MAX(1,IADBUF)
312 UPARAM => BUFMAT(IADBUF:IADBUF+NPAR-1)
313
314 DO I=LFT,LLT
315 RHO0(I)= PM( 1,MAT(I))
316 END DO
317 ! law36
318 NFUNC = IPM(10,MAT(1))
319 DO I=1,NFUNC
320 IFUNC(I) = IPM(10+I,MAT(1))
321 ENDDO
322
323 IF (MTN == 36) THEN
324 if (elbuf_str%bufly(1)%l_fac_yld > 0) then
325 yldfac(1:nel) = lbuf%fac_yld(1:nel)
326 else
327 yldfac(1:nel) = one
328 end if
329
330 CALL M36INIT(NEL ,NPAR ,NUVAR ,NFUNC ,IFUNC ,YLDFAC ,
331 . SNPC ,STF ,NPF ,TF ,UPARAM ,MBUF%VAR)
332
333 ELSEIF (MTN == 37) THEN
334 IPARG(63) = 1 !Loi fluide
335 CALL M37INIT(IPM ,PM ,
336 . NGL ,NUVAR ,MBUF%VAR ,UPARAM ,X ,
337 . MAT ,IPARG ,IFORM ,IX ,NIX ,
338 . ILOADP ,FACLOAD ,GBUF ,NEL)
339 ELSEIF (MTN == 38) THEN
340 CALL M38INIT(
341 1 NEL ,NPAR ,NUVAR ,NFUNC ,IFUNC ,
342 2 NPF ,TF ,BUFMAT(IADBUF),RHO0 ,VOL ,
343 3 EINT ,MBUF%VAR )
344 ELSEIF (MTN == 51) THEN
345 CALL M51INIT(IPM ,DETONATORS ,PM ,TB ,
346 . NUVAR ,MBUF%VAR ,UPARAM ,X ,
347 . MAT ,IPARG ,IFORM ,IX ,NIX ,
348 . ALE_CONNECTIVITY ,BUFMAT ,RHO0 ,
349 . GBUF ,NEL ,SIG ,MAT_PARAM , NPF, TF )
350 ELSEIF (MTN == 70) THEN
351 CALL M70INIT(NEL ,NPAR ,NUVAR ,UPARAM ,MBUF%VAR)
352
353 ELSEIF (MTN == 75) THEN
354 ID=IPM(1,MAT(1))
355 CALL FRETITL2(TITR,IPM(NPROPMI-LTITR+1,MAT(1)),LTITR)
356 CALL M75INIT(
357 1 NEL ,NPAR ,NUVAR ,NFUNC ,IFUNC ,
358 2 NPF ,TF ,UPARAM ,RHO0 ,VOL ,
359 3 EINT ,MBUF%VAR,PM ,ID ,TITR )
360 ELSEIF (MTN == 77) THEN
361 CALL M77INIT(
362 1 NEL ,NPAR ,NUVAR ,NFUNC ,IFUNC ,
363 2 NPF ,TF ,UPARAM ,RHO0 ,VOL ,
364 3 EINT ,MBUF%VAR)
365
366 ELSEIF (MTN == 95) THEN
367 CALL M95INIT(NEL ,NUVAR ,MBUF%VAR)
368 ELSEIF (MTN == 97)THEN
369 IPARG(16)=1 ! FLAG REZONE (BURNING TIME same index for EPS PLAST.)
370 IPARG(63)=1 ! FLAG FOR FLUID MATERIAL
371 CALL M97INIT(
372 . IPM ,DETONATORS,PM ,
373 . NUVAR ,MBUF%VAR ,BUFMAT(IADBUF) ,X ,
374 . MAT ,IPARG ,IFORM ,IX ,NIX ,
375 . BUFMAT ,RHO0 ,TB)
376 ELSEIF (MTN == 102) THEN
377 IPARG(15)=1
378 IPARG(16)=1
379 ELSEIF (MTN == 105)THEN
380 IPARG(16)=1 ! FLAG REZONE (BURNING TIME same index for EPS PLAST.)
381 IPARG(63)=1 ! FLAG FOR FLUID MATERIAL
382 CALL M105INIT(
383 . IPM ,DETONATORS,PM ,
384 . NUVAR ,MBUF%VAR ,BUFMAT(IADBUF) ,X ,
385 . MAT ,IPARG ,IFORM ,IX ,NIX ,
386 . BUFMAT ,RHO0 ,TB)
387
388 ENDIF
389 ENDIF
390
391 !must be set, once m51init() was called
392 IF(ELBUF_STR%BUFLY(1)%L_SSP /= 0)THEN
393 DO I=1,NEL
394 LBUF%SSP(I)=PM(27,MAT(I))
395 ENDDO
396 ENDIF
397
398
399 RETURN
subroutine dtel(ssp, pm, geo, pid, mat, rho0, vis, deltax, aire, vol, dtx)
subroutine m5in2(pm, mat, m151_id, detonators, tb, x, ix, nix)
subroutine m5in3(pm, mat, m151_id, detonators, tb, iparg, x, ix, nix)
subroutine mat11check(pm, nix, ix, ale_connectivity, numel, jale_from_prop, nel, nft, mat_id, nummat, npropm)
subroutine mating(pm, vol, off, eint, rho, sig, ix, nix, sigi, epsp, nsig, mat, nums, pt, nel, fill, temp, tempel)
integer, parameter nchartitle