40 1 NIF ,NOM_OPT ,TITR ,UNITAB ,IGRPART ,
41 2 IPART ,NSET ,TAGPRT_FRIC,TABCOUPLEPARTS_FRIC_TMP ,
43 3 MFROT ,IFQ ,XFILTR ,FRICFORM ,
44 4 IFLAG ,ORTHFRIC ,IFRICORTH_TMP,NGRPF ,
45 4 LENGRPF ,LENG ,NOINTF ,LSUBMODEL )
60#include "implicit_f.inc"
68 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
69 INTEGER NOM_OPT(LNOPT1,*)
70 INTEGER NIF ,IFLAG ,MFROT ,IFQ ,FRICFORM ,NSET ,ORTHFRIC , NGRPF,LENG,
71 INTEGER IPART(LIPART1,*) ,TAGPRT_FRIC(*),
72 . TABCOUPLEPARTS_FRIC_TMP(NINTERFRIC,*),IFRICORTH_TMP(NINTERFRIC,*),
75 my_real tabcoef_fric_tmp(ninterfric,*)
76 CHARACTER(LEN=NCHARTITLE)::TITR
78 TYPE (GROUP_) ,
DIMENSION(NGRPART) :: IGRPART
79 TYPE (SUBMODEL_DATA),
DIMENSION(*),
INTENT(IN) :: LSUBMODEL
88 INTEGER I ,J ,L ,IP ,IP1 ,IP2 ,N ,N1 ,N2 , ,NL ,
89 . GRPART1 ,GRPART2 ,IPART1 ,IPART2 ,FLAGP1 ,FLAGP2,FLAGGRP1,
90 . FLAGGRP2 ,IDTGRS1 ,IGRPART1 ,IDTGRS2 ,IGRPART2 ,NCOUPLE ,
91 . IPP ,IPP1 ,IPP2 ,IDIR ,NTAB ,LENF ,GRPN ,GRPN1 ,GRPN2 ,
92 . NP0 ,NGR0 ,K ,NGR ,J1 ,J2 ,STAT ,WORK(70000),NINPUT
93 INTEGER,
DIMENSION(:),
ALLOCATABLE ::
94 . trigrpt ,index ,newgrp ,tagg1 ,tagg2
96 . c1 ,c2 ,c3 ,c4 ,c5 ,c6 ,
alpha ,c11 ,c22 ,c33 ,c44 ,c55 ,c66 ,
97 . fric ,viscf ,fric2 ,viscf2
104 idtgrs1 = -huge(idtgrs1)
105 idtgrs2 = -huge(idtgrs2)
107 is_available = .false.
109 ALLOCATE (trigrpt(leng),stat=stat)
110 ALLOCATE (index(2*leng),stat=stat)
111 ALLOCATE (newgrp(leng+1),stat=stat)
112 ALLOCATE (tagg1(leng),stat=stat)
113 ALLOCATE (tagg2(leng),stat=stat)
115 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,nif),ltitr)
117 nom_opt(1,nif)=nointf
126 IF(orthfric ==0)
THEN
138 CALL hm_get_intv(
'ifric',mfrot,is_available,lsubmodel)
139 CALL hm_get_intv(
'ifiltr',ifq,is_available,lsubmodel)
140 CALL hm_get_intv(
'iform',fricform,is_available,lsubmodel)
151 CALL HM_GET_FLOATV('fric
',FRIC,IS_AVAILABLE,LSUBMODEL,UNITAB)
152 CALL HM_GET_FLOATV('vis_f
',VISCF,IS_AVAILABLE,LSUBMODEL,UNITAB)
156 IF (ALPHA==0.) IFQ = 0
159 IF (FRICFORM==0) FRICFORM = 1
160.AND.
IF (FRICFORM==2IFQ<10) IFQ = IFQ + 10
163 IF (IFQ==10) XFILTR = ONE
164 IF (MOD(IFQ,10)==1) XFILTR = ALPHA
165 IF (MOD(IFQ,10)==2) XFILTR=FOUR*ATAN2(ONE,ZERO) / ALPHA
166 IF (MOD(IFQ,10)==3) XFILTR=FOUR*ATAN2(ONE,ZERO) * ALPHA
167 IF (XFILTR<ZERO) THEN
168 CALL ANCMSG(MSGID=1591, MSGTYPE=MSGERROR, ANMODE=ANINFO_BLIND_1, I1=NOINTF, C1=TITR, R1=ALPHA)
169.AND.
ELSEIF (XFILTR>1MOD(IFQ,10)<=2) THEN
170 CALL ANCMSG(MSGID=1591, MSGTYPE=MSGERROR, ANMODE=ANINFO_BLIND_1, I1=NOINTF, C1=TITR, R1=ALPHA)
181.OR..AND.
IF((FRIC/=ZEROMFROT/=0)VISCF==ZERO)VISCF=ONE
183 IF (FRICFORM==2)VISCF=ZERO
185 TABCOEF_FRIC_TMP(NIF,1) = FRIC
186 TABCOEF_FRIC_TMP(NIF,2) = VISCF
188 TABCOEF_FRIC_TMP(NIF,3) = C1
189 TABCOEF_FRIC_TMP(NIF,4) = C2
190 TABCOEF_FRIC_TMP(NIF,5) = C3
191 TABCOEF_FRIC_TMP(NIF,6) = C4
192 TABCOEF_FRIC_TMP(NIF,7) = C5
193 TABCOEF_FRIC_TMP(NIF,8) = C6
201 WRITE(IOUT,1500) NOINTF, TRIM(TITR)
202 IF(FRICFORM ==2) THEN
218 WRITE(IOUT,1502)MOD(IFQ,10), XFILTR
222 WRITE(IOUT,3503) FRIC
223 IF(FRICFORM /= 2) WRITE(IOUT,3504) VISCF
225 WRITE(IOUT,1504) FRIC,C1,C2,C3,C4,C5,C6
227 WRITE(IOUT,1505) FRIC,C1,C2,C3,C4,C5,C6
229 WRITE(IOUT,1506) C1,C2,C3,C4,C5,C6
231 WRITE(IOUT,1514) FRIC,C1,C2
244 IF(IFLAG==1) WRITE(IOUT,1507)
247 CALL HM_GET_INTV('n
',NINPUT,IS_AVAILABLE,LSUBMODEL)
253 CALL HM_GET_INT_ARRAY_INDEX('grpart_id1
',GRPART1,NL,IS_AVAILABLE,LSUBMODEL)
254 CALL HM_GET_INT_ARRAY_INDEX('grpart_id2
',GRPART2,NL,IS_AVAILABLE,LSUBMODEL)
255 CALL HM_GET_INT_ARRAY_INDEX('part_id1
',IPART1,NL,IS_AVAILABLE,LSUBMODEL)
256 CALL HM_GET_INT_ARRAY_INDEX('part_id2
',IPART2,NL,IS_AVAILABLE,LSUBMODEL)
257 CALL HM_GET_INT_ARRAY_INDEX('idir
',IDIR,NL,IS_AVAILABLE,LSUBMODEL)
261 CALL HM_GET_FLOAT_ARRAY_INDEX('c1_part
',C1,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
262 CALL HM_GET_FLOAT_ARRAY_INDEX('c2_part
',C2,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
263 CALL HM_GET_FLOAT_ARRAY_INDEX('c3_part
',C3,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
264 CALL HM_GET_FLOAT_ARRAY_INDEX('c4_part
',C4,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
265 CALL HM_GET_FLOAT_ARRAY_INDEX('c5_part
',C5,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
266 CALL HM_GET_FLOAT_ARRAY_INDEX('c6_part
',C6,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
267 CALL HM_GET_FLOAT_ARRAY_INDEX('fric_part
',FRIC,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
268 CALL HM_GET_FLOAT_ARRAY_INDEX('vis_f_part
',VISCF,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
272 CALL HM_GET_FLOAT_ARRAY_INDEX('c1_2
',C11,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
273 CALL HM_GET_FLOAT_ARRAY_INDEX('c2_2
',C22,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
274 CALL HM_GET_FLOAT_ARRAY_INDEX('c3_2
',C33,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
275 CALL HM_GET_FLOAT_ARRAY_INDEX('c4_2
',C44,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
276 CALL HM_GET_FLOAT_ARRAY_INDEX('c5_2
',C55,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
277 CALL HM_GET_FLOAT_ARRAY_INDEX('c6_2
',C66,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
278 CALL HM_GET_FLOAT_ARRAY_INDEX('fric_2
',FRIC2,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
279 CALL HM_GET_FLOAT_ARRAY_INDEX('vis_f_2
',VISCF2,NL,IS_AVAILABLE,LSUBMODEL,UNITAB)
293 IF(IPART1 == IPART(4,N))THEN
301 CALL ANCMSG(MSGID=1590,
303 . ANMODE=ANINFO_BLIND_1,
313 IF(IPART2 == IPART(4,N))THEN
321 CALL ANCMSG(MSGID=1590,
323 . ANMODE=ANINFO_BLIND_1,
335 + NGRBRIC+NGRQUAD+NGRSHEL+NGRSH3N+NGRTRUS+NGRBEAM+NGRSPRI
337 IF (IGRPART(N)%ID == GRPART1) THEN
343 IF(FLAGGRP1 == 0) THEN
344 CALL ANCMSG(MSGID=1590,
346 . ANMODE=ANINFO_BLIND_1,
356 + NGRBRIC+NGRQUAD+NGRSHEL+NGRSH3N+NGRTRUS+NGRBEAM+NGRSPRI
358 IF (IGRPART(N)%ID == GRPART2) THEN
364 IF(FLAGGRP2 == 0) THEN
365 CALL ANCMSG(MSGID=1590,
367 . ANMODE=ANINFO_BLIND_1,
378.OR..AND.
IF((FRIC/=ZEROMFROT/=0)VISCF==ZERO)VISCF=ONE
380 IF (FRICFORM==2)VISCF=ZERO
384.OR..AND.
IF((FRIC2/=ZEROMFROT/=0)VISCF2==ZERO)VISCF2=ONE
386 IF (FRICFORM==2)VISCF2=ZERO
388.OR..AND.
IF((FRIC2/=ZEROMFROT/=0)VISCF2==ZERO)VISCF2=ONE
390 IF (FRICFORM==2)VISCF2=ZERO
398.AND.
IF(FLAGP1 /= 0FLAGP2 /= 0)THEN
401 IF(TAGPRT_FRIC(N1) ==0 ) THEN
403 TAGPRT_FRIC(N1)=NGRPF ! tag parts
406! If part is already read : look to group of parts belonging and it and split it to ensure group of parts are not lapped
407 GRPN = TAGPRT_FRIC(N1)
408 IF(LENGRPF(GRPN)/=1) THEN
410 TAGPRT_FRIC(N1)=NGRPF ! tag parts
412 LENGRPF(GRPN) =LENGRPF(GRPN) - 1
415 IF(TAGPRT_FRIC(N2) ==0 ) THEN
417 TAGPRT_FRIC(N2)=NGRPF ! tag parts
420! If part is already read : look to group of parts belonging and it and split it to ensure group of parts are not lapped
421 GRPN = TAGPRT_FRIC(N2)
422 IF(LENGRPF(GRPN)/=1) THEN
424 TAGPRT_FRIC(N2)=NGRPF ! tag parts
426 LENGRPF(GRPN) =LENGRPF(GRPN) - 1
433 GRPN1 = TAGPRT_FRIC(N1)
434 GRPN2 = TAGPRT_FRIC(N2)
436 IF(GRPN1 > GRPN2 ) THEN
442 NCOUPLE = NCOUPLE + 1
443 TABCOUPLEPARTS_FRIC_TMP(NIF,NCOUPLE) = GRPN1
444 NCOUPLE = NCOUPLE + 1
445 TABCOUPLEPARTS_FRIC_TMP(NIF,NCOUPLE) = GRPN2
447 NTAB = LENF*8*(NSET-1)+8
448 TABCOEF_FRIC_TMP(NIF,NTAB+1) = FRIC
449 TABCOEF_FRIC_TMP(NIF,NTAB+2) = VISCF
451 TABCOEF_FRIC_TMP(NIF,NTAB+3) = C1
452 TABCOEF_FRIC_TMP(NIF,NTAB+4) = C2
453 TABCOEF_FRIC_TMP(NIF,NTAB+5) = C3
454 TABCOEF_FRIC_TMP(NIF,NTAB+6) = C4
455 TABCOEF_FRIC_TMP(NIF,NTAB+7) = C5
456 TABCOEF_FRIC_TMP(NIF,NTAB+8) = C6
458 IFRICORTH_TMP(NIF,NSET) = IDIR
461 TABCOEF_FRIC_TMP(NIF,NTAB+1) = FRIC2
462 TABCOEF_FRIC_TMP(NIF,NTAB+2) = VISCF2
464 TABCOEF_FRIC_TMP(NIF,NTAB+3) = C11
465 TABCOEF_FRIC_TMP(NIF,NTAB+4) = C22
466 TABCOEF_FRIC_TMP(NIF,NTAB+5) = C33
467 TABCOEF_FRIC_TMP(NIF,NTAB+6) = C44
468 TABCOEF_FRIC_TMP(NIF,NTAB+7) = C55
469 TABCOEF_FRIC_TMP(NIF,NTAB+8) = C66
475 WRITE (IOUT,2001) IPART(4,N1),IPART(4,N2)
479 WRITE(IOUT,3503) FRIC
480 IF(FRICFORM /= 2) WRITE(IOUT,3504) VISCF
482 WRITE(IOUT,1504) FRIC,C1,C2,C3,C4,C5,C6
484 WRITE(IOUT,1505)FRIC,C1,C2,C3,C4,C5,C6
486 WRITE(IOUT,1506)C1,C2,C3,C4,C5,C6
488 WRITE(IOUT,1514) FRIC,C1,C2
494 WRITE(IOUT,3503) FRIC
495 IF(FRICFORM /= 2) WRITE(IOUT,3504) VISCF
497 WRITE(IOUT,1504) FRIC,C1,C2,C3,C4,C5,C6
499 WRITE(IOUT,1505)FRIC,C1,C2,C3,C4,C5,C6
501 WRITE(IOUT,1506)C1,C2,C3,C4,C5,C6
503 WRITE(IOUT,1514) FRIC,C1,C2
507 WRITE(IOUT,3503) FRIC2
508 IF(FRICFORM /= 2) WRITE(IOUT,3504) VISCF2
510 WRITE(IOUT,1504) FRIC2,C11,C22,C33,C44,C55,C66
512 WRITE(IOUT,1505)FRIC2,C11,C22,C33,C44,C55,C66
514 WRITE(IOUT,1506)C11,C22,C33,C44,C55,C66
516 WRITE(IOUT,1514) FRIC2,C11,C22
524.AND.
IF(FLAGP1 /= 0FLAGGRP2 /= 0)THEN
527 IF(TAGPRT_FRIC(N1) ==0 ) THEN
529 TAGPRT_FRIC(N1)=NGRPF ! tag parts
532 GRPN = TAGPRT_FRIC(N1)
533 IF(LENGRPF(GRPN)/=1) THEN
536 TAGPRT_FRIC(N1)=NGRPF ! tag parts
537 LENGRPF(GRPN) =LENGRPF(GRPN) - 1
542 DO I=1,IGRPART(IDTGRS2)%NENTITY
543 IP=IGRPART(IDTGRS2)%ENTITY(I)
544 IF(TAGPRT_FRIC(IP) ==0 ) THEN
548 IF(NP0 == IGRPART(IDTGRS2)%NENTITY) THEN
551 DO I=1,IGRPART(IDTGRS2)%NENTITY
552 IP=IGRPART(IDTGRS2)%ENTITY(I)
553 TAGPRT_FRIC(IP)=NGRPF ! tag parts
562 DO I=1,IGRPART(IDTGRS2)%NENTITY
563 IP=IGRPART(IDTGRS2)%ENTITY(I)
564 IF(TAGPRT_FRIC(IP) ==0 ) TAGPRT_FRIC(IP) = NGRPF
569 DO I=1,IGRPART(IDTGRS2)%NENTITY
570 IP=IGRPART(IDTGRS2)%ENTITY(I)
571 IF(TAGPRT_FRIC(IP)==0) TAGPRT_FRIC(IP)=NGRPF ! tag parts
572 TRIGRPT(I) = TAGPRT_FRIC(IP)
575 CALL MY_ORDERS( 0, WORK, TRIGRPT, INDEX, IGRPART(IDTGRS2)%NENTITY , 1)
577 NGR0 = TRIGRPT(INDEX(1))
582 DO I=2,IGRPART(IDTGRS2)%NENTITY
583 NGR = TRIGRPT(INDEX(I))
585 IF(LENGRPF(NGR0) /= I-NEWGRP(J)-1) THEN
593 IF(LENGRPF(NGR0) /= IGRPART(IDTGRS2)%NENTITY-NEWGRP(J)) THEN
600 LENGRPF(NGRPF) = NEWGRP( K+1) - NEWGRP( K)
601 IP=IGRPART(IDTGRS2)%ENTITY(INDEX(NEWGRP( K)+1))
602 NGR0 = TAGPRT_FRIC(IP)
603 LENGRPF(NGR0) =LENGRPF(NGR0) -LENGRPF(NGRPF)
604 DO I =NEWGRP( K)+1,NEWGRP( K+1)
605 IP=IGRPART(IDTGRS2)%ENTITY(INDEX(I))
606 TAGPRT_FRIC(IP) =NGRPF
617 GRPN1 = TAGPRT_FRIC(N1)
619! If part or group of parts is already read : look to group of parts belonging and it and split it to ensure group of parts are not lapped
623 DO I=1,IGRPART(IDTGRS2)%NENTITY
624 IP=IGRPART(IDTGRS2)%ENTITY(I)
625 TRIGRPT(I) = TAGPRT_FRIC(IP)
628 CALL MY_ORDERS( 0, WORK, TRIGRPT, INDEX, IGRPART(IDTGRS2)%NENTITY , 1)
630 NGR0 = TRIGRPT(INDEX(1))
633 DO I=2,IGRPART(IDTGRS2)%NENTITY
634 NGR = TRIGRPT(INDEX(I))
656 NCOUPLE = NCOUPLE + 1
657 TABCOUPLEPARTS_FRIC_TMP(NIF,NCOUPLE) = IPP
658 NCOUPLE = NCOUPLE + 1
659 TABCOUPLEPARTS_FRIC_TMP(NIF,NCOUPLE) = IP
661 NTAB = LENF*8*(NSET-1)+8
662 TABCOEF_FRIC_TMP(NIF,NTAB+1) = FRIC
663 TABCOEF_FRIC_TMP(NIF,NTAB+2) = VISCF
665 TABCOEF_FRIC_TMP(NIF,NTAB+3) = C1
666 TABCOEF_FRIC_TMP(NIF,NTAB+4) = C2
667 TABCOEF_FRIC_TMP(NIF,NTAB+5) = C3
668 TABCOEF_FRIC_TMP(NIF,NTAB+6) = C4
669 TABCOEF_FRIC_TMP(NIF,NTAB+7) = C5
670 TABCOEF_FRIC_TMP(NIF,NTAB+8) = C6
672 IFRICORTH_TMP(NIF,NSET) = IDIR
678 TABCOEF_FRIC_TMP(NIF,NTAB+1) = FRIC2
679 TABCOEF_FRIC_TMP(NIF,NTAB+2) = VISCF2
681 TABCOEF_FRIC_TMP(NIF,NTAB+3) = C11
682 TABCOEF_FRIC_TMP(NIF,NTAB+4) = C22
683 TABCOEF_FRIC_TMP(NIF,NTAB+5) = C33
684 TABCOEF_FRIC_TMP(NIF,NTAB+6) = C44
685 TABCOEF_FRIC_TMP(NIF,NTAB+7) = C55
686 TABCOEF_FRIC_TMP(NIF,NTAB+8) = C66
698 . IPART(4,N1),GRPART2
702 WRITE(IOUT,3503) FRIC
703 IF(FRICFORM /= 2) WRITE(IOUT,3504) VISCF
705 WRITE(IOUT,1504) FRIC,C1,C2,C3,C4,C5,C6
707 WRITE(IOUT,1505)FRIC,C1,C2,C3,C4,C5,C6
709 WRITE(IOUT,1506)C1,C2,C3,C4,C5,C6
711 WRITE(IOUT,1514) FRIC,C1,C2
717 WRITE(IOUT,3503) FRIC
718 IF(FRICFORM /= 2) WRITE(IOUT,3504) VISCF
720 WRITE(IOUT,1504) FRIC,C1,C2,C3,C4,C5,C6
722 WRITE(IOUT,1505)FRIC,C1,C2,C3,C4,C5,C6
724 WRITE(IOUT,1506)C1,C2,C3,C4,C5,C6
726 WRITE(IOUT,1514) FRIC,C1,C2
730 WRITE(IOUT,3503) FRIC2
731 IF(FRICFORM /= 2) WRITE(IOUT,3504) VISCF2
733 WRITE(IOUT,1504) FRIC2,C11,C22,C33,C44,C55,C66
735 WRITE(IOUT,1505)FRIC2,C11,C22,C33,C44,C55,C66
737 WRITE(IOUT,1506)C11,C22,C33,C44,C55,C66
739 WRITE(IOUT,1514) FRIC2,C11,C22
746.AND.
IF(FLAGP2 /= 0FLAGGRP1 /= 0)THEN
749 IF(TAGPRT_FRIC(N2) ==0 ) THEN
751 TAGPRT_FRIC(N2)=NGRPF ! tag parts
754 GRPN = TAGPRT_FRIC(N2)
755 IF(LENGRPF(GRPN)/=1) THEN
758 TAGPRT_FRIC(N2)=NGRPF ! tag parts
759 LENGRPF(GRPN) =LENGRPF(GRPN) - 1
764 DO I=1,IGRPART(IDTGRS1)%NENTITY
765 IP=IGRPART(IDTGRS1)%ENTITY(I)
766 IF(TAGPRT_FRIC(IP) ==0 ) THEN
773 IF(NP0 == IGRPART(IDTGRS1)%NENTITY) THEN
776 DO I=1,IGRPART(IDTGRS1)%NENTITY
777 IP=IGRPART(IDTGRS1)%ENTITY(I)
778 TAGPRT_FRIC(IP)=NGRPF ! tag parts
785 DO I=1,IGRPART(IDTGRS1)%NENTITY
786 IP=IGRPART(IDTGRS1)%ENTITY(I)
787 IF(TAGPRT_FRIC(IP) ==0 ) TAGPRT_FRIC(IP) = NGRPF
792 DO I=1,IGRPART(IDTGRS1)%NENTITY
793 IP=IGRPART(IDTGRS1)%ENTITY(I)
794 IF(TAGPRT_FRIC(IP)==0) TAGPRT_FRIC(IP)=NGRPF ! tag parts
795 TRIGRPT(I) = TAGPRT_FRIC(IP)
798 CALL MY_ORDERS( 0, WORK, TRIGRPT, INDEX, IGRPART(IDTGRS1)%NENTITY , 1)
800 NGR0 = TRIGRPT(INDEX(1))
804 DO I=2,IGRPART(IDTGRS1)%NENTITY
805 NGR = TRIGRPT(INDEX(I))
807 IF(LENGRPF(NGR0) /= I-NEWGRP(J)-1) THEN
816 IF(LENGRPF(NGR0) /= IGRPART(IDTGRS1)%NENTITY-NEWGRP(J)) THEN
825 LENGRPF(NGRPF) = NEWGRP( K+1) - NEWGRP( K)
826 IP=IGRPART(IDTGRS1)%ENTITY(INDEX(NEWGRP( K)+1))
827 NGR0 = TAGPRT_FRIC(IP)
828 LENGRPF(NGR0) =LENGRPF(NGR0) -LENGRPF(NGRPF)
829 DO I =NEWGRP( K)+1,NEWGRP( K+1)
830 IP=IGRPART(IDTGRS1)%ENTITY(INDEX(I))
831 TAGPRT_FRIC(IP) =NGRPF
840 GRPN2 = TAGPRT_FRIC(N2)
845 DO I=1,IGRPART(IDTGRS1)%NENTITY
846 IP=IGRPART(IDTGRS1)%ENTITY(I)
847 TRIGRPT(I) = TAGPRT_FRIC(IP)
850 CALL MY_ORDERS( 0, WORK, TRIGRPT, INDEX, IGRPART(IDTGRS1)%NENTITY , 1)
852 NGR0 = TRIGRPT(INDEX(1))
855 DO I=2,IGRPART(IDTGRS1)%NENTITY
856 NGR = TRIGRPT(INDEX(I))
876 NCOUPLE = NCOUPLE + 1
877 TABCOUPLEPARTS_FRIC_TMP(NIF,NCOUPLE) = IPP
878 NCOUPLE = NCOUPLE + 1
879 TABCOUPLEPARTS_FRIC_TMP(NIF,NCOUPLE) = IP
881 NTAB = LENF*8*(NSET-1)+8
882 TABCOEF_FRIC_TMP(NIF,NTAB+1) = FRIC
883 TABCOEF_FRIC_TMP(NIF,NTAB+2) = VISCF
885 TABCOEF_FRIC_TMP(NIF,NTAB+3) = C1
886 TABCOEF_FRIC_TMP(NIF,NTAB+4) = C2
887 TABCOEF_FRIC_TMP(NIF,NTAB+5) = C3
888 TABCOEF_FRIC_TMP(NIF,NTAB+6) = C4
889 TABCOEF_FRIC_TMP(NIF,NTAB+7) = C5
890 TABCOEF_FRIC_TMP(NIF,NTAB+8) = C6
892 IFRICORTH_TMP(NIF,NSET) = IDIR
897 TABCOEF_FRIC_TMP(NIF,NTAB+1) = FRIC2
898 TABCOEF_FRIC_TMP(NIF,NTAB+2) = VISCF2
899 TABCOEF_FRIC_TMP(NIF,NTAB+3) = C11
900 TABCOEF_FRIC_TMP(NIF,NTAB+4) = C22
901 TABCOEF_FRIC_TMP(NIF,NTAB+5) = C33
902 TABCOEF_FRIC_TMP(NIF,NTAB+6) = C44
903 TABCOEF_FRIC_TMP(NIF,NTAB+7) = C55
904 TABCOEF_FRIC_TMP(NIF,NTAB+8) = C66
915 . GRPART1,IPART(4,N2)
919 WRITE(IOUT,3503) FRIC
920 IF(FRICFORM /= 2) WRITE(IOUT,3504) VISCF
922 WRITE(IOUT,1504) FRIC,C1,C2,C3,C4,C5,C6
924 WRITE(IOUT,1505)FRIC,C1,C2,C3,C4,C5,C6
926 WRITE(IOUT,1506)C1,C2,C3,C4,C5,C6
928 WRITE(IOUT,1514) FRIC,C1,C2
934 WRITE(IOUT,3503) FRIC
935 IF(FRICFORM /= 2) WRITE(IOUT,3504) VISCF
937 WRITE(IOUT,1504) FRIC,C1,C2,C3,C4,C5,C6
939 WRITE(IOUT,1505)FRIC,C1,C2,C3,C4,C5,C6
941 WRITE(IOUT,1506)C1,C2,C3,C4,C5,C6
943 WRITE(IOUT,1514) FRIC,C1,C2
947 WRITE(IOUT,3503) FRIC2
948 IF(FRICFORM /= 2) WRITE(IOUT,3504) VISCF2
950 WRITE(IOUT,1504) FRIC2,C11,C22,C33,C44,C55,C66
952 WRITE(IOUT,1505)FRIC2,C11,C22,C33,C44,C55,C66
954 WRITE(IOUT,1506)C11,C22,C33,C44,C55,C66
956 WRITE(IOUT,1514) FRIC2,C11,C22
963.AND.
IF(FLAGGRP1 /= 0FLAGGRP2 /=0)THEN
967 DO I=1,IGRPART(IDTGRS1)%NENTITY
968 IP=IGRPART(IDTGRS1)%ENTITY(I)
969 IF(TAGPRT_FRIC(IP) ==0 ) THEN
976 IF(NP0 == IGRPART(IDTGRS1)%NENTITY) THEN
979 DO I=1,IGRPART(IDTGRS1)%NENTITY
980 IP=IGRPART(IDTGRS1)%ENTITY(I)
981 TAGPRT_FRIC(IP)=NGRPF ! tag parts
988 DO I=1,IGRPART(IDTGRS1)%NENTITY
989 IP=IGRPART(IDTGRS1)%ENTITY(I)
990 IF(TAGPRT_FRIC(IP) ==0 ) TAGPRT_FRIC(IP) = NGRPF
995 DO I=1,IGRPART(IDTGRS1)%NENTITY
996 IP=IGRPART(IDTGRS1)%ENTITY(I)
997 IF(TAGPRT_FRIC(IP)==0) TAGPRT_FRIC(IP)=NGRPF ! tag parts
998 TRIGRPT(I) = TAGPRT_FRIC(IP)
1001 CALL MY_ORDERS( 0, WORK, TRIGRPT, INDEX, IGRPART(IDTGRS1)%NENTITY , 1)
1003 NGR0 = TRIGRPT(INDEX(1))
1005 NEWGRP(1:LENG+1) = 0
1007 DO I=2,IGRPART(IDTGRS1)%NENTITY
1008 NGR = TRIGRPT(INDEX(I))
1010 IF(LENGRPF(NGR0) /= I-NEWGRP(J)-1) THEN
1019 IF(LENGRPF(NGR0) /= IGRPART(IDTGRS1)%NENTITY-NEWGRP(J)) THEN
1026 IF(TAGG1(K)==1) THEN
1028 LENGRPF(NGRPF) = NEWGRP( K+1) - NEWGRP( K)
1029 IP=IGRPART(IDTGRS1)%ENTITY(INDEX(NEWGRP( K)+1))
1030 NGR0 = TAGPRT_FRIC(IP)
1031 LENGRPF(NGR0) =LENGRPF(NGR0) -LENGRPF(NGRPF)
1032 DO I =NEWGRP( K)+1,NEWGRP( K+1)
1033 IP=IGRPART(IDTGRS1)%ENTITY(INDEX(I))
1034 TAGPRT_FRIC(IP) =NGRPF
1041 DO I=1,IGRPART(IDTGRS2)%NENTITY
1042 IP=IGRPART(IDTGRS2)%ENTITY(I)
1043 IF(TAGPRT_FRIC(IP) ==0 ) THEN
1047 IF(NP0 == IGRPART(IDTGRS2)%NENTITY) THEN
1049 LENGRPF(NGRPF) = NP0
1050 DO I=1,IGRPART(IDTGRS2)%NENTITY
1051 IP=IGRPART(IDTGRS2)%ENTITY(I)
1052 TAGPRT_FRIC(IP)=NGRPF ! tag parts
1061 LENGRPF(NGRPF) = NP0
1062 DO I=1,IGRPART(IDTGRS2)%NENTITY
1063 IP=IGRPART(IDTGRS2)%ENTITY(I)
1064 IF(TAGPRT_FRIC(IP) ==0 ) TAGPRT_FRIC(IP) = NGRPF
1069 DO I=1,IGRPART(IDTGRS2)%NENTITY
1070 IP=IGRPART(IDTGRS2)%ENTITY(I)
1071 IF(TAGPRT_FRIC(IP)==0) TAGPRT_FRIC(IP)=NGRPF ! tag parts
1072 TRIGRPT(I) = TAGPRT_FRIC(IP)
1075 CALL MY_ORDERS( 0, WORK, TRIGRPT, INDEX, IGRPART(IDTGRS2)%NENTITY , 1)
1077 NGR0 = TRIGRPT(INDEX(1))
1079 NEWGRP(1:LENG+1) = 0
1082 DO I=2,IGRPART(IDTGRS2)%NENTITY
1083 NGR = TRIGRPT(INDEX(I))
1085 IF(LENGRPF(NGR0) /= I-NEWGRP(J)-1) THEN
1093 IF(LENGRPF(NGR0) /= IGRPART(IDTGRS2)%NENTITY-NEWGRP(J)) THEN
1098 IF(TAGG2(K)==1) THEN
1100 LENGRPF(NGRPF) = NEWGRP( K+1) - NEWGRP( K)
1101 IP=IGRPART(IDTGRS2)%ENTITY(INDEX(NEWGRP( K)+1))
1102 NGR0 = TAGPRT_FRIC(IP)
1103 LENGRPF(NGR0) =LENGRPF(NGR0) -LENGRPF(NGRPF)
1104 DO I =NEWGRP( K)+1,NEWGRP( K+1)
1105 IP=IGRPART(IDTGRS2)%ENTITY(INDEX(I))
1106 TAGPRT_FRIC(IP) =NGRPF
1114 IF(IFLAG == 1 ) THEN
1120 DO I=1,IGRPART(IDTGRS1)%NENTITY
1121 IP=IGRPART(IDTGRS1)%ENTITY(I)
1122 TRIGRPT(I) = TAGPRT_FRIC(IP)
1125 CALL MY_ORDERS( 0, WORK, TRIGRPT, INDEX, IGRPART(IDTGRS1)%NENTITY , 1)
1127 NGR0 = TRIGRPT(INDEX(1))
1130 DO I=2,IGRPART(IDTGRS1)%NENTITY
1131 NGR = TRIGRPT(INDEX(I))
1143 DO I=1,IGRPART(IDTGRS2)%NENTITY
1144 IP=IGRPART(IDTGRS2)%ENTITY(I)
1145 TRIGRPT(I) = TAGPRT_FRIC(IP)
1148 CALL MY_ORDERS( 0, WORK, TRIGRPT, INDEX, IGRPART(IDTGRS2)%NENTITY , 1)
1150 NGR0 = TRIGRPT(INDEX(1))
1153 DO I=2,IGRPART(IDTGRS2)%NENTITY
1154 NGR = TRIGRPT(INDEX(I))
1167 IF(GRPN1 > GRPN2 ) THEN
1177 NCOUPLE = NCOUPLE + 1
1178 TABCOUPLEPARTS_FRIC_TMP(NIF,NCOUPLE) = IPP1
1179 NCOUPLE = NCOUPLE + 1
1180 TABCOUPLEPARTS_FRIC_TMP(NIF,NCOUPLE) = IPP2
1182 NTAB = LENF*8*(NSET-1)+8
1183 TABCOEF_FRIC_TMP(NIF,NTAB+1) = FRIC
1184 TABCOEF_FRIC_TMP(NIF,NTAB+2) = VISCF
1186 TABCOEF_FRIC_TMP(NIF,NTAB+3) = C1
1187 TABCOEF_FRIC_TMP(NIF,NTAB+4) = C2
1188 TABCOEF_FRIC_TMP(NIF,NTAB+5) = C3
1189 TABCOEF_FRIC_TMP(NIF,NTAB+6) = C4
1190 TABCOEF_FRIC_TMP(NIF,NTAB+7) = C5
1191 TABCOEF_FRIC_TMP(NIF,NTAB+8) = C6
1193 IFRICORTH_TMP(NIF,NSET) = IDIR
1198 TABCOEF_FRIC_TMP(NIF,NTAB+1) = FRIC2
1199 TABCOEF_FRIC_TMP(NIF,NTAB+2) = VISCF2
1201 TABCOEF_FRIC_TMP(NIF,NTAB+3) = C11
1202 TABCOEF_FRIC_TMP(NIF,NTAB+4) = C22
1203 TABCOEF_FRIC_TMP(NIF,NTAB+5) = C33
1204 TABCOEF_FRIC_TMP(NIF,NTAB+6) = C44
1205 TABCOEF_FRIC_TMP(NIF,NTAB+7) = C55
1206 TABCOEF_FRIC_TMP(NIF,NTAB+8) = C66
1217 IF(IFLAG == 1 ) THEN
1223 WRITE(IOUT,3503) FRIC
1224 IF(FRICFORM /= 2) WRITE(IOUT,3504) VISCF
1225 ELSEIF(MFROT==1)THEN
1226 WRITE(IOUT,1504) FRIC,C1,C2,C3,C4,C5,C6
1227 ELSEIF(MFROT==2)THEN
1228 WRITE(IOUT,1505)FRIC,C1,C2,C3,C4,C5,C6
1229 ELSEIF(MFROT==3)THEN
1230 WRITE(IOUT,1506)C1,C2,C3,C4,C5,C6
1231 ELSEIF(MFROT==4)THEN
1232 WRITE(IOUT,1514) FRIC,C1,C2
1238 WRITE(IOUT,3503) FRIC
1239 IF(FRICFORM /= 2) WRITE(IOUT,3504) VISCF
1240 ELSEIF(MFROT==1)THEN
1241 WRITE(IOUT,1504) FRIC,C1,C2,C3,C4,C5,C6
1242 ELSEIF(MFROT==2)THEN
1243 WRITE(IOUT,1505)FRIC,C1,C2,C3,C4,C5,C6
1244 ELSEIF(MFROT==3)THEN
1245 WRITE(IOUT,1506)C1,C2,C3,C4,C5,C6
1246 ELSEIF(MFROT==4)THEN
1247 WRITE(IOUT,1514) FRIC,C1,C2
1251 WRITE(IOUT,3503) FRIC2
1252 IF(FRICFORM /= 2) WRITE(IOUT,3504) VISCF2
1253 ELSEIF(MFROT==1)THEN
1254 WRITE(IOUT,1504) FRIC2,C11,C22,C33,C44,C55,C66
1255 ELSEIF(MFROT==2)THEN
1256 WRITE(IOUT,1505)FRIC2,C11,C22,C33,C44,C55,C66
1257 ELSEIF(MFROT==3)THEN
1258 WRITE(IOUT,1506)C11,C22,C33,C44,C55,C66
1259 ELSEIF(MFROT==4)THEN
1260 WRITE(IOUT,1514) FRIC2,C11,C22
1272 DEALLOCATE (TRIGRPT,INDEX,NEWGRP,TAGG1,TAGG2)
1279 1500 FORMAT(/1X,' friction
INTERFACE model number :
',I10,1X,A/
1280 . 1X,' -------------------------------
'/)
1281 1501 FORMAT( /1X,' default values
' /
1282 . 1X,' --------------
' )
1285 . ' friction filtering flag. . . . . . . . .
',I10/,
1286 . ' filtering factor . . . . . . . . . . . .
',1PG20.13/)
1288 . ' friction model 0 (coulomb law)
')
1290 . ' friction coefficient . . . . . . . . . .
',1PG20.13/)
1292 . ' friction critical
damping factor. . . . .
',1PG20.13/)
1294 . ' friction model 1 (viscous polynomial)
'/
1295 . ' mu = muo + c1 p + c2 v + c3 pv + c4 p^2 + c5 v^2
'/)
1297 . ' muo. . . . . . . . . . . . . . . . . . .
',1PG20.13/,
1298 . ' c1 . . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1299 .
' C2 . . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1300 .
' C3 . . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1301 .
' C4 . . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1302 .
' C5 . . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1303 .
' TANGENTIAL PRESSURE LIMIT. . .. . . . . .',1pg20.13/)
1305 .
' FRICTION MODEL 2 (Darmstad Law) :'/
1306 .
' MU = MUo+c1*exp(c2*v)*p^2+c3*exp(c4*v)*p+c5*exp(c6*v)')
1308 .
' Muo. . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1309 .
' C1 . . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1310 .
' C2 . . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1311 .
' C3 . . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1312 .
' C4 . . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1313 .
' C5 . . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1314 .
' C6 . . . . . . . . . . . . . . . . . . . ',1pg20.13/)
1316 .
' FRICTION MODEL 3 (Renard law) ')
1318 .
' C1 . . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1319 .
' C2 . . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1320 .
' C3 . . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1321 .
' C4 . . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1322 .
' C5 . . . . . . . . . . . . . . . . . . . ',1pg20.13/,
1323 .
' C6 . . . . . . . . . . . . . . . . . . . ',1pg20.13/)
1325 .
' EXPONENTIAL DECAY FRICTION LAW '/
1326 .
' MU = c1+(MUo-c1)*exp(-c2*v)')
1328 .
' STATIC COEFFICIENT MUo . . . . . . . . . ',1pg20.13/,
1329 .
' DYNAMIC COEFFICIENT C1 . . . . . . . . . ',1pg20.13/,
1330 .
' EXPONENTIAL DECAY COEFFICIENT C2 . . . . ',1pg20.13/)
1336 .
' PART 1 . . . . . . . . . . . . . . . . . ',i10/,
1337 ' PART 2 . . . . . . . . . . . . . . . . . ',i10)
1339 .
' GR_PART 1 . . . . . . . . . . . . . . . .',i10/,
1340 .
' PART 2 . . . . . . . . . . . . . . . . . ',i10)
1342 .
' PART 1 . . . . . . . . . . . . . . . . . ',i10/,
1343 .
' GR_PART 2 . . . . . . . . . . . . . . . .',i10)
1345 .
' GR_PART 1 . . . . . . . . . . . . . . . . ',i10/,
1346 .
' GR_PART 2 . . . . . . . . . . . . . . . . ',i10)
1349 1507
FORMAT( /1x,
' FRICTION COEFFICIENTS TABLE ' /
1350 . 1x,
' --------------------------- '/)
1352 1508
FORMAT(
' FRICTION FORMULATION: INCREMENTAL (STIFFNESS) ',
1354 1509
FORMAT(
' FRICTION FORMULATION: TOTAL (VISCOUS) ',
1357 . ' isotropic friction
')
1359 . ' orthotropic friction
')
1361 . ' friction direction 1 :
')
1363 . ' friction direction 2 :
')
subroutine hm_read_friction(nif, nom_opt, titr, unitab, igrpart, ipart, nset, tagprt_fric, tabcoupleparts_fric_tmp, tabcoef_fric_tmp, mfrot, ifq, xfiltr, fricform, iflag, orthfric, ifricorth_tmp, ngrpf, lengrpf, leng, nointf, lsubmodel)