chang2
C CHANG2 SOURCE BP208322 16/11/18 21:15:29 9177 IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : CHANG2 C DESCRIPTION : Change un maillage (éventuellement composite) C de QUAF en 'TRI3','TET4','QUA4','CUB8','PYR5' C C C LANGAGE : ESOPE C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF) C mél : gounand@semt2.smts.cea.fr C*********************************************************************** C APPELES : C APPELES (E/S) : C APPELES (BLAS) : C APPELES (CALCUL) : C APPELE PAR : C*********************************************************************** C SYNTAXE GIBIANE : C ENTREES : C ENTREES/SORTIES : C SORTIES : C CODE RETOUR (IRET) : = 0 si tout s'est bien passé C*********************************************************************** C VERSION : v1, 04/01/2007, version initiale C HISTORIQUE : v1, 04/01/2007, création C HISTORIQUE : C HISTORIQUE : C*********************************************************************** C Prière de PRENDRE LE TEMPS de compléter les commentaires C en cas de modification de ce sous-programme afin de faciliter C la maintenance ! C*********************************************************************** -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC SMELEME * LOGICAL LCOMP,ltelq PARAMETER(NTYP2=5) CHARACTER*4 LTYP2(NTYP2),LTYPD2(NTYP2),LTYPD3(NTYP2),MTYP,MTYP2 INTEGER S3S2(2,2),T7T3(3,4),T7Q4(4,3),Q9T3(3,8),Q9Q4(4,4) INTEGER T15T4(4,4),T15O6(6),O6T4(4,4),T15C8(8,4),T15T7(7,4) INTEGER P19H6(6,4),P19O6(6),H6T4(4,3),P19T7(7,4),P19Q9(9) INTEGER P21P6A(6,4),P21P6B(6,4),P6AT4(4,3),P6BT4(4,3) INTEGER P21C8(8,6),P21T7(7,2),P21Q9(9,3) INTEGER C27C8(8,8),C8T4(4,5),C27Q9(9,6) * DATA LTYP2 /'TRI3','TET4','QUA4','CUB8','PYR5'/ DATA LTYPD2/'TRI3','TRI3','QUA4','QUA4','QUA4'/ DATA LTYPD3/'TET4','TET4','CUB8','CUB8','PYR5'/ * SEG3 -> 2 SEG2 DATA S3S2/1,2 , 2,3/ * TRI7 -> 4 TRI3 DATA T7T3/1,2,6 , 2,3,4 , 6,4,5 , 2,4,6/ * TRI7 -> 3 QUA4 DATA T7Q4/1,2,7,6 , 2,3,4,7 , 7,4,5,6/ * QUA9 -> 8 TRI3 DATA Q9T3/1,2,9 , 2,3,9 , 3,4,9 , 4,5,9 , $ 5,6,9 , 6,7,9 , 7,8,9 , 8,1,9/ * QUA9 -> 4 QUA4 DATA Q9Q4/1,2,9,8 , 2,3,4,9 , 9,4,5,6 , 8,9,6,7/ * TE15 -> 4 TET4 + 1 OCT6 DATA T15T4/1,2,6,7 , 2,3,4,8 , 4,5,6,9 , 7,8,9,10/ DATA T15O6/7,2,4,9,8,6/ * OCT6 -> 4 TET4 DATA O6T4/1,2,6,5 , 2,3,6,5 , 3,4,6,5 , 4,1,6,5/ * TE15 -> 4 CUB8 DATA T15C8/1,2,11,6,7,12,15,14 , 2,3,4,11,12,8,13,15 , $ 4,5,6,11,13,9,14,15 , 8,13,15,12,10,9,14,7/ * TE15 -> 4 TRI7 (Les faces) DATA T15T7/1,7,10,8,3,2,12 , 3,8,10,9,5,4,13 , $ 5,9,10,7,1,6,14 , 1,2,3,4,5,6,11/ * PY19 -> 4 HEX6 + 1 OCT6 DATA P19H6/1,2,3,14,9,10 , 3,4,5,14,10,11 , $ 5,6,7,14,11,12 , 7,8,1,14,12,9/ DATA P19O6/9,10,11,12,13,14/ * HEX6 -> 3 TET4 DATA H6T4/1,2,4,5 , 5,2,4,6 , 2,3,4,6/ * PY19 -> 4 TRI7 (Les faces triangulaires) DATA P19T7/1,9,13,10,3,2,15 , 3,10,13,11,5,4,16 , $ 5,11,13,12,7,6,17 , 7,12,13,9,1,8,18/ * PY19 -> QUA9 (La face carrée) DATA P19Q9/1,2,3,4,5,6,7,8,14/ * PR21 -> 4 PRI6 de type A DATA P21P6A/7,16,18,10,11,15 , 9,18,17,14,15,13 , $ 7,18,16,1,6,2 , 9,17,18,5,4,6/ * PR21 -> 4 PRI6 de type B DATA P21P6B/ 8,17,16,12,13,11 , 16,17,18,11,13,15 , $ 8,16,17,3,2,4 , 2,4,6,16,17,18/ Cbuggé $ 8,16,17,3,2,4 , 16,18,17,2,6,4/ * PRI6 de type A -> 3 TET4 DATA P6AT4/1,2,3,4 , 5,3,4,6 , 5,2,4,3/ * PRI6 de type B -> 3 TET4 DATA P6BT4/1,2,3,4 , 3,6,4,2 , 5,2,4,6/ * PR21 -> 6 CUB8 DATA P21C8/7,16,21,18,10,11,20,15 , 16,8,17,21,11,12,13,20 , $ 21,17,9,18,20,13,14,15 , 1,2,19,6,7,16,21,18 , $ 2,3,4,19,16,8,17,21 , 19,4,5,6,21,17,9,18/ * PR21 -> 2 TRI7 (Les faces triangulaires) DATA P21T7/1,2,3,4,5,6,19 , 10,15,14,13,12,11,20/ * PR21 -> 3 QUA9 (Les faces carrées) DATA P21Q9/10,11,12,8,3,2,1,7,16 , 12,13,14,9,5,4,3,8,17 , $ 14,15,10,7,1,6,5,9,18/ * CU27 -> 8 CUB8 DATA C27C8/1,2,25,8,9,21,27,24 , 3,4,25,2,10,22,27,21 , $ 5,6,25,4,11,23,27,22 , 7,8,25,6,12,24,27,23 , $ 13,20,26,14,9,24,27,21 , 15,14,26,16,10,21,27,22 , $ 17,16,26,18,11,22,27,23 , 19,18,26,20,12,23,27,24/ * CUB8 -> 5 TET4 DATA C8T4/1,2,3,6 , 3,4,1,8 , 1,6,8,5 , 6,3,8,7 , 8,6,1,3/ * CU27 -> 6 QUA9 (Les faces carrées) DATA C27Q9/1,9,13,14,15,10,3,2,21 , 3,10,15,16,17,11,5,4,22 , $ 5,11,17,18,19,12,7,6,23 , 7,12,19,20,13,9,1,8,24 , $ 1,2,3,4,5,6,7,8,25 , 13,20,19,18,17,16,15,14,26/ * * Executable statements * IMPR=0 IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans chang2.eso' * Numéro de l'élément à créer dans la numérotation de LTYP2 IF (IRET.NE.0) GOTO 9999 SEGACT IPT1 NBSOUS=IPT1.LISOUS(/1) LCOMP=(NBSOUS.GE.1) IPT3=0 * IF (NBSOUS.EQ.0) NBSOUS=1 DO ISOUS=1,NBSOUS IF (LCOMP) THEN IPT2=IPT1.LISOUS(ISOUS) SEGACT IPT2 ELSE IPT2=IPT1 ENDIF ITYP=IPT2.ITYPEL MTYP=NOMS(ITYP) NBL=IPT2.NUM(/2) * NBN=IPT2.NUM(/1) IF (MTYP.EQ.'SEG3') THEN * Passage SEG3 -> 2 SEG2 NBNN=2 NBELEM=NBL*2 NBSOUS=0 NBREF=0 SEGINI IPT4 IPT4.ITYPEL=2 IEL4=0 DO IBL=1,NBL DO IL=1,2 IEL4=IEL4+1 DO IN=1,2 IPT4.NUM(IN,IEL4)=IPT2.NUM(S3S2(IN,IL),IBL) ENDDO IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO SEGDES IPT4 ELSEIF (MTYP.EQ.'TRI7') THEN MTYP2=LTYPD2(JTY) IF (MTYP2.EQ.'TRI3') THEN * Passage TRI7 -> 4 TRI3 NBNN=3 NBELEM=NBL*4 NBSOUS=0 NBREF=0 SEGINI IPT4 IPT4.ITYPEL=4 IEL4=0 DO IBL=1,NBL DO IL=1,4 IEL4=IEL4+1 DO IN=1,3 IPT4.NUM(IN,IEL4)=IPT2.NUM(T7T3(IN,IL),IBL) ENDDO IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO SEGDES IPT4 ELSEIF (MTYP2.EQ.'QUA4') THEN * Passage TRI7 -> 3 QUA4 NBNN=4 NBELEM=NBL*3 NBSOUS=0 NBREF=0 SEGINI IPT4 IPT4.ITYPEL=8 IEL4=0 DO IBL=1,NBL DO IL=1,3 IEL4=IEL4+1 DO IN=1,4 IPT4.NUM(IN,IEL4)=IPT2.NUM(T7Q4(IN,IL),IBL) ENDDO IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO SEGDES IPT4 ELSE GOTO 9998 ENDIF ELSEIF (MTYP.EQ.'QUA9') THEN MTYP2=LTYPD2(JTY) IF (MTYP2.EQ.'TRI3') THEN * Passage QUA9 -> 8 TRI3 NBNN=3 NBELEM=NBL*8 NBSOUS=0 NBREF=0 SEGINI IPT4 IPT4.ITYPEL=4 IEL4=0 DO IBL=1,NBL DO IL=1,8 IEL4=IEL4+1 DO IN=1,3 IPT4.NUM(IN,IEL4)=IPT2.NUM(Q9T3(IN,IL),IBL) ENDDO IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO SEGDES IPT4 ELSEIF (MTYP2.EQ.'QUA4') THEN * Passage QUA9 -> 4 QUA4 NBNN=4 NBELEM=NBL*4 NBSOUS=0 NBREF=0 SEGINI IPT4 IPT4.ITYPEL=8 IEL4=0 DO IBL=1,NBL DO IL=1,4 IEL4=IEL4+1 DO IN=1,4 IPT4.NUM(IN,IEL4)=IPT2.NUM(Q9Q4(IN,IL),IBL) ENDDO IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO SEGDES IPT4 ELSE GOTO 9998 ENDIF ELSEIF (MTYP.EQ.'TE15') THEN MTYP2=LTYPD3(JTY) IF (MTYP2.EQ.'TET4') THEN * Passage TE15 -> 8 TET4 NBNN=4 NBELEM=NBL*8 NBSOUS=0 NBREF=0 SEGINI IPT4 IF ((IRET.NE.0).OR.ITYP2.EQ.0) THEN RETURN ENDIF IPT4.ITYPEL=ITYP2 IEL4=0 DO IBL=1,NBL * D'abord les 4TET4 des coins DO IL=1,4 IEL4=IEL4+1 DO IN=1,4 IPT4.NUM(IN,IEL4)=IPT2.NUM(T15T4(IN,IL),IBL) ENDDO IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO * Puis l'octaèdre du milieu DO IL=1,4 IEL4=IEL4+1 DO IN=1,4 IPT4.NUM(IN,IEL4)= $ IPT2.NUM(T15O6(O6T4(IN,IL)),IBL) ENDDO IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO SEGDES IPT4 ELSEIF (MTYP2.EQ.'CUB8') THEN * Passage TE15 -> 4 CUB8 NBNN=8 NBELEM=NBL*4 NBSOUS=0 NBREF=0 SEGINI IPT4 IF ((IRET.NE.0).OR.ITYP2.EQ.0) THEN RETURN ENDIF IPT4.ITYPEL=ITYP2 IEL4=0 DO IBL=1,NBL DO IL=1,4 IEL4=IEL4+1 DO IN=1,8 IPT4.NUM(IN,IEL4)=IPT2.NUM(T15C8(IN,IL),IBL) ENDDO IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO SEGDES IPT4 ELSEIF (MTYP2.EQ.'PYR5') THEN * Passage TE15 -> 12 PYR5 NBNN=5 NBELEM=NBL*12 NBSOUS=0 NBREF=0 SEGINI IPT4 IF ((IRET.NE.0).OR.ITYP2.EQ.0) THEN RETURN ENDIF IPT4.ITYPEL=ITYP2 IEL4=0 DO IBL=1,NBL DO IL=1,4 DO IL2=1,3 IEL4=IEL4+1 DO IN=1,4 IPT4.NUM(IN,IEL4)= $ IPT2.NUM(T15T7(T7Q4(IN,IL2),IL),IBL) ENDDO IPT4.NUM(5,IEL4)=IPT2.NUM(15,IBL) IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO ENDDO SEGDES IPT4 ELSE GOTO 9998 ENDIF ELSEIF (MTYP.EQ.'PY19') THEN MTYP2=LTYPD3(JTY) IF (MTYP2.EQ.'TET4') THEN * Passage PY19 -> 16 TET4 NBNN=4 NBELEM=NBL*16 NBSOUS=0 NBREF=0 SEGINI IPT4 IF ((IRET.NE.0).OR.ITYP2.EQ.0) THEN RETURN ENDIF IPT4.ITYPEL=ITYP2 IEL4=0 DO IBL=1,NBL * D'abord les 4 HEX6 des coins DO IL=1,4 DO IL2=1,3 IEL4=IEL4+1 DO IN=1,4 IPT4.NUM(IN,IEL4)= $ IPT2.NUM(P19H6(H6T4(IN,IL2),IL),IBL) ENDDO IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO * Puis l'octaèdre du milieu DO IL=1,4 IEL4=IEL4+1 DO IN=1,4 IPT4.NUM(IN,IEL4)= $ IPT2.NUM(P19O6(O6T4(IN,IL)),IBL) ENDDO IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO SEGDES IPT4 ELSEIF (MTYP2.EQ.'PYR5') THEN * Passage PY19 -> 16 PYR5 NBNN=5 NBELEM=NBL*16 NBSOUS=0 NBREF=0 SEGINI IPT4 IF ((IRET.NE.0).OR.ITYP2.EQ.0) THEN RETURN ENDIF IPT4.ITYPEL=ITYP2 IEL4=0 DO IBL=1,NBL * Les faces triangulaires DO IL=1,4 DO IL2=1,3 IEL4=IEL4+1 DO IN=1,4 IPT4.NUM(IN,IEL4)= $ IPT2.NUM(P19T7(T7Q4(IN,IL2),IL),IBL) ENDDO IPT4.NUM(5,IEL4)=IPT2.NUM(19,IBL) IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO * La face carrée DO IL=1,4 IEL4=IEL4+1 DO IN=1,4 IPT4.NUM(IN,IEL4)= $ IPT2.NUM(P19Q9(Q9Q4(IN,IL)),IBL) ENDDO IPT4.NUM(5,IEL4)=IPT2.NUM(19,IBL) IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO SEGDES IPT4 ELSE GOTO 9998 ENDIF ELSEIF (MTYP.EQ.'PR21') THEN MTYP2=LTYPD3(JTY) IF (MTYP2.EQ.'TET4') THEN * Passage PR21 -> 24 TET4 NBNN=4 NBELEM=NBL*24 NBSOUS=0 NBREF=0 SEGINI IPT4 IF ((IRET.NE.0).OR.ITYP2.EQ.0) THEN RETURN ENDIF IPT4.ITYPEL=ITYP2 IEL4=0 DO IBL=1,NBL * D'abord les 4 PRI6 de type A DO IL=1,4 DO IL2=1,3 IEL4=IEL4+1 DO IN=1,4 IPT4.NUM(IN,IEL4)= $ IPT2.NUM(P21P6A(P6AT4(IN,IL2),IL),IBL) ENDDO IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO * Puis les 4 PRI6 de type B DO IL=1,4 DO IL2=1,3 IEL4=IEL4+1 DO IN=1,4 IPT4.NUM(IN,IEL4)= $ IPT2.NUM(P21P6B(P6BT4(IN,IL2),IL),IBL) ENDDO IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO ENDDO SEGDES IPT4 ELSEIF (MTYP2.EQ.'CUB8') THEN * Passage PR21 -> 6 CUB8 NBNN=8 NBELEM=NBL*6 NBSOUS=0 NBREF=0 SEGINI IPT4 IF ((IRET.NE.0).OR.ITYP2.EQ.0) THEN RETURN ENDIF IPT4.ITYPEL=ITYP2 IEL4=0 DO IBL=1,NBL DO IL=1,6 IEL4=IEL4+1 DO IN=1,8 IPT4.NUM(IN,IEL4)=IPT2.NUM(P21C8(IN,IL),IBL) ENDDO IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO SEGDES IPT4 ELSEIF (MTYP2.EQ.'PYR5') THEN * Passage PR21 -> 18 PYR5 NBNN=5 NBELEM=NBL*18 NBSOUS=0 NBREF=0 SEGINI IPT4 IF ((IRET.NE.0).OR.ITYP2.EQ.0) THEN RETURN ENDIF IPT4.ITYPEL=ITYP2 IEL4=0 DO IBL=1,NBL * Les faces triangulaires DO IL=1,2 DO IL2=1,3 IEL4=IEL4+1 DO IN=1,4 IPT4.NUM(IN,IEL4)= $ IPT2.NUM(P21T7(T7Q4(IN,IL2),IL),IBL) ENDDO IPT4.NUM(5,IEL4)=IPT2.NUM(21,IBL) IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO * Les faces carrées DO IL=1,3 DO IL2=1,4 IEL4=IEL4+1 DO IN=1,4 IPT4.NUM(IN,IEL4)= $ IPT2.NUM(P21Q9(Q9Q4(IN,IL2),IL),IBL) ENDDO IPT4.NUM(5,IEL4)=IPT2.NUM(21,IBL) IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO ENDDO SEGDES IPT4 ELSE GOTO 9998 ENDIF ELSEIF (MTYP.EQ.'CU27') THEN MTYP2=LTYPD3(JTY) IF (MTYP2.EQ.'TET4') THEN * Passage CU27 -> 40 TET4 NBNN=4 NBELEM=NBL*40 NBSOUS=0 NBREF=0 SEGINI IPT4 IF ((IRET.NE.0).OR.ITYP2.EQ.0) THEN RETURN ENDIF IPT4.ITYPEL=ITYP2 IEL4=0 DO IBL=1,NBL DO IL=1,8 DO IL2=1,5 IEL4=IEL4+1 DO IN=1,4 IPT4.NUM(IN,IEL4)= $ IPT2.NUM(C27C8(C8T4(IN,IL2),IL),IBL) ENDDO ENDDO IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO SEGDES IPT4 ELSEIF (MTYP2.EQ.'CUB8') THEN * Passage CU27 -> 8 CUB8 NBNN=8 NBELEM=NBL*8 NBSOUS=0 NBREF=0 SEGINI IPT4 IF ((IRET.NE.0).OR.ITYP2.EQ.0) THEN RETURN ENDIF IPT4.ITYPEL=ITYP2 IEL4=0 DO IBL=1,NBL DO IL=1,8 IEL4=IEL4+1 DO IN=1,8 IPT4.NUM(IN,IEL4)=IPT2.NUM(C27C8(IN,IL),IBL) ENDDO IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO SEGDES IPT4 ELSEIF (MTYP2.EQ.'PYR5') THEN * Passage CU27 -> 24 PYR5 NBNN=5 NBELEM=NBL*24 NBSOUS=0 NBREF=0 SEGINI IPT4 IF ((IRET.NE.0).OR.ITYP2.EQ.0) THEN RETURN ENDIF IPT4.ITYPEL=ITYP2 IEL4=0 DO IBL=1,NBL DO IL=1,6 DO IL2=1,4 IEL4=IEL4+1 DO IN=1,4 IPT4.NUM(IN,IEL4)= $ IPT2.NUM(C27Q9(Q9Q4(IN,IL2),IL),IBL) ENDDO IPT4.NUM(5,IEL4)=IPT2.NUM(27,IBL) IPT4.ICOLOR(IEL4)=IPT2.ICOLOR(IBL) ENDDO ENDDO ENDDO SEGDES IPT4 ELSE GOTO 9998 ENDIF ELSE GOTO 9998 ENDIF * IF (LCOMP) SEGDES IPT2 IF (IPT3.EQ.0) THEN IPT3=IPT4 ELSE ltelq=.false. IPT3=IPT5 ENDIF * ENDDO SEGDES IPT1 * IPT1=IPT3 * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * * 995 2 *On ne sait pas changer des éléments %m1:4 en élément %m5:8 9998 CONTINUE MOTERR(1:4)=MTYP MOTERR(5:8)=NOMS(ITY) RETURN 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine chang2' RETURN * * End of subroutine CHANG2 * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales