81
82
83
85 USE elbufdef_mod
89
90
91
92#include "implicit_f.inc"
93
94
95
96#include "mvsiz_p.inc"
97
98
99
100#include "com01_c.inc"
101#include "com04_c.inc"
102#include "param_c.inc"
103#include "scr19_c.inc"
104#include "units_c.inc"
105#include "vect01_c.inc"
106#include "scr17_c.inc"
107
108
109
110 INTEGER NIX,NEL,NSIG,NUMS,IPT,JALE_FROM_PROP,JALE_FROM_MAT,
111 INTEGER IX(NIX,*), IPARG(*),IPART(LIPART1,*),IPARTEL(*),MAT(*),IPM(NPROPMI,*),PT(*), NGL(*),NPF(*)
112 INTEGER,INTENT(IN) :: IGEO(NPROPGI,NUMGEO)
113 INTEGER,INTENT(IN) :: ILOADP(SIZLOADP,*)
114 my_real x(*), geo(*), pm(npropm,*),sigi(nsig,*),skew(lskew,*),bufmat(*),tf(*)
115 my_real,
INTENT(IN) :: facload(lfacload,*)
116 my_real,
INTENT(IN) :: ddeltax(*)
117 my_real,
INTENT(IN) :: tempel(nel)
118 TYPE(G_BUFEL_), TARGET :: GBUF
119 TYPE(L_BUFEL_), TARGET :: LBUF
120 TYPE(BUF_MAT_) ::
121 TYPE(ELBUF_STRUCT_), TARGET ::
122 TYPE(DETONATORS_STRUCT_)::DETONATORS
123 TYPE(t_ale_connectivity), INTENT(INOUT) :: ALE_CONNECTIVITY
124 TARGET :: bufmat
125
126
127
128 CHARACTER(LEN=NCHARTITLE)::TITR
129 INTEGER I,IADBUF,NPAR,NFUNC,NUVAR,IFORM,NUMEL
130 INTEGER IFUNC(MAXFUNC)
131 INTEGER ID
133 my_real ,
DIMENSION(MVSIZ) ,
TARGET :: tmp,epl,fillo
134 my_real ,
DIMENSION(:) ,
POINTER ::
135 . off,sig,eint,rho,vol,epsd,deltax,tb,ang,sf,vk,rob,uvar,eplas,fill,
dtel,uparam,temp
136
137 tmp(1:nel)=zero
138 epl(1:nel)=zero
139
140 IF (ipt == 0) THEN
141 off => gbuf%OFF(1:nel)
142 sig => gbuf%SIG(1:nel*6)
143 eint => gbuf%EINT(1:nel)
144 epsd => gbuf%EPSD(1:nel)
145 rho => gbuf%RHO(1:nel)
146 vol => gbuf%VOL(1:nel)
147 IF(SIZE(gbuf%DELTAX)>0) deltax=> gbuf%DELTAX(1:nel)
148 IF(SIZE(gbuf%TB)>0) tb => gbuf%TB(1:nel)
149 dtel => gbuf%DT(1:nel)
150 IF (gbuf%G_TEMP > 0) THEN
151 temp => gbuf%TEMP(1:nel)
152 ELSE
153 temp => tmp(1:nel)
154 ENDIF
155 IF (gbuf%G_PLA > 0) THEN
156 eplas => gbuf%PLA(1:nel)
157 ELSE
158 eplas => epl(1:nel)
159 ENDIF
160 ELSE
161 off => lbuf%OFF(1:nel)
162 sig => lbuf%SIG(1:nel*6)
163 eint => lbuf%EINT(1:nel)
164 epsd => lbuf%EPSD(1:nel)
165 rho => lbuf%RHO(1:nel)
166 vol => lbuf%VOL(1:nel)
167 IF(SIZE(lbuf%DELTAX)>0) deltax=> lbuf%DELTAX(1:nel)
168 IF(SIZE(lbuf%TB)>0) tb => lbuf%TB(1:nel)
169 IF (elbuf_str%BUFLY(1)%L_TEMP > 0) THEN
170 temp => lbuf%TEMP(1:nel)
171 ELSE
172 temp => tmp(1:nel)
173 ENDIF
174 IF (elbuf_str%BUFLY(1)%L_PLA > 0) THEN
175 eplas => lbuf%PLA(1:nel)
176 ELSE
177 eplas => epl(1:nel)
178 ENDIF
179 ENDIF
180
181 IF(jsph==0)THEN
182 fill => gbuf%FILL(1:nel)
183 ELSE
184 fillo(1:nel)=one
185 fill => fillo(1:nel)
186 END IF
187
188 CALL mating(pm ,vol ,off ,eint ,rho ,
189 . sig ,ix ,nix ,sigi ,eplas ,
190 . nsig ,mat ,nums ,pt ,nel ,
191 . fill ,temp ,tempel )
192
193
194 IF(jmult <= 1)THEN
195 iparg(15)=0
196 iparg(16)=0
197 iparg(63)=0
198 iparg(64)=0
199 ENDIF
200
201 IF (mtn == 1) THEN
202 iparg(15)=1
203 ELSEIF (mtn == 2.OR.mtn == 3.OR.mtn == 4) THEN
204 iparg(15)=1
205 iparg(16)=1
206 ELSEIF (mtn == 5) THEN
207 iparg(16)=1
208 IF(n2d == 0)THEN
209 CALL m5in3 (pm,mat,0,detonators,tb,iparg,x,ix,nix)
210 ELSE
211 CALL m5in2 (pm,mat,0,detonators,tb,x,ix,nix)
212 ENDIF
213 iparg(63)=1
214 ELSEIF (mtn == 6) THEN
215 IF(isgifl > 0) THEN
216 CALL m6in(pm,mat,sig,rho,nel)
217 ENDIF
218 iparg(15)=0
219 iparg(63)=1
220 ELSEIF (mtn == 10) THEN
221 iparg(15)=1
222 iparg(16)=1
223 ELSEIF (mtn == 11) THEN
224 iparg(63)=1
225 iparg(64)=1
226 IF(n2d == 0)THEN
227 numel=numels
228 ELSE
229 numel=numelq+numeltg
230 ENDIF
231 jale_from_prop = igeo(62,iabs(ix(nix-1,1)))
232 jale_from_mat = iparg(7)+iparg(11)
233 jale_max =
max(jale_from_prop, jale_from_mat)
235 CALL mat11check(pm,nix,ix,ale_connectivity,numel,jale_max,nel,nft,
id,nummat,npropm)
236 ELSEIF (mtn == 12) THEN
237 iparg(15)=1
238 iparg(16)=1
239 IF (n2d /= 0)THEN
240 WRITE(iout,'(A)') ' LAW 12 IS NOT AVAILABLE IN 2D ANALYSIS'
242 ENDIF
243 ELSEIF (mtn == 14) THEN
244 iparg(15)=1
245 iparg(16)=1
246 IF (n2d /= 0)THEN
247 WRITE(iout,'(A)') ' LAW 14 IS NOT AVAILABLE IN 2D ANALYSIS'
249 ENDIF
250 ELSEIF (mtn == 16) THEN
251 iparg(15)=1
252 iparg(16)=1
253 ELSEIF (mtn == 17) THEN
254 IF(isgifl > 0) THEN
255 CALL m6in(pm,mat,sig,rho,nel)
256 ENDIF
257 iparg(15)=0
258 iparg(63)=1
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)
272 ENDIF
273 ELSEIF (mtn == 21 .OR. mtn == 22 .OR. 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 ELSEIF (mtn == 46.OR.mtn == 47) THEN
297 iparg(63)=1
298 ELSEIF (mtn == 49) THEN
299 iparg(15)=1
300 iparg(16)=1
301 ELSEIF (mtn >= 28) THEN
302
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)
313
314 DO i=lft,llt
315 rho0(i)= pm( 1,mat(i))
316 END DO
317
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 == 37) THEN
324 iparg(63) = 1
326 . ngl ,nuvar ,mbuf%VAR ,uparam ,x ,
327 . mat ,iparg ,iform ,ix ,nix ,
328 . iloadp ,facload ,gbuf ,nel)
329 ELSEIF (mtn == 38) THEN
331 1 nel ,npar ,nuvar ,nfunc ,ifunc ,
332 2 npf ,tf ,bufmat(iadbuf),rho0 ,vol ,
333 3 eint ,mbuf%VAR )
334 ELSEIF (mtn == 51) THEN
335 CALL m51init(ipm ,detonators ,pm ,tb ,
336 . nuvar ,mbuf%VAR ,uparam ,x ,
337 . mat ,iparg ,iform ,ix ,nix ,
338 . ale_connectivity ,bufmat ,rho0 ,
339 . gbuf ,nel ,sig)
340 ELSEIF (mtn == 70) THEN
341 CALL m70init(nel ,npar ,nuvar ,uparam ,mbuf%VAR)
342
343 ELSEIF (mtn == 75) THEN
345 CALL fretitl2(titr,ipm(npropmi-ltitr+1,mat
347 1 nel ,npar ,nuvar ,nfunc ,ifunc ,
348 2 npf ,tf ,uparam ,rho0 ,vol ,
349 3 eint ,mbuf%VAR,pm ,
id ,titr )
350 ELSEIF (mtn == 77) THEN
352 1 nel ,npar ,nuvar ,nfunc ,ifunc ,
353 2 npf ,tf ,uparam ,rho0 ,vol ,
354 3 eint ,mbuf%VAR)
355
356 ELSEIF (mtn == 95) THEN
357 CALL m95init(nel ,nuvar ,mbuf%VAR)
358 ELSEIF (mtn == 97)THEN
359 iparg(16)=1
360 iparg(63)=1
362 . ipm ,detonators,pm ,
363 . nuvar ,mbuf%VAR ,bufmat(iadbuf) ,x ,
364 . mat ,iparg ,iform ,ix ,nix ,
365 . bufmat ,rho0 ,tb)
366 ELSEIF (mtn == 102) THEN
367 iparg(15)=1
368 iparg(16)=1
369 ELSEIF (mtn == 105)THEN
370 iparg(16)=1
371 iparg(63)=1
373 . ipm ,detonators,pm ,
374 . nuvar ,mbuf%VAR ,bufmat(iadbuf) ,x ,
375 . mat ,iparg ,iform ,ix ,nix ,
376 . bufmat ,rho0 ,tb)
377
378 ENDIF
379 ENDIF
380
381
382 IF(elbuf_str%BUFLY(1)%L_SSP /= 0)THEN
383 DO i=1,nel
384 lbuf%SSP(i)=pm(27,mat(i))
385 ENDDO
386 ENDIF
387
388
389 RETURN
subroutine athlen(delt, deltax)
subroutine dtel(ssp, pm, geo, pid, mat, rho0, vis, deltax, aire, vol, dtx)
subroutine m105init(ipm, detonators, pm, nuvar, uvar, uparam, x, mat, iparg, iform, ix, nix, bufmat, rho0, tb)
subroutine m24in2(pm, ix, ang, sf, vk0, rob, nel)
subroutine m24in3(pm, ix, ang, sf, vk0, rob, nel)
subroutine m24insph(pm, ang, sf, vk0, rob, ipart, ipartsp, nel)
subroutine m37init(ipm, pm, ngl, nuvar, uvar, uparam, x, mat, iparg, iform, ix, nix, iloadp, facload, gbuf, nel)
subroutine m38init(nel, nuparam, nuvar, nfunc, ifunc, npf, tf, uparam, rho0, volume, eint, uvar)
subroutine m51init(ipm, detonators, pm, tb, nuvar, uvar, uparam, x, mat, iparg, iform, ix, nix, ale_connectivity, bufmat, rho0, gbuf, nel, sig)
subroutine m5in2(pm, mat, m151_id, detonators, tb, x, ix, nix)
subroutine m5in3(pm, mat, m151_id, detonators, tb, iparg, x, ix, nix)
subroutine m6in(pm, mat, sig, rho, nel)
subroutine m70init(nel, nuparam, nuvar, uparam, uvar)
subroutine m75init(nel, nuparam, nuvar, nfunc, ifunc, npf, tf, uparam, rho0, volume, eint, uvar, pm, id, titr)
subroutine m77init(nel, nuparam, nuvar, nfunc, ifunc, npf, tf, uparam, rho0, volume, eint, uvar)
subroutine m95init(nel, nuvar, uvar)
subroutine m97init(ipm, detonators, pm, nuvar, uvar, uparam, x, mat, iparg, iform, ix, nix, bufmat, rho0, tb)
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
subroutine agrad2(ixq, x, ale_connectivity, grad, nel)
subroutine agrad3(ixs, x, ale_connectivity, grad, nel)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)