48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
74 USE multi_fvm_mod
77 USE mat_elem_mod
79 use glob_therm_mod
80
81
82
83#include "implicit_f.inc"
84
85
86
87#include "scr17_c.inc"
88#include "units_c.inc"
89#include "com01_c.inc"
90#include "com04_c.inc"
91#include "com_xfem1.inc"
92#include "param_c.inc"
93
94
95
96
97 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
98 my_real,
INTENT(IN)::geo(npropg,numgeo)
99 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
100
101 INTEGER,INTENT(OUT)::IPART(LIPART1,*)
102 INTEGER,INTENT(OUT)::IWA(*)
103 my_real,
INTENT(OUT)::thk_part(*)
104
105 INTEGER,INTENT(INOUT)::IGEO(NPROPGI,NUMGEO)
106 INTEGER,INTENT(INOUT)::IPM(NPROPMI,NUMMAT)
107 my_real,
INTENT(INOUT)::pm(npropm,nummat)
108 TYPE(MULTI_FVM_STRUCT),INTENT(INOUT)::MULTI_FVM
109 TYPE(MLAW_TAG_) , DIMENSION(NUMMAT) , INTENT(INOUT) :: MLAW_TAG
110 TYPE (MATPARAM_STRUCT_) ,DIMENSION(NUMMAT) ,INTENT(INOUT) :: MAT_PARAM
111 type (glob_therm_) ,intent(inout) :: glob_therm
112
113
114
115 CHARACTER MESS*40
116 CHARACTER(LEN=NCHARTITLE) :: TITR,TITR1,TITR2,
117 CHARACTER*5 CHAR_PROP,CHAR_MAT
118 CHARACTER*7::CHAR_MAT_TYPE,CHAR_PROP_TYPE
119 LOGICAL IS_AVAILABLE, USER_LAW, IS_ASSOCIATED_LAW51
120 INTEGER PID,MID,SID,ID,ID1,ID2,I,IMID,IPID,ISID,K,ITH, IGTYP,XFEMFLG,
121 . IXFEM,IHBE,ILAW,UID,IFLAGUNIT,J,IDMAT_PLY,
122 . ILAW_PLY,IPMAT,NPT,IDPARTSPH,SUB_INDEX,SIZE, IDS, CNT,
123 . IFIX_TMP,STAT,JALE_FROM_PROP,JALE_FROM_MAT
124 my_real bid, thick,fac_l,mp,vol,diam
125
126
127
129 EXTERNAL get_u_geo
130 INTEGER NINTRI
131 DATA mess/' PART DEFINITION '/
132
133
134
135
140 char_prop = repeat(" ",5)
141 char_mat = repeat(" ",5)
142 char_mat_type = repeat(" ",7)
143 char_prop_type = repeat(" ",7)
144
145
146 is_associated_law51 = .false.
147 is_available = .false.
148 sub_index = 0
149 uid = 0
150 fac_l = one
151 xfemflg = 0
152 ixfem = 0
153
154 WRITE(iout,'(//A)')' PARTS'
155 WRITE(iout,'(A//)')' -----'
156
157 DO i=1,numgeo
158 iwa(i) = 0
159 ENDDO
160 DO i=1,nummat
161 iwa(numgeo+i) = 0
162 ENDDO
163
164
165
166 ale%GLOBAL%CODV(1:
ale%GLOBAL%LCONV)=0
167
168
169
171
172
173
174 DO i=1,npart
175 titr = ''
176
177
178
181 . unit_id = uid,
182 . submodel_index = sub_index,
183 . option_titr = titr)
184
185
186
187 CALL hm_get_intv(
'propertyid',pid,is_available,lsubmodel)
188 CALL hm_get_intv(
'materialid',mid,is_available,lsubmodel)
189 CALL hm_get_intv(
'subsetid',sid,is_available,lsubmodel)
190
191
192
193 CALL hm_get_floatv(
'THICK',thick,is_available,lsubmodel,unitab)
194
195
196 CALL fretitl(titr,ipart(lipart1-ltitr+1,i),ltitr)
197
198 thk_part(i) = thick
199
200
201
202
203 ipid =
nintri(pid,igeo,npropgi,numgeo,1)
204 IF(ipid == 0) THEN
205 ipid=1
206 CALL ancmsg(msgid=178,msgtype=msgerror,anmode=aninfo,i1=
id,c1=titr,i2=pid)
207 titr1=' '
208 ELSE
209 CALL fretitl2(titr1,igeo(npropgi-ltitr+1,ipid),ltitr)
210 ENDIF
211
212 igtyp=nint(geo(12,ipid))
213 IF(igtyp == 17 .OR. igtyp == 51) ipart_stack = 1
214 IF(igtyp == 52) ipart_pcompp = 1
215 IF( (igtyp == 0).OR.
216 . (igtyp == 1).OR.(igtyp == 2).OR.(igtyp == 3).OR.
217 . (igtyp == 6).OR.(igtyp == 9).OR.(igtyp == 10).OR.
218 . (igtyp == 11).OR.(igtyp == 14).OR.(igtyp == 16).OR.
219 . (igtyp == 18).OR.(igtyp == 20).OR.(igtyp == 21).OR.
220 . (igtyp == 22).OR.(igtyp == 34).OR.(igtyp == 11).OR.
221 . (igtyp == 17).OR.(igtyp == 51).OR.(igtyp == 52).OR.
222 . (igtyp == 23).OR.(igtyp == 43)) THEN
223 IF(mid == 0) THEN
225 . msgtype=msgerror,
226 . anmode=aninfo,
228 . c1=titr,
229 . i2=mid)
230 ENDIF
231 ENDIF
232
233 IF(mid == 0) THEN
234
235 imid=nummat
236 ilaw=ipm(2,imid)
237 ELSE
238 imid =
nintri(mid,ipm,npropmi,nummat,1)
239 IF(imid == 0) THEN
241 . msgtype=msgerror,
242 . anmode=aninfo,
244 . c1=titr,
245 . i2=mid)
246 ilaw=0
247 ELSE
248 ilaw = ipm(2,imid)
249 ixfem = mat_param(imid)%IXFEM
250 CALL fretitl2(titr2,ipm(npropmi-ltitr+1,imid),ltitr)
251 ENDIF
252
253 IF(ilaw == 151)is_associated_law51=.true.
254
255
256 igtyp=0
257 IF(ipid > 0) igtyp=igeo(11,ipid)
258 IF (ixfem > 0 .and. (igtyp==1 .or. igtyp==9 .or. igtyp==10 .or.
259 . igtyp==11 .or. igtyp==51)) THEN
260 xfemflg = xfemflg + ixfem
261 END IF
262 IF (ilaw == 99.AND.igtyp == 14) THEN
263 ihbe=igeo(10,ipid)
264 IF (ihbe == 12) THEN
266 . msgtype=msgerror,
267 . anmode=aninfo,
269 . c1=titr,
270 . i2=pid,
271 . c2=titr1,
272 . i3=mid,
273 . c3=titr2,
274 . c4='SOLID',
275 . i4=ihbe)
276 END IF
277 END IF
278 !tag
for user material law
279 IF (ilaw==29 .or. ilaw==30 .or. ilaw==31 .or. ilaw==99) THEN
280 user_law = .true.
281 ELSE
282 user_law = .false.
283 ENDIF
284
285
286 IF (((igtyp==43) .and. ((ilaw/=59 .and. ilaw/=83 .and. ilaw/=116 .and. ilaw/=117 .AND. ilaw /=120.AND.ilaw/=169) .and.
287 . (user_law .eqv. .false. ) ).eqv. .true.) .or.
288 . ((ilaw==59 .or. ilaw==83 .or. ilaw==116 .or. ilaw==117) .and. igtyp/=43) .or.
289 . (ilaw==1 .and. (igtyp==9.OR.igtyp==10.OR.igtyp==11.OR.igtyp==16.OR.
290 . igtyp==17.OR.igtyp==51.OR.igtyp==52) .eqv. .true.) .eqv. .true.) THEN
292 . msgtype=msgerror,
293 . anmode=aninfo_blind_2,
294 . i1=pid,
295 . c1=titr1,
296 . i2=ilaw,
297 . i3=igtyp)
298 ENDIF
299
300
301 IF (ilaw == 87 .AND. igtyp /= 9) THEN
303 . msgtype=msgwarning,
304 . anmode=aninfo_blind_1,
306 . c1=titr,
307 . i2=ilaw,
308 . i3=igtyp)
309 ENDIF
310 IF (ilaw == 187 .AND. igtyp /= 6) THEN
312 . msgtype=msgwarning,
313 . anmode=aninfo_blind_1,
315 . c1=titr,
316 . i2=ilaw,
317 . i3=igtyp)
318 ENDIF
319
320
321 IF(ilaw == 13 .AND. iroddl == 0) iroddl = 1
322
323 ENDIF
324
325
326 IF(igtyp == 11) THEN
327 npt=igeo(4,ipid
328 ipmat = 100
329 DO j=1,npt
330 idmat_ply= igeo(ipmat+j,ipid)
331 ilaw_ply = ipm(2,idmat_ply)
332 IF(ilaw_ply /= ilaw) THEN
334 . msgtype=msgerror,
335 . anmode=aninfo,
337 . c1=titr,
338 . i2=pid,
339 . c2=titr1,
340 . i3=mid,
341 . c3=titr2)
342 ENDIF
343 ENDDO
344 ENDIF
345
346
347 IF(igtyp == 23) THEN
348 imid =
nintri(mid,ipm,npropmi,nummat,1)
349 ilaw=ipm(2,imid)
350 IF(ilaw /= 108 .AND. ilaw /=113.AND. ilaw /=114 .AND. ilaw /= 0 ) THEN
352 . msgtype=msgerror,
353 . anmode=aninfo,
355 . c1=titr)
356 ENDIF
357 ENDIF
358
359
360 IF(ilaw == 70 .AND. igeo(31,ipid) == 1) WRITE(iout,2000)
361
362
363
364
365
367 .
id,ilaw,mid,imid,pid,ipid,jale_from_prop,jale_from_mat,
368 . glob_therm%ITHERM,glob_therm%ITHERM_FE)
369
370
371
372
373 WRITE(iout,
'(/A,I10,2A)')
'PART:',
id,
',',trim(titr)
374 WRITE(iout,'(A)') '----'
375
376
377 char_prop_type='TYPE ? '
378 IF(ipid>0)THEN
379 WRITE(char_prop_type(5:7),fmt='(I3)')igtyp
380 IF(igtyp<10)WRITE(char_prop_type(6:6),fmt='(A1)') '0'
381 ENDIF
382 WRITE(iout,'(A,I10,4A)')' PROPERTY :',pid,' (',trim(char_prop_type),'),',trim(titr1)
383
384
385 char_mat_type='LAW ? '
386 IF(imid>0)THEN
387 WRITE(char_mat_type(5:7),fmt='(I3)')ilaw
388 IF(ilaw<10)WRITE(char_mat_type(6:6),fmt='(A1)') '0'
389 ENDIF
390 IF( imid /= 0) WRITE(iout,'(A,I10,4A)')' MATERIAL :',mid,' (',trim(char_mat_type),'),',trim(titr2)
391
392
393 WRITE(iout,'(A,I10,2A)')' SUBSET :',sid
394
395
396 IF(jale_from_prop==1 .OR. jale_from_mat==1)THEN
397 WRITE(iout,'(A)')' FRAMEWORK : ALE'
398 ELSEIF(jale_from_prop==2 .OR. jale_from_mat==2)THEN
399 WRITE(iout,'(A)')' FRAMEWORK : EULER'
400 ELSE
401 WRITE(iout,'(A)')' FRAMEWORK : LAGRANGE'
402 ENDIF
403
404
405 IF( (igtyp == 0).OR.
406 . (igtyp == 1).OR.(igtyp == 9).OR.(igtyp == 10).OR.
407 . (igtyp == 11).OR.(igtyp == 16).OR.(igtyp == 17).OR.
408 . (igtyp == 19).OR.(igtyp == 51).OR.(igtyp == 52)) THEN
409 WRITE(iout,'(A,1PG20.13,2A)')' VIRT. THICKN: ',thk_part(i)
410 ENDIF
411
412 IF( thk_part(i)>zero .AND. ((igtyp == 3).OR.(igtyp == 2).OR.
413 . (igtyp == 18).OR.(igtyp == 4).OR.(igtyp == 8).OR.
414 . (igtyp == 12).OR.(igtyp == 13).OR.(igtyp == 23).OR.
415 . (igtyp == 25).OR.(igtyp == 26).OR.(igtyp == 27))) THEN
416 WRITE(iout,'(A,1PG20.13,2A)')' VIRT. THICKN: ',thk_part(i)
417 ENDIF
418
419
420 IF (igeo(11,ipid) == 34) THEN
421 diam =get_u_geo(6,ipid)
422 IF(diam == zero) THEN
423 mp = get_u_geo(1,ipid)
424 vol = mp/pm(1,imid)
425 diam= (sqr2*vol)**third
426 WRITE(iout,'(A,1PG20.13,2A)')' SPH SMOOTHING LENGTH: ',diam
427 ENDIF
428 ENDIF
429
430
431
432
433 ipart(1,i)=imid
434 ipart(2,i)=ipid
435 isid=0
436 ipart(3,i)=isid
438 ipart(5,i)=mid
439 ipart(6,i)=pid
440 ipart(7,i)=sid
441 ith=0
442 ipart(8,i)=ith
443 ipart(9,i)=sub_index
444
445
446 IF(ipart(4,i) == 0) THEN
447 CALL ancmsg(msgid=494,msgtype=msgerror,anmode=aninfo_blind_1,c1=line1)
448 ENDIF
449
450 ENDDO
451
452
453
454
456 DO i=1,
ale%GLOBAL%LCONV
457 IF(
ale%GLOBAL%CODV(i) == 1)
THEN
458 ale%GLOBAL%NVCONV=
ale%GLOBAL%NVCONV+1
459 ale%GLOBAL%CODV(i)=
ale%GLOBAL%NVCONV
460 ENDIF
461 ENDDO
462
463
464
465 multi_fvm%IS_USED = is_associated_law51
466 imulti_fvm = 0
467 IF (multi_fvm%IS_USED) THEN
468 imulti_fvm = 1
469 IF (n2d == 0) THEN
470 ALLOCATE(multi_fvm%VEL(3, numels), stat=stat)
471 ELSE
472 ALLOCATE(multi_fvm%VEL(3, numelq + numeltg), stat=stat)
473 ENDIF
474 IF(stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'MULTI_FVM%VEL')
475 multi_fvm%VEL(: ,:) = zero
476 ENDIF
477
478 IF (xfemflg == 0) icrack3d = 0
479
480 DO i=1,npart
481 iwa(ipart(2,i)) = 1
482 iwa(numgeo+ipart(1,i)) = 1
483 ENDDO
484
485 cnt = 0
486 DO i=1,numgeo
487 IF (iwa(i) == 0) cnt = cnt+1
488 ENDDO
489 ids = 52
490 cnt = 0
491 DO i=1,nummat
492 IF (iwa(numgeo+i) == 0) cnt = cnt+1
493 ENDDO
494 ids = 3
495
496
497
498 DO i=1,npart
499 idpartsph = igeo(38,ipart(2,i))
500 IF (idpartsph > 0) THEN
501 igeo(17,ipart(2,idpartsph)) = igeo(17,ipart(2,i))
502 ENDIF
503 ENDDO
504
505
506
507 CALL udouble(ipart(4,1),lipart1,npart,mess,0,bid)
508
509 RETURN
510 2000 FORMAT(5x,'FOR LAW 70 THE DEFAULT VALUE OF Qa and Qb IS 0' )
511
subroutine ale_euler_init(mlaw_tag, ipm, pm, igeo, titr, titr1, titr2, igtyp, id, ilaw, mid, imid, pid, ipid, jale_from_prop, jale_from_mat, itherm, itherm_fe)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
for(i8=*sizetab-1;i8 >=0;i8--)
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)
subroutine udouble(list, ilist, nlist, mess, ir, rlist)