46 . UNITAB,LSUBMODEL,MULTI_FVM,MLAW_TAG,
47 . MAT_PARAM,GLOB_THERM)
83#include "implicit_f.inc"
91#include "com_xfem1.inc"
97 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
98 my_real,
INTENT(IN)::GEO(NPROPG,NUMGEO)
101 INTEGER,
INTENT(OUT)::IPART(LIPART1,*)
102 INTEGER,
INTENT(OUT)::IWA(*)
103 my_real,
INTENT(OUT)::thk_part(*)
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
116 CHARACTER(LEN=NCHARTITLE) :: TITR,TITR1,TITR2,LINE1
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
131 DATA mess/
' PART DEFINITION '/
140 char_prop = repeat(
" ",5)
141 char_mat = repeat(
" ",5)
142 char_mat_type = repeat(
" ",7)
143 char_prop_type = repeat(
" ",7)
146 is_associated_law51 = .false.
147 is_available = .false.
154 WRITE(iout,
'(//A)')
' PARTS'
155 WRITE(iout,
'(A//)')
' -----'
166 ale%GLOBAL%CODV(1:
ale%GLOBAL%LCONV)=0
182 . submodel_index = sub_index,
183 . option_titr = titr)
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)
193 CALL hm_get_floatv('thick
',THICK,IS_AVAILABLE,LSUBMODEL,UNITAB)
196 CALL FRETITL(TITR,IPART(LIPART1-LTITR+1,I),LTITR)
203 IPID = NINTRI(PID,IGEO,NPROPGI,NUMGEO,1)
206 CALL ANCMSG(MSGID=178,MSGTYPE=MSGERROR,ANMODE=ANINFO,I1=ID,C1=TITR,I2=PID)
209 CALL FRETITL2(TITR1,IGEO(NPROPGI-LTITR+1,IPID),LTITR)
212 IGTYP=NINT(GEO(12,IPID))
213.OR.
IF(IGTYP == 17 IGTYP == 51) IPART_STACK = 1
214 IF(IGTYP == 52) IPART_PCOMPP = 1
216.OR..OR..OR.
. (IGTYP == 1)(IGTYP == 2)(IGTYP == 3)
217.OR..OR..OR.
. (IGTYP == 6)(IGTYP == 9)(IGTYP == 10)
218.OR..OR..OR.
. (IGTYP == 11)(IGTYP == 14)(IGTYP == 16)
219.OR..OR..OR.
. (IGTYP == 18)(IGTYP == 20)(IGTYP == 21)
220.OR..OR..OR.
. (IGTYP == 22)(IGTYP == 34)(IGTYP == 11)
221.OR..OR..OR.
. (IGTYP == 17)(IGTYP == 51)(IGTYP == 52)
222.OR.
. (IGTYP == 23)(IGTYP == 43)) THEN
224 CALL ANCMSG(MSGID=179,
232 !--- check material identifier
234 !fictitious material law for spring elements
238 IMID = NINTRI(MID,IPM,NPROPMI,NUMMAT,1)
240 CALL ANCMSG(MSGID=179,
249 IXFEM = MAT_PARAM(IMID)%IXFEM
250 CALL FRETITL2(TITR2,IPM(NPROPMI-LTITR+1,IMID),LTITR)
252 !check if law151 is used
253 IF(ILAW == 151)IS_ASSOCIATED_LAW51=.TRUE.
255 !--- check property identifier
257 IF(IPID > 0) IGTYP=IGEO(11,IPID)
258.and..or..or..or.
IF (IXFEM > 0 (IGTYP==1 IGTYP==9 IGTYP==10
259.or.
. IGTYP==11 IGTYP==51)) THEN
260 XFEMFLG = XFEMFLG + IXFEM
262.AND.
IF (ILAW == 99IGTYP == 14) THEN
265 CALL ANCMSG(MSGID=768,
278 !tag for user material law
279.or..or..or.
IF (ILAW==29 ILAW==30 ILAW==31 ILAW==99) THEN
285 !check compatibility between material law and property
286.and..and..and..and..AND..AND..and.
IF (((IGTYP==43) ((ILAW/=59 ILAW/=83 ILAW/=116 ILAW/=117 ILAW /=120ILAW/=169)
287.eqv..eqv..or.
. (USER_LAW .false. ) ) .true.)
288.or..or..or..and..or.
. ((ILAW==59 ILAW==83 ILAW==116 ILAW==117) IGTYP/=43)
289.and..OR..OR..OR..OR.
. (ILAW==1 (IGTYP==9IGTYP==10IGTYP==11IGTYP==16
290.OR..OR..eqv..eqv.
. IGTYP==17IGTYP==51IGTYP==52) .true.) .true.) THEN
291 CALL ANCMSG(MSGID=658,
293 . ANMODE=ANINFO_BLIND_2,
300 !anisotropic material law not compatible with isotropic property
301.AND.
IF (ILAW == 87 IGTYP /= 9) THEN
302 CALL ANCMSG(MSGID=1110,
303 . MSGTYPE=MSGWARNING,
304 . ANMODE=ANINFO_BLIND_1,
310.AND.
IF (ILAW == 187 IGTYP /= 6) THEN
311 CALL ANCMSG(MSGID=1110,
312 . MSGTYPE=MSGWARNING,
313 . ANMODE=ANINFO_BLIND_1,
320 !rigid material law (obsolete)
321.AND.
IF(ILAW == 13 IRODDL == 0) IRODDL = 1
325 ! compatibility of global material and ply material for type11
330 IDMAT_PLY= IGEO(IPMAT+J,IPID)
331 ILAW_PLY = IPM(2,IDMAT_PLY)
332 IF(ILAW_PLY /= ILAW) THEN
333 CALL ANCMSG(MSGID=1083,
346 !spring type 23 & material compatibility
348 IMID = NINTRI(MID,IPM,NPROPMI,NUMMAT,1)
350.AND..AND..AND.
IF(ILAW /= 108 ILAW /=113 ILAW /=114 ILAW /= 0 ) THEN
351 CALL ANCMSG(MSGID = 1715,
359 ! law70 (/MAT/FOAM_TAB)
360.AND.
IF(ILAW == 70 IGEO(31,IPID) == 1) WRITE(IOUT,2000)
365 !SSP BUFFER + UPWIND + TURB + CHECK + CONVECTION FLAGS
366 CALL ALE_EULER_INIT( MLAW_TAG,IPM,PM,IGEO,TITR,TITR1,TITR2,IGTYP,
367 . ID,ILAW,MID,IMID,PID,IPID,JALE_FROM_PROP,JALE_FROM_MAT,
368 . GLOB_THERM%ITHERM,GLOB_THERM%ITHERM_FE)
373 WRITE(IOUT,'(/a,i10,2a)
')'part:
',ID,',
',TRIM(TITR)
374 WRITE(IOUT,'(a)
') '----
'
377 CHAR_PROP_TYPE='TYPE ?
'
379 WRITE(CHAR_PROP_TYPE(5:7),FMT='(i3)
')IGTYP
380 IF(IGTYP<10)WRITE(CHAR_PROP_TYPE(6:6),FMT='(a1)
') '0
'
382 WRITE(IOUT,'(a,i10,4a)
')' property :
',PID,' (
',TRIM(CHAR_PROP_TYPE),'),
',TRIM(TITR1)
385 CHAR_MAT_TYPE='law ?
'
387 WRITE(CHAR_MAT_TYPE(5:7),FMT='(i3)
')ILAW
388 IF(ILAW<10)WRITE(CHAR_MAT_TYPE(6:6),FMT='(a1)
') '0
'
390 IF( IMID /= 0) WRITE(IOUT,'(a,i10,4a)
')' material :
',MID,' (
',TRIM(CHAR_MAT_TYPE),'),
',TRIM(TITR2)
393 WRITE(IOUT,'(a,i10,2a)
')' subset :
',SID
396.OR.
IF(JALE_FROM_PROP==1 JALE_FROM_MAT==1)THEN
397 WRITE(IOUT,'(a)
')' framework :
ale'
398.OR.
ELSEIF(JALE_FROM_PROP==2 JALE_FROM_MAT==2)THEN
399 WRITE(IOUT,'(a)
')' framework : euler
'
401 WRITE(IOUT,'(a)
')' framework : lagrange
'
406.OR..OR..OR.
. (IGTYP == 1)(IGTYP == 9)(IGTYP == 10)
407.OR..OR..OR.
. (IGTYP == 11)(IGTYP == 16)(IGTYP == 17)
408.OR..OR.
. (IGTYP == 19)(IGTYP == 51)(IGTYP == 52)) THEN
409 WRITE(IOUT,'(a,1pg20.13,2a)
')' virt. thickn:
',THK_PART(I)
412.AND..OR..OR.
IF( THK_PART(I)>ZERO ((IGTYP == 3)(IGTYP == 2)
413.OR..OR..OR.
. (IGTYP == 18)(IGTYP == 4)(IGTYP == 8)
414.OR..OR..OR.
. (IGTYP == 12)(IGTYP == 13)(IGTYP == 23)
415.OR..OR.
. (IGTYP == 25)(IGTYP == 26)(IGTYP == 27))) THEN
416 WRITE(IOUT,'(a,1pg20.13,2a)
')' virt. thickn:
',THK_PART(I)
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)
425 DIAM= (SQR2*VOL)**THIRD
426 WRITE(IOUT,'(a,1pg20.13,2a)
')' sph smoothing length:
',DIAM
445 !Positive Ensure Identify
446 IF(IPART(4,I) == 0) THEN
447 CALL ANCMSG(MSGID=494,MSGTYPE=MSGERROR,ANMODE=ANINFO_BLIND_1,C1=LINE1)
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
465 MULTI_FVM%IS_USED = IS_ASSOCIATED_LAW51
467 IF (MULTI_FVM%IS_USED) THEN
470 ALLOCATE(MULTI_FVM%VEL(3, NUMELS), STAT=stat)
472 ALLOCATE(MULTI_FVM%VEL(3, NUMELQ + NUMELTG), STAT=stat)
474 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='multi_fvm%VEL
')
475 MULTI_FVM%VEL(: ,:) = ZERO
478 IF (XFEMFLG == 0) ICRACK3D = 0
482 IWA(NUMGEO+IPART(1,I)) = 1
487 IF (IWA(I) == 0) CNT = CNT+1
492 IF (IWA(NUMGEO+I) == 0) CNT = CNT+1
499 IDPARTSPH = IGEO(38,IPART(2,I))
500 IF (IDPARTSPH > 0) THEN
501 IGEO(17,IPART(2,IDPARTSPH)) = IGEO(17,IPART(2,I))
507 CALL UDOUBLE(IPART(4,1),LIPART1,NPART,MESS,0,BID)
510 2000 FORMAT(5X,'for law 70
the default
VALUE of qa and qb is 0
' )
subroutine hm_read_part(ipart, pm, geo, ipm, igeo, iwa, thk_part, unitab, lsubmodel, multi_fvm, mlaw_tag, mat_param, glob_therm)