c20227
C C20227 SOURCE PV 20/03/24 21:15:34 10554 SUBROUTINE C20227 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C************************************************************************ C Ce sp transforme des elemnts quadratique d'un type pris C dans la liste ci-dessous C SEG3 TRI6 QUA8 CU20 PR15 TE10 PY13 C 3 6 10 15 17 24 26 C C en les éléments correspondant quadratique complet de la liste C ci-dessous C C SEG3 TRI7 QUA9 CU27 PR21 TE15 PY19 C 3 7 11 33 34 35 36 C************************************************************************ -INC SMELEME -INC SMCOORD -INC PPARAM -INC CCOPTIO -INC SMLENTI SEGMENT TRAV INTEGER IFAC4(4,NBFTM) ENDSEGMENT SEGMENT TRAV1 INTEGER NUMF4(9,NBFTM) ENDSEGMENT SEGMENT SITAF INTEGER ITAF(NBFAX,MMMAX) ENDSEGMENT SEGMENT TRAV2 INTEGER NUF(6,NBELT) ENDSEGMENT SEGMENT CARA INTEGER KM(6,NBSOU1) ENDSEGMENT DIMENSION IAR(3,35),IFR(4,20) DATA IAR /1,2,3,3,4,5,5,6,7,7,8,1, & 1,9,13,3,10,15,5,11,17,7,12,19, & 13,14,15,15,16,17,17,18,19,19,20,13, & 1,2,3,3,4,5,5,6,1,1,7,10,3,8,12,5,9,14, & 10,11,12,12,13,14,14,15,10, & 1,2,3,3,4,5,5,6,1,1,7,10,3,8,10,5,9,10, & 1,2,3,3,4,5,5,6,7,7,8,1,1,9,13,3,10,13, & 5,11,13,7,12,13/ DATA IFR /1,6,9,5, 2,7,10,6, 3,8,11,7, 4,5,12,8, & 1,2,3,4, 9,10,11,12, & 1,5,7,4, 2,6,8,5, 3,4,9,6, 1,2,3,0, 7,8,9,0, & 1,2,3,0, 1,5,4,0, 2,6,5,0, 3,6,4,0, & 1,2,3,4, 1,6,5,0, 2,7,6,0, 3,8,7,0, 4,5,8,0/ C Nb de pts par face par type elt DIMENSION KNPF(6,7) DATA KNPF/1,1,0,0,0,0, & 3,3,3,0,0,0, & 3,3,3,3,0,0, & 8,8,8,8,8,8, & 8,8,8,6,6,0, & 6,6,6,6,0,0, & 8,6,6,6,6,0/ C Nb d'arretes par face par type elt DIMENSION KNAF(6,7) DATA KNAF/0,0,0,0,0,0, & 0,0,0,0,0,0, & 0,0,0,0,0,0, & 4,4,4,4,4,4, & 4,4,4,3,3,0, & 3,3,3,3,0,0, & 4,3,3,3,3,0/ C? DIMENSION I12(35),J12(11) C? DATA I12 /1,2,3,4,5,6,7,8,10,12,14,16,19,20,21,22,23,24,25,26, C? & 1,2,3,4,5,6,8,10,12,15,16,17,18,19,20/ C? DATA J12 /11,13,15,17,9,27, C? & 9 ,11,13,7 ,21/ DIMENSION INF(8,20) C CU20 DATA INF/1,2,3,10,15,14,13,9, 3,4,5,11,17,16,15,10, & 5,6,7,12,19,18,17,11, 7,8,1,9,13,20,19,12, & 1,8,7,6,5,4,3,2, 13,14,15,16,17,18,19,20, C PR15 & 1,2,3,8 ,12,11,10,7, 3,4,5,9 ,14,13,12,8 , & 5,6,1,7,10,15,14,9 , 1,2,3,4,5,6,0,0, & 10,11,12,13,14,15,0,0, C TE15 & 1,2,3,4,5,6,0,0, 1,2,3,8,10,7,0,0, 3,4,5,9,10,8,0,0, & 1,6,5,9,10,7,0,0, C PY15 & 1,2,3,4,5,6,7,8, 1,2,3,10,13,9,0,0, 3,4,5,11,13,10,0,0, & 5,6,7,12,13,11,0,0, 7,8,1,9,13,12,0,0/ DIMENSION NUA(12),NUMA(4),XA(3,21),KTA(7,9) DATA KTA/3,6,10,15,17,24,26, & 3,7,11,33,34,35,36, C nb de faces & 2,3,4 ,6 ,5 ,4 ,5 , C nb d'arretes & 0,3,4 ,12,9 ,6 ,8, C Idec & 0,0,0 ,0 ,12,21,27, C Idc3 & 0,0,0 ,0 ,6 ,11,15, C Nbnn & 3,7,9 ,27,21,15,19, C NP & 3,6,8 ,20,15,10,13, C IDF & 0,0,0 ,0 ,6 ,11,15/ C?Numero pt centre N18 C? & 0,0,0 ,18,14,14,18/ C?Idc2 C? & 0,0,0 ,0 ,20,35,45, C SEG3 TRI6 QUA8 CU20 PR15 TE10 PY13 C 3 6 10 15 17 24 26 C SEG3 TRI7 QUA9 CU27 PR21 TE15 PY19 C 3 7 11 33 34 35 36 C write(6,*)' C20227 dbut ' C************************************************************* IF(IRET.EQ.0)RETURN SEGACT MELEME NBSOU1=LISOUS(/1) IF(NBSOU1.EQ.0)NBSOU1=1 SEGINI CARA NBELT=0 IKQF=1 IK=1 DO 11 L=1,NBSOU1 IPT1=MELEME IF(NBSOU1.NE.1)IPT1=LISOUS(L) SEGACT IPT1 ITYP=IPT1.ITYPEL NBELEM=IPT1.NUM(/2) * ajout gounand 2016/10/04 IF (NBELEM.GT.0) THEN DO 111 I=1,7 IF(ITYP.EQ.KTA(I,1))THEN IK=I GO TO 110 ENDIF 111 CONTINUE IK=0 110 CONTINUE DO 112 I=1,7 IF(ITYP.EQ.KTA(I,2))GO TO 113 112 CONTINUE C write(6,*)' ITYP=',ityp IKQF=0 113 CONTINUE NP =IPT1.NUM(/1) IF(IK.GT.1)THEN NBELT=NBELT+NBELEM ENDIF KM(1,L)=NBELEM KM(2,L)=IPT1 KM(3,L)=IK C nb d'aretes par element KM(4,L)=KTA(IK,4) C nb de faces KM(5,L)=KTA(IK,3) ENDIF 11 CONTINUE IF(IDIM.EQ.3)THEN ONBN=FLOAT(NBELT)+(3.D0*(FLOAT(NBELT)**(2.D0/3.D0))) ELSE ONBN=FLOAT(NBELT)+(2.D0*(FLOAT(NBELT)**(0.5D0))) ENDIF C write(6,*)'IKQF=',ikqf,' IK=',ik IF(IKQF.NE.0)THEN C write(6,*)' C20227 il n y a rien a faire' SEGSUP CARA RETURN ENDIF IF(IK.EQ.0)THEN RETURN ENDIF C write(6,*)' C20227 on fait quekchose ' segact mcoord*mod NBPT=NBPTS JG=NBPT SEGINI MLENTI,MLENT1 NBFAX=4+1 MMMAX=3*NBELT+300 SEGINI SITAF NBFTM=5*NBELT+500 SEGINI TRAV,TRAV1,TRAV2 SEGACT MELEME NBFT4=0 NBAT=0 NN=0 MM=0 NK=0 DO 1 L=1,NBSOU1 IK=KM(3,L) IF (IK.EQ.0) GOTO 1 IPT1=MELEME IF(NBSOU1.NE.1)IPT1=LISOUS(L) SEGACT IPT1 NBELEM=IPT1.NUM(/2) NP =IPT1.NUM(/1) C write(6,*)' ITYP,NBELEM=',ITYP,NBELEM IF(IK.EQ.1)GO TO 1 IF(IK.EQ.2.OR.IK.EQ.3)THEN NK=NK+NBELEM GO TO 1 ENDIF IDEC=KTA(IK,5) IDC3=KTA(IK,6) IDF =KTA(IK,9) NBA=KTA(IK,4) NBF=KTA(IK,3) C write(6,*)' NBA,NBF,NPF=',NBA,NBF DO 2 K=1,NBELEM NK=NK+1 DO 5 NA=1,NBA N1=IPT1.NUM(IAR(1,NA+IDEC),K) N2=IPT1.NUM(IAR(3,NA+IDEC),K) NM=IPT1.NUM(IAR(2,NA+IDEC),K) IF(LECT(NM).EQ.0)THEN C le milieu n'a pas encore été touché NBAT=NBAT+1 LECT(NM)=NBAT NUA(NA)=NBAT ELSE NUA(NA)=LECT(NM) ENDIF 5 CONTINUE DO 6 NF=1,NBF C nb de pts par faces NPF=KNPF(NF,IK) C nb d'arretes par faces NAF=KNAF(NF,IK) DO 61 NFA=1,NAF NUMA(NFA)=NUA(IFR(NFA,NF+IDF)) 61 CONTINUE IF(MLENT1.LECT(NUMA(1)).EQ.0)THEN C l'arrete n'a pas encore été touché NBFT4=NBFT4+1 IF(NBFT4.GT.NBFTM)THEN C write(6,*)' Taille TRAV NBFT4 insuffisante NBFT4=',NBFT4 NBFTM=NBFTM+NBELEM SEGADJ TRAV,TRAV1 ENDIF NUMF4(9,NBFT4)=NPF DO 621 I=1,NPF NUMF4(I,NBFT4)=IPT1.NUM(INF(I,NF+IDC3),K) 621 CONTINUE MM=MM+1 IF(MM.GT.MMMAX)THEN C write(6,*)' Taille ITAF 2eme dime insuffisante MM=',MM MMMAX=MMMAX+NBELEM SEGADJ SITAF ENDIF MLENT1.LECT(NUMA(1))=MM ITAF(1,MM)=1 ITAF(1+1,MM)=NBFT4 C write(6,*)' NBFT4=',nbft4,' mm=',mm,' NB=',ITAF(1,mm) NUF(NF,NK)=NBFT4 GO TO 6 ENDIF C On cherche si la face existe déja dans la table ITAF MM1=MLENT1.LECT(NUMA(1)) NB=ITAF(1,MM1) DO 631 II=1,NB I=ITAF(II+1,MM1) IF( NUMA(2).EQ.IFAC4(2,I).AND.NUMA(3).EQ.IFAC4(3,I) & .AND.NUMA(1).EQ.IFAC4(1,I))THEN NUF(NF,NK)=I GO TO 6 ENDIF 631 CONTINUE IF(NB.LT.(NBFAX-1))THEN C la face n'existe pas dans la table ITAF qui n'est pas pleine C On peut donc considerer que la face est nouvelle NBFT4=NBFT4+1 IF(NBFT4.GT.NBFTM)THEN C write(6,*)' Taille TRAV NBFT4 insuffisante NBFT4=',NBFT4 NBFTM=NBFTM+NBELEM C write(6,*)' NBFTM=',NBFTM,NBELEM SEGADJ TRAV,TRAV1 ENDIF NUMF4(9,NBFT4)=NPF DO 622 I=1,NPF NUMF4(I,NBFT4)=IPT1.NUM(INF(I,NF+IDC3),K) 622 CONTINUE ITAF(1,MM1)=NB+1 ITAF(NB+2,MM1)=NBFT4 C write(6,*)' NBFT4=',NBFT4,' mm1=',mm1,' NB=',ITAF(1,mm1) NUF(NF,NK)=NBFT4 GO TO 6 ENDIF C write(6,*)' Taille ITAF 1ere dime insuffisante NB=',NB NBFAX=NBFAX+2 SEGADJ SITAF C On fait une recherche parmis toutes les faces existantes IF(NAF.EQ.4)THEN DO 7 I=1,NBFT4 IF( NUMA(2).EQ.IFAC4(2,I).AND.NUMA(3).EQ.IFAC4(3,I) & .AND.NUMA(1).EQ.IFAC4(1,I))THEN NUF(NF,NK)=I GO TO 6 ENDIF 7 CONTINUE ELSEIF(NAF.EQ.3)THEN DO 71 I=1,NBFT4 IF( NUMA(2).EQ.IFAC4(2,I).AND.NUMA(3).EQ.IFAC4(3 $ ,I))THEN NUF(NF,NK)=I GO TO 6 ENDIF 71 CONTINUE ENDIF 64 CONTINUE NBFT4=NBFT4+1 IF(NBFT4.GT.NBFTM)THEN C write(6,*)' Taille TRAV NBFT4 insuffisante NBFT4=',NBFT4 NBFTM=NBFTM+NBELEM SEGADJ TRAV,TRAV1 ENDIF ITAF(1,MM1)=NB+1 ITAF(NB+2,MM1)=NBFT4 NUMF4(9,NBFT4)=NPF DO 623 I=1,NPF NUMF4(I,NBFT4)=IPT1.NUM(INF(I,NF+IDC3),K) 623 CONTINUE NUF(NF,NK)=NBFT4 6 CONTINUE 2 CONTINUE 1 CONTINUE C********************************************************** SEGSUP SITAF,MLENTI,MLENT1,TRAV C********************************************************** SEGACT MELEME NK=0 DO 80 L=1,NBSOU1 IK=KM(3,L) IF(IK.EQ.0) GOTO 80 NBF=KTA(IK,3) IF(IK.EQ.1)GO TO 80 IPT1=MELEME IF(NBSOU1.NE.1)IPT1=LISOUS(L) SEGACT IPT1 NBELEM=KM(1,L) NBNN =KTA(IK,7) NP =KTA(IK,8) NBSOUS=0 NBREF=0 SEGINI IPT2 KM(2,L)=IPT2 IPT2.ITYPEL=KTA(IK,2) DO K=1,NBELEM IPT2.ICOLOR(K)=IPT1.ICOLOR(K) ENDDO IF(IK.GE.4)THEN C CU27 & PR21 IDC3=KTA(IK,6) DO 83 K=1,NBELEM NK=NK+1 DO 8 I=1,NP IPT2.NUM(I,K)=IPT1.NUM(I,K) 8 CONTINUE DO 81 I=1,NBF IPT2.NUM(I+NP,K)=NBPT+NBELT+NUF(I,NK) 81 CONTINUE IPT2.NUM(NBNN,K)=NBPT+NK 83 CONTINUE ELSEIF(IK.EQ.2.OR.IK.EQ.3)THEN IDC=7 IF(IK.EQ.3)IDC=9 NP=NBNN-1 DO 84 K=1,NBELEM NK=NK+1 DO 88 I=1,NP IPT2.NUM(I,K)=IPT1.NUM(I,K) 88 CONTINUE IPT2.NUM(IDC,K)=NBPT+NK 84 CONTINUE ENDIF 80 CONTINUE C write(6,*)' NUF ' C DO 783 K=1,NBELT C write(6,1011)K,(NUF(i,k),i=1,6) C783 continue C do 784 k=1,nbft4 C write(6,1011)K,(NUMF4(i,k),i=1,8) C784 continue C write(6,*)' NBPT=',nbpt C write(6,*)' NBAT=',nbat C write(6,*)' NBELT=',NBELT,' NBFT4=',nbft4 NBPTS=NBPT+NBELT+NBFT4 IF(NBPTS.GT.NBPT)SEGADJ MCOORD C************** On calcule les coordonnées des points *********** IF(NBFT4.NE.0)THEN DO 23 J=1,NBFT4 NPF=NUMF4(9,J) DO 21 I=1,NPF N1=NUMF4(I,J) DO 211 M=1,IDIM XA(M,I)=XCOOR((N1-1)*(IDIM+1) +M) 211 CONTINUE 21 CONTINUE N9=NBPT+NBELT+J DO 22 M=1,IDIM XCOOR((N9-1)*(IDIM+1) +M)=XA(M,NPF+1) 22 CONTINUE 23 CONTINUE ENDIF C write(6,*)' On calcule les coordonnées du pt centre ',NBELT IF(NBELT.NE.0)THEN SEGACT MELEME NK=0 DO 90 L=1,NBSOU1 IK=KM(3,L) IF(IK.EQ.0.OR.IK.EQ.1) GOTO 90 IPT1=MELEME IF(NBSOU1.NE.1)IPT1=LISOUS(L) SEGACT IPT1 NBELEM=KM(1,L) NBNN =KTA(IK,7) NP =KTA(IK,8) IPT2=KM(2,L) DO 24 K=1,NBELEM NK=NK+1 C???? CALL INITD(XA(1,21),IDIM,0.D0) DO 25 I=1,NP N1=IPT1.NUM(I,K) DO 251 M=1,IDIM XA(M,I)=XCOOR((N1-1)*(IDIM+1) +M) XA(M,NP+1)=XA(M,NP+1)+(XA(M,I)/FLOAT(NP)) 251 CONTINUE 25 CONTINUE N18=NBPT+NK C write(6,*)' *** NK=',nk,NBELT,L DO 26 M=1,IDIM XCOOR((N18-1)*(IDIM+1) +M)=XA(M,NP+1) 26 CONTINUE 24 CONTINUE 90 CONTINUE ENDIF C write(6,*)' NBPT=',nbpt C write(6,*)' NBAT=',nbat C do 116 l=1,nbat C write(6,1011)L,(itab(i,l),i=1,3) C116 continue C write(6,*)' LECT ' C write(6,1001)(lect(ii),ii=1,nbpt) C write(6,*)' ITAC NN=',NN C do 118 l=1,NN C nb=itac(1,l) C write(6,1011)L,itac(1,l),(itac(i+1,l),i=1,nb) C118 continue C write(6,*)' NBFT4=',nbft4 C do 117 l=1,nbft4 C write(6,1011)L,(ifac4(i,l),i=1,4) C117 continue C write(6,*)' MLENT1.LECT ' C write(6,1001)(mlent1.lect(ii),ii=1,nbpt) C write(6,*)' ITAF MM=',MM C do 119 l=1,MM C nb=itaf(1,l) C write(6,1011)L,itaf(1,l),(itaf(i+1,l),i=1,nb) C119 continue SEGSUP TRAV1 NBSOU2=0 DO L=1,NBSOU1 IPT9=KM(2,L) IF (IPT9.NE.0) THEN NBSOU2=NBSOU2+1 IF (NBSOU2.EQ.1) IPT3=IPT9 ENDIF ENDDO * IF (NBSOU2.EQ.0) THEN * Maillage vide de SEG3 ELSEIF(NBSOU2.NE.1)THEN NBSOUS=NBSOU2 NBELEM=0 NBNN=0 NBREF=0 SEGINI IPT3 IBSOU2=0 DO 785 L=1,NBSOU1 IPT9=KM(2,L) IF (IPT9.NE.0) THEN IBSOU2=IBSOU2+1 IPT3.LISOUS(IBSOU2)=IPT9 ENDIF 785 CONTINUE ENDIF C? SEGACT IPT3 C? nbref=IPT3.LISREF(/1) C? write(6,*)' nbref,meleme=',nbref,meleme C? IPT3.LISREF(1)=MELEME C write(6,*)' C20227 ipt3=',ipt3 SEGSUP CARA,TRAV2 RETURN 1011 FORMAT('L=',I3,4X,15(1X,I5)) 1001 FORMAT(20(1X,I5)) 1002 FORMAT(10(1X,1PE11.4)) END
© Cast3M 2003 - Tous droits réservés.
Mentions légales