Suiv.: Méthode d'extrusion (topologie cylindrique)
Sup.: Méthode de blocs
Préc.: Le préprocesseur COLIXX
Index
Table des matières
A titre d'exemples nous donnons:
Suit le programme d'appel de COLIB2 dans le cas d'un élément pentaédrique.
La figure 3.3 montre le maillage obtenu pour = 4 et
= 5 où
et
désignent respectivement le nombre de points sur
les arêtes des faces triangulaires et le nombre de tels points sur les autres
arêtes.
C +++++++++++++++++++++ C TEST PENTAEDRE COLIB2 c +++++++++++++++++++++ PARAMETER ( LM = 100000 ) COMMON M(LM) DIMENSION XYZ(3,6),NTNRS(6),NARET(5,9),NSUP(11,1), + NTFR(6,2),XYZINT(3,1) C DATA XYZ / 0. , 0. , 0. , 3. , 0. , 0. , 0. , 3. , 0. , + 0. , 0. , 4. , 3. , 0. , 4. , 0. , 3. , 4. / DATA NTNRS / 1 , 2 , 3 , 4 , 5 , 6 / DATA NARET / 1,2,0,4,1, 2,3,0,4,2, 3,1,0,4,3, + 1,4,0,4,4, 2,5,0,4,5, 3,6,0,4,6, + 4,5,0,4,7, 5,6,0,4,8, 6,4,0,4,9/ DATA NTFR / 7,3,1,2,3,0, 8,3,4,5,6,0/ DATA NSUP / 6,1,2,3,4,5,6,0,0,6,1/ C IMPRE = -2 NNN = 0 CALL INITIS(M,LM,IMPRE,NNN) NFNOPO = 10 CALL TRUNIT (NFNOPO) CALL OUVRIS(NFNOPO,'pentacol2.nopo','UNKNOWN,UNFORMATTED',2000000) C NDIM = 3 NBS = 6 NA = 9 NBGRO = 1 NBFR = 2 print *,' NOMBRE DE POINTS INTERNE A UNE ARETE DE TRIANGLE ? ' CALL LIBENT(NPINT) DO 1 I=1,9 NARET(4,I) = NPINT 1 CONTINUE print *,' NOMBRE DE POINTS INTERNE A UNE ARETE DE QUADRANGLE ? ' CALL LIBENT(NPINT) DO 2 I=4,6 NARET(4,I) = NPINT 2 CONTINUE C CALL COLIB2(M,NFNOPO,NINOPO,NDIM,NBS,NA,NBGRO,NBFR, + XYZ,NTNRS,NARET,XYZINT,NTFR,NSUP) STOP END
Figure: Maillage d'un pentaèdre via COLIB2
Suit le programme d'appel de COLIBR dans le cas de la construction d'un maillage 2D à partir de 17 blocs de nature triangulaire et quadrangulaire. Le maillage résultat est celui de la figure 3.4.
C ++++++++++++++++++++++++++++++++++++++++++++++ C TEST COLIBR ( COLIB2 AVEC FICHIER DE DONNEES ) C ( UN EXEMPLE EN DIMENSION 2 ) C ++++++++++++++++++++++++++++++++++++++++++++++ PARAMETER ( LM = 300000 ) COMMON M(LM) C IMPRE = -2 NNN = 0 CALL INITIS(M,LM,IMPRE,NNN) NFNOPO = 10 CALL TRUNIT (NFNOPO) CALL OUVRIS(NFNOPO,'tunnel.nopo','UNKNOWN,UNFORMATTED',2000000) C NFDATA = 11 CALL TRUNIT (NFDATA) CALL OUVRIS(NFDATA,'tunnel.data','UNKNOWN,FORMATTED',2000000) C CALL LECTEU(NFDATA) CALL COLIBR(M,NFNOPO,NINOPO) STOP END
Le fichier de données nécessaire est le suivant:
$ NBS NA NBGRO IMPRE NBFR NDIM $ 19 35 17 2 0 2 $ NOP NOREF X Y Z ? $ 1 1 0.000000E+00 0.000000E+00 0.000000E+00 2 2 0.110000E+02 0.000000E+00 0.000000E+00 3 3 0.110000E+02 0.900000E+01 0.000000E+00 4 4 0.110000E+02 0.180000E+02 0.000000E+00 5 5 0.200000E+01 0.180000E+02 0.000000E+00 6 6 0.000000E+00 0.180000E+02 0.000000E+00 7 7 0.000000E+00 0.400000E+01 0.000000E+00 8 8 0.800000E+01 0.400000E+01 0.000000E+00 9 9 0.800000E+01 0.800000E+01 0.000000E+00 10 10 0.600000E+01 0.110000E+02 0.000000E+00 11 11 0.200000E+01 0.110000E+02 0.000000E+00 12 12 0.000000E+00 0.800000E+01 0.000000E+00 13 13 0.200000E+01 0.600000E+01 0.000000E+00 14 14 0.550000E+01 0.600000E+01 0.000000E+00 15 15 0.550000E+01 0.750000E+01 0.000000E+00 16 16 0.490000E+01 0.900000E+01 0.000000E+00 17 17 0.290000E+01 0.910000E+01 0.000000E+00 18 18 0.200000E+01 0.750000E+01 0.000000E+00 19 19 0.400000E+01 0.750000E+01 0.000000E+00 $ NA IEX1 IEX2 IDEC NP NOREF $ 1 1 2 0 5 1 2 2 3 0 5 1 3 3 4 0 5 1 4 4 5 0 5 1 5 5 6 0 5 1 6 6 12 0 4 1 7 12 7 0 5 2 8 7 1 0 4 1 9 7 8 0 5 2 10 8 2 0 4 0 11 8 9 0 5 2 12 9 10 0 5 2 13 9 3 0 4 0 14 10 4 0 4 0 15 10 11 0 5 2 16 12 11 0 5 2 17 11 5 0 4 0 18 13 7 0 5 0 19 14 8 0 5 0 20 15 9 0 5 0 21 16 10 0 5 0 22 17 11 0 5 0 23 18 12 0 5 0 24 13 14 0 5 3 25 14 15 0 5 3 26 15 16 1 5 3 5.45 7.75 0. 5.4 8. 0. 5.3 8.25 0. 5.2 8.50 0. 5.1 8.75 0. 27 16 17 1 5 3 4.5 9.3 0. 4.25 9.45 0. 4.0 9.5 0. 3.5 9.45 0. 3.25 9.3 0. 28 17 18 1 5 3 2.60 8.75 0. 2.40 8.50 0. 2.25 8.25 0. 2.10 8.0 0. 2.05 7.75 0. 29 18 13 0 5 3 30 19 13 0 5 0 31 19 14 0 5 0 32 19 15 0 5 0 33 19 16 0 5 0 34 19 17 0 5 0 35 19 18 0 5 0 $ ELEMENTS GROSSIERS $ $ I NCGE SOMMETS NCGE NDSD $ 1 4 1 2 8 7 4 1 2 4 2 3 9 8 4 1 3 4 3 4 10 9 4 1 4 4 10 4 5 11 4 1 5 4 11 5 6 12 4 1 6 4 7 13 18 12 4 2 7 4 7 8 14 13 4 2 8 4 8 14 15 9 4 2 9 4 15 9 10 16 4 2 10 4 16 10 11 17 4 2 11 4 18 17 11 12 4 2 12 3 13 14 19 3 3 13 3 14 15 19 3 3 14 3 15 16 19 3 3 15 3 16 17 19 3 3 16 3 19 18 17 3 3 17 3 13 19 18 3 3
Figure 3.4: Maillage 2D via COLIBR
Suit le programme d'appel de COLIBR dans le cas de la construction d'un maillage 3D à partir de 12 blocs de nature pentaédrique et hexaédrique. Le maillage résultat est celui de la figure 3.5.
C ++++++++++++++++++++++++++++++++++++++++++++++ C TEST COLIBR ( COLIB2 AVEC FICHIER DE DONNEES ) C ( UN EXEMPLE EN DIMENSION 3) C ++++++++++++++++++++++++++++++++++++++++++++++ PARAMETER ( LM = 300000 ) COMMON M(LM) C IMPRE = -2 NNN = 0 CALL INITIS(M,LM,IMPRE,NNN) NFNOPO = 10 CALL TRUNIT (NFNOPO) CALL OUVRIS(NFNOPO,'parttun.nopo','UNKNOWN,UNFORMATTED',2000000) C NFDATA = 11 CALL TRUNIT (NFDATA) CALL OUVRIS(NFDATA,'parttun.data','UNKNOWN,FORMATTED',2000000) C CALL LECTEU(NFDATA) CALL COLIBR(M,NFNOPO,NINOPO) STOP END
Le fichier de données nécessaire est le suivant:
$ NBS NA NBGRO IMPRE NBFR NDIM $ 26 61 12 2 0 3 $ NOP NOREF X Y Z ? $ 1 7 0.000000E+00 0.400000E+01 0.000000E+00 2 8 0.800000E+01 0.400000E+01 0.000000E+00 3 9 0.800000E+01 0.800000E+01 0.000000E+00 4 10 0.600000E+01 0.110000E+02 0.000000E+00 5 11 0.200000E+01 0.110000E+02 0.000000E+00 6 12 0.000000E+00 0.800000E+01 0.000000E+00 7 13 0.200000E+01 0.600000E+01 0.000000E+00 8 14 0.550000E+01 0.600000E+01 0.000000E+00 9 15 0.550000E+01 0.750000E+01 0.000000E+00 10 16 0.490000E+01 0.900000E+01 0.000000E+00 11 17 0.290000E+01 0.910000E+01 0.000000E+00 12 18 0.200000E+01 0.750000E+01 0.000000E+00 13 19 0.400000E+01 0.750000E+01 0.000000E+00 14 7 0.000000E+00 0.400000E+01 1.000000E+01 15 8 0.800000E+01 0.400000E+01 1.000000E+01 16 9 0.800000E+01 0.800000E+01 1.000000E+01 17 10 0.600000E+01 0.110000E+02 1.000000E+01 18 11 0.200000E+01 0.110000E+02 1.000000E+01 19 12 0.000000E+00 0.800000E+01 1.000000E+01 20 13 0.200000E+01 0.600000E+01 1.000000E+01 21 14 0.550000E+01 0.600000E+01 1.000000E+01 22 15 0.550000E+01 0.750000E+01 1.000000E+01 23 16 0.490000E+01 0.900000E+01 1.000000E+01 24 17 0.290000E+01 0.910000E+01 1.000000E+01 25 18 0.200000E+01 0.750000E+01 1.000000E+01 26 19 0.400000E+01 0.750000E+01 1.000000E+01 $ NA IEX1 IEX2 IDEC NP NOREF $ 1 6 1 0 5 2 2 1 2 0 5 2 3 2 3 0 5 2 4 3 4 0 5 2 5 4 5 0 5 2 6 6 5 0 5 2 7 7 1 0 5 0 8 8 2 0 5 0 9 9 3 0 5 0 10 10 4 0 5 0 11 11 5 0 5 0 12 12 6 0 5 0 13 7 8 0 5 3 14 8 9 0 5 3 15 9 10 1 5 3 5.45 7.75 0. 5.4 8. 0. 5.3 8.25 0. 5.2 8.50 0. 5.1 8.75 0. 16 10 11 1 5 3 4.5 9.3 0. 4.25 9.45 0. 4.0 9.5 0. 3.5 9.45 0. 3.25 9.3 0. 17 11 12 1 5 3 2.60 8.75 0. 2.40 8.50 0. 2.25 8.25 0. 2.10 8.0 0. 2.05 7.75 0. 18 12 7 0 5 3 19 13 7 0 5 0 20 13 8 0 5 0 21 13 9 0 5 0 22 13 10 0 5 0 23 13 11 0 5 0 24 13 12 0 5 0 25 19 14 0 5 2 26 14 15 0 5 2 27 15 16 0 5 2 28 16 17 0 5 2 29 17 18 0 5 2 30 19 18 0 5 2 31 20 14 0 5 0 32 21 15 0 5 0 33 22 16 0 5 0 34 23 17 0 5 0 35 24 18 0 5 0 36 25 19 0 5 0 37 20 21 0 5 3 38 21 22 0 5 3 39 22 23 1 5 3 5.45 7.75 10. 5.4 8. 10. 5.3 8.25 10. 5.2 8.50 10. 5.1 8.75 10. 40 23 24 1 5 3 4.5 9.3 10. 4.25 9.45 10. 4.0 9.5 10. 3.5 9.45 10. 3.25 9.3 10. 41 24 25 1 5 3 2.60 8.75 10. 2.40 8.50 10. 2.25 8.25 10. 2.10 8.0 10. 2.05 7.75 10. 42 25 20 0 5 3 43 26 20 0 5 0 44 26 21 0 5 0 45 26 22 0 5 0 46 26 23 0 5 0 47 26 24 0 5 0 48 26 25 0 5 0 49 1 14 0 2 0 50 2 15 0 2 0 51 3 16 0 2 0 52 4 17 0 2 0 53 5 18 0 2 0 54 6 19 0 2 0 55 7 20 0 2 0 56 8 21 0 2 0 57 9 22 0 2 0 58 10 23 0 2 0 59 11 24 0 2 0 60 12 25 0 2 0 61 13 26 0 2 0 $ ELEMENTS GROSSIERS $ $ I NCGE SOMMETS NCGE NDSD $ 1 7 1 2 8 7 14 15 21 20 7 1 2 7 2 3 9 8 15 16 22 21 7 1 3 7 3 4 10 9 16 17 23 22 7 1 4 7 10 11 5 4 23 24 18 17 7 1 5 7 5 6 12 11 18 19 25 24 7 1 6 7 1 7 12 6 14 20 25 19 7 1 7 6 7 8 13 20 21 26 6 2 8 6 8 13 9 21 26 22 6 2 9 6 13 9 10 26 22 23 6 2 10 6 13 10 11 26 23 24 6 2 11 6 13 11 12 26 24 25 6 2 12 6 7 13 12 20 26 25 6 2
Figure 3.5: Maillage 3D via COLIBR
L'exemple suivant montre une utilisation de COLIBH dans le cas où les données sont calculées, dans le programme, à partir d'un jeu réduit de paramètres. Suivent le programme d'appel du module qui utilise 2 sous-programmes et une vue du maillage obtenu sur la figure 3.6.
C ++++++++++++++++++++++++++++++++++++++++++++++ C TEST COLIBH ( COLIB2 AVEC UN SEUL HEXAEDRE ) C ----------- EXEMPLE DU JOINT ( PARTIE 1 ) C ++++++++++++++++++++++++++++++++++++++++++++++ PARAMETER ( LM = 300000 ) COMMON M(LM) INTEGER IDECAR(12),NBPARE(12) REAL XYZ(3,8),XYZINT(3,200) C IMPRE = 3 NNN = 0 CALL INITIS(M,LM,IMPRE,NNN) C --- LA S.D.S. NOPO --- NFNOPO = 10 NINOPO = 0 CALL TRUNIT (NFNOPO) CALL OUVRIS(NFNOPO,'joint1.nopo','UNKNOWN,UNFORMATTED',2000000) C --- LES REFERENCES ET LE SOUS DOMAINE --- NDSDE = 1 IREF = 1 C ------------------------ C --- LA GEOMETRIE --- C ------------------------ DO 1 I=1,3 DO 1 J=1,8 XYZ(I,J) = 0. 1 CONTINUE C --- LES PARAMETRES DE DEFINITION : RPI = 3.14159265 A30 = 30. * RPI / 180. S30 = SIN(A30) C30 = COS(A30) R03 = 0.3 X03 = 0. Y03 = 0. R06 = 0.6 X06 = 0. Y06 = 0. BB = 1.2 C --- LA BASE : XYZ(1,1) = R06 * S30 XYZ(1,2) = R06 * S30 XYZ(1,3) = R03 * S30 XYZ(1,4) = R03 * S30 XYZ(2,1) = - R06 * C30 XYZ(2,2) = R06 * C30 XYZ(2,3) = R03 * C30 XYZ(2,4) = - R03 * C30 C --- LE HAUT : DO 2 I=1,2 DO 2 J=1,4 XYZ(I,J+4) = XYZ(I,J) 2 CONTINUE DO 3 J=1,4 AA = 1.0 + 0.3 * XYZ(1,J) / 1.7 CALL SPELLI(AA,BB,XYZ(2,J+4),XYZ(3,J+4)) 3 CONTINUE C --- LES ARETES : NPI = 5 DO 4 J=1,12 NBPARE(J) = NPI IDECAR(J) = 0 4 CONTINUE NBPARE(2) = 3 NBPARE(4) = 3 NBPARE(10) = 3 NBPARE(12) = 3 C IDECAR(1) = 1 IDECAR(3) = 1 IDECAR(9) = 1 IDECAR(11) = 1 C --- LES POINTS INTERMEDIAIRES : C ARETE 1 : IEX11 = 1 IEX21 = 2 D1 = ( XYZ(2,IEX21) - XYZ(2,IEX11) ) / ( NPI + 1. ) C ARETE 3 : IEX13 = 3 IEX23 = 4 D3 = ( XYZ(2,IEX23) - XYZ(2,IEX13) ) / ( NPI + 1. ) C Y DO 5 J=1,NPI XYZINT(2,J) = XYZ(2,IEX11) + J * D1 XYZINT(2,J+NPI) = XYZ(2,IEX13) + J * D3 5 CONTINUE C X = FONCTION DE Y DO 6 J=1,NPI CALL SPCERC(R06,X06,Y06,XYZINT(2,J),XYZINT(1,J)) CALL SPCERC(R03,X03,Y03,XYZINT(2,J+NPI),XYZINT(1,J+NPI)) 6 CONTINUE C REPORT SUR ARETES 9 ET 11 : DO 7 J=1,NPI XYZINT(1,J+2*NPI) = XYZINT(1,J) XYZINT(1,J+3*NPI) = XYZINT(1,J+NPI) XYZINT(2,J+2*NPI) = XYZINT(2,J) XYZINT(2,J+3*NPI) = XYZINT(2,J+NPI) 7 CONTINUE C Z DO 8 J=1,4*NPI XYZINT(3,J) = 0. 8 CONTINUE C Z ( ARETES 9 ET 11 ) DO 9 J=1,2*NPI AA = 1.0 + 0.3 * XYZINT(1,J+2*NPI) / 1.7 CALL SPELLI(AA,BB,XYZINT(2,J+2*NPI),XYZINT(3,J+2*NPI)) 9 CONTINUE C --- APPEL DU MODULE --- CALL COLIBH(M,NFNOPO,NINOPO,XYZ,IDECAR,NBPARE,XYZINT,IREF,NDSDE) STOP END C ++++++++++++++++++++++++++++++++++++++++++++++ C SPCERC C ++++++++++++++++++++++++++++++++++++++++++++++ SUBROUTINE SPCERC(R,A,B,Y,X) RES = R*R - ( Y - B ) * ( Y - B ) X = A + SQRT( RES ) END C ++++++++++++++++++++++++++++++++++++++++++++++ C SPELLI C ++++++++++++++++++++++++++++++++++++++++++++++ SUBROUTINE SPELLI(A,B,Y,Z) Z = SQRT( 1. - Y*Y / ( A*A ) ) END
Figure 3.6: Maillage 3D via COLIBH
L'exemple qui suit résulte de plusieurs appels de COLIBH, du recollement des maillages obtenus et de différentes manipulations géométriques de ce résultat (symétries, rotations, ... et recollement final)
Figure: Maillage d'un joint via COLIBH et transformations géométriques