************************************************************************
* NOM : partition.dgibi
* DESCRIPTION : Teste les options de partitionnement de maillage de
* l'operateur PART
************************************************************************
SMALL = 1.E-5 ;
* Affichages graphiques ?
GRAPH = FAUX ;
* PROCEDURE PERMETTANT DE VALIDER QU'UNE PARTITION A LE NOMBRE ATTENDU
* DE ZONES, OU QU'UN CONTOUR A LE NOMBRE ATTENDU D'ELEMENTS
* On peu aussi preciser (lelok) la liste des types d'elements attendus
DEBP VALIDER ENTI1*'ENTIER' ;
SI extab1 ;
LOGI1
= (EGA (DIME TAB1
) ENTI1
) ; SINON ;
LOGI1
= (EGA (NBEL MAIL1
) ENTI1
) ; FINS ;
*
'
ARGU' LELOK
/'LISTMOTS'
; '
SI' extab1
; dtab1
= '
DIME' tab1
; '
SINO'
; dtab1
= 1 ; '
FINS'
; LOGI2 = VRAI ;
'REPE' itab1 dtab1 ;
'SI' extab1 ; mymy = tab1 . &itab1 ; 'SINO' ; mymy = MAIL1 ; 'FINS' ;
tst
= '
EXIS' lelok lisel '
ET'
; 'SI' ('NON' tst) ;
'FINS' ;
LOGI2 = LOGI2 'ET' tst ;
'FIN' itab1 ;
LOGI1 = LOGI1 'ET' LOGI2 ;
'FINS' ;
*
SI (NON LOGI1) ;
FINS ;
FINP ;
* +------------------------------------------------------------+
* | MAILLAGES SURFACIQUES TYPE "LIVRETS DE QUELQUES PAGES" ... |
* +------------------------------------------------------------+
NNN = 2 ;
A1
= (0.
0.
0.
) DROI NNN
(1.
0.
0.
) TRAN NNN
(0.
1.
0.
) ;
B1
= (1.
0.
0.
) DROI NNN
(1.
0.
1.
) TRAN NNN
(0.
1.
0.
) ;
C1
= A1
PLUS (1.
0.
0.
) ;
D1
= B1
TOUR (1.
0.
0.
) (1.
1.
0.
) 80.
;
F1
= CHAN 'QUAD'
(A1
TOUR (1.
0.
0.
) (1.
1.
0.
) -70.
) ;
G1
= CHAN 'QUAD'
(A1
TOUR (1.
0.
0.
) (1.
1.
0.
) -10.
) ;
ELIM (A1
ET B1
ET C1
ET D1
ET E1
ET F1
ET G1
) SMALL
;
MAIL11 = A1 ET B1 ET C1 ;
MAIL11D
= '
CHAN' MAIL11 'QUAD'
;MAIL11F
= '
CHAN' MAIL11D 'QUAF'
;a11_30
= ARET MAIL11
30.
;a11_30d
= '
CHAN' a11_30 'QUAD'
;
MAIL12 = A1 ET B1 ET C1 ET D1 ;
MAIL12D
= '
CHAN' MAIL12 'QUAD'
;MAIL12F
= '
CHAN' MAIL12D 'QUAF'
;
MAIL13 = A1 ET B1 ET C1 ET E1 ET F1 ET G1 ;
ELIM (MAIL11 '
ET' MAIL11D '
ET' MAIL11F '
ET' a11_30 '
ET' a11_30d '
ET'
MAIL12 'ET' MAIL12D 'ET' MAIL12F 'ET' MAIL13) SMALL ;
*******************************************************
lline1d
= '
MOTS' 'SEG2'
;lquad1d
= '
MOTS' 'SEG3'
;*
lline2d
= '
MOTS' 'TRI3' 'QUA4'
;lquad2d
= '
MOTS' 'TRI6' 'QUA8'
;lquaf2d
= '
MOTS' 'TRI7' 'QUA9'
;*
lline3d
= '
MOTS' 'TET4' 'PYR5' 'PRI6' 'CUB8'
;lquad3d
= '
MOTS' 'TE10' 'PY13' 'PR15' 'CU20'
;lquaf3d
= '
MOTS' 'TE15' 'PY19' 'PR21' 'CU27'
;
'REPE' iityp 3 ;
ityp = &iityp ;
'SI' ('EGA' ityp 1) ;
ma11 = mail11 ; a11 = a11_30 ; ma12 = mail12 ; txt = 'LINE' ; lelok2 = lline2d ; lelok1 = lline1d ;
'FINS' ;
'SI' ('EGA' ityp 2) ;
ma11 = mail11d ; a11 = a11_30d ; ma12 = mail12d ; txt = 'QUAD' ; lelok2 = lquad2d ; lelok1 = lquad1d ;
'FINS' ;
* Les QUAFs ne fonctionnent pas car en interne PART SEPA ANGL utilise un modele mecanique
* sur les COQ6 ou COQ8 mais il n'y a pas COQ7 ou COQ9
'SI' ('EGA' ityp 3) ;
ma11 = mail11f ; a11 = a11_30d ; ma12 = mail12f ; txt = 'QUAF' ; lelok2 = lquaf2d ; lelok1 = lquad1d ;
'FINS' ;
* LES DEUX PARTITIONS CI-DESSOUS NE SONT PAS EQUIVALENTES !
'SI' ('NEG' ityp 3) ;
TAB11_1
= PART 'NESC' 'SEPA' MA11 'ANGL'
30.
;MESS 'PARTITION
11' ' ' txt ' POUR UN ANGLE DE
30 DEGRES'
; SI GRAPH
; TRACPART TAB11_1 'NCLK'
; FINS ; VALIDER TAB11_1 2 lelok2 ;
'FINS' ;
*
TAB11_2
= PART 'NESC' 'SEPA' MA11 'MAIL' a11
;MESS 'PARTITION
11' ' ' txt ' LE LONG DES ARETES
> 30 DEGRES'
; SI GRAPH
; TRACPART TAB11_2 'NCLK'
; FINS ; VALIDER TAB11_2 3 lelok2 ;
* ON EN PROFITE POUR TESTER L'OPERATEUR CONTOUR
BORT11
= CONT MA11 'TOUT'
;
VALIDER BORI11 NNN lelok1 ;
VALIDER BORE11 (9*NNN) lelok1 ;
VALIDER BORT11 (10*NNN) lelok1 ;
SI GRAPH ;
FINS ;
TAB11_3
= PART 'NESC' 'SEPA' MA11 'MAIL' BORI11
;TAB11_4
= PART 'NESC' 'SEPA' MA11 'MAIL' BORE11
;TAB11_5
= PART 'NESC' 'SEPA' MA11 'MAIL' BORT11
;
MESS 'PARTITION
11' ' ' txt ' LE LONG DU CONTOUR INTERIEUR'
; SI GRAPH
; TRACPART TAB11_3 'NCLK'
; FINS ; MESS 'PARTITION
11' ' ' txt ' LE LONG DU CONTOUR INTERIEUR'
; SI GRAPH
; TRACPART TAB11_4 'NCLK'
; FINS ; MESS 'PARTITION
11' ' ' txt ' LE LONG DU CONTOUR INTERIEUR'
; SI GRAPH
; TRACPART TAB11_5 'NCLK'
; FINS ;
VALIDER TAB11_3 3 lelok2 ;
VALIDER TAB11_4 1 lelok2 ;
VALIDER TAB11_5 3 lelok2 ;
* ENCORE UNE AUTRE FACON D'OBTENIR LE MEME RESULTAT
TAB11_6
= PART 'NESC' 'SEPA' MA11 '
FACE'
;
MESS 'PARTITION
11' ' ' txt ' AVEC L OPTION "FACE"'
; SI GRAPH
; TRACPART TAB11_6 'NCLK'
; FINS ;
VALIDER TAB11_6 3 lelok2 ;
*******************************************************
* EFFET DE LA VALEUR DE L'ANGLE SUR LE NOMBRE DE PARTITIONS
'SI' ('NEG' ityp 3) ;
TAB12_1
= PART 'NESC' MA12 'SEPA' 'ANGL'
5.
;TAB12_2
= PART 'NESC' MA12 'SEPA' 'ANGL'
30.
;TAB12_3
= PART 'NESC' MA12 'SEPA' 'ANGL'
100.
;
MESS 'PARTITION
12' ' ' txt ' POUR UN ANGLE DE
5 DEGRES'
; SI GRAPH
; TRACPART TAB12_1 'NCLK'
; FINS ; MESS 'PARTITION
12' ' ' txt ' POUR UN ANGLE DE
30 DEGRES'
; SI GRAPH
; TRACPART TAB12_2 'NCLK'
; FINS ; MESS 'PARTITION
12' ' ' txt ' POUR UN ANGLE DE
100 DEGRES'
; SI GRAPH
; TRACPART TAB12_3 'NCLK'
; FINS ;
VALIDER TAB12_1 3 lelok2 ;
VALIDER TAB12_2 2 lelok2 ;
VALIDER TAB12_3 1 lelok2 ;
'FINS' ;
'FIN' iityp ;
*******************************************************
* PARTITION AVEC DES ELEMENTS D'ORDRE 1 ET 2 DANS LE MAILLAGE
* SG 2026/07/29 : quel est le resultat attendu ?
* CE CONTOUR CONTIENT A LA FOIS DES SEG2 ET DES SEG3...
VALIDER BORI13 (2*NNN) (lline1d 'ET' lquad1d) ;
* ...ALORS QUE CES ARETES NE CONTIENNENT QUE DES SEG2 (BUG ?)
* SG 2026/07/29 : ARET, contrairement a PART qui calcule la normale au centre de gravite
* de l'element prend un triangle dans chaque coin des elements quadratiques
* pour calculer sa normale et renvoie en consequence des demi-SEG3 (SEG2)
*
ARET13
= ARET MAIL13
3.
;
TAB13_1
= PART 'NESC' 'SEPA' MAIL13 'ANGL'
3.
;TAB13_2
= PART 'NESC' 'SEPA' MAIL13 'MAIL' ARET13
;TAB13_3
= PART 'NESC' 'SEPA' MAIL13 '
FACE'
;TAB13_4
= PART 'NESC' 'SEPA' MAIL13 'MAIL' BORI13
;
MESS 'PARTITION
13 POUR UN ANGLE DE
3 DEGRES'
; SI GRAPH
; TRACPART TAB13_1 'NCLK'
; FINS ; MESS 'PARTITION
13 LE LONG DES ARETES
> 3 DEGRES'
; SI GRAPH
; TRACPART TAB13_2 'NCLK'
; FINS ; MESS 'PARTITION
13 AVEC L OPTION "FACE"'
; SI GRAPH
; TRACPART TAB13_3 'NCLK'
; FINS ; MESS 'PARTITION
13 LE LONG DU CONTOUR INTERIEUR'
; SI GRAPH
; TRACPART TAB13_4 'NCLK'
; FINS ;
VALIDER TAB13_1 4 (lline2d 'ET' lquad2d) ;
VALIDER TAB13_2 4 (lline2d 'ET' lquad2d) ;
VALIDER TAB13_3 6 (lline2d 'ET' lquad2d) ;
VALIDER TAB13_4 6 (lline2d 'ET' lquad2d) ;
* +---------------------------------------+
* | MAILLAGE LINEIQUE TYPE "TALISMAN" ... |
* +---------------------------------------+
P0 = (0. 0. 0.) ;
P1 = (1. 0. 0.) ;
PTS2 = P0 ET P1 ;
PK = P1 ;
REPE K 11 ;
PK
= PK
TOUR P0
(0.
0.
1.
) 30.
; PTS2 = PTS2 ET PK ;
FIN K ;
MAIL2D
= '
CHAN' MAIL2 'QUAD'
;ELIM (MAIL2 '
ET' MAIL2D '
ET' PTS2
) SMALL
;
'REPE' iityp 2 ;
ityp = &iityp ;
'SI' ('EGA' ityp 1) ;
ma2 = mail2 ; txt = 'LINE' ; lelok2 = lline2d ; lelok1 = lline1d ;
'FINS' ;
'SI' ('EGA' ityp 2) ;
ma2 = mail2d ; txt = 'QUAD' ; lelok2 = lquad2d ; lelok1 = lquad1d ;
'FINS' ;
* ON COMMENCE PAR CHERCHER LES JONCTIONS...
SI GRAPH
; TRAC (MA2
ET (COUL 'ROUG' JONC2
)) ; FINS ; VALIDER JONC2
13 ('
MOTS' 'POI1'
) ;
* ...PUIS ON TESTE QUELQUES PARTITIONS
TAB2_1
= PART 'NESC' 'SEPA' MA2 '
LIGN'
;TAB2_2
= PART 'NESC' 'SEPA' MA2 'MAIL' JONC2
;TAB2_3
= PART 'NESC' 'SEPA' MA2 'ANGL'
11.
;TAB2_4
= PART 'NESC' 'SEPA' MA2 'MAIL'
(ELEM PTS2
(LECT 1 8 10)) ;
MESS 'PARTITION
2' ' ' txt ' AVEC L OPTION "LIGN"'
; SI GRAPH
; TRACPART TAB2_1 'NCLK'
; FINS ; MESS 'PARTITION
2' ' ' txt ' SELON LES NOEUDS DE JONCTION'
; SI GRAPH
; TRACPART TAB2_2 'NCLK'
; FINS ; MESS 'PARTITION
2' ' ' txt ' POUR UN ANGLE DE
10 DEGRES'
; SI GRAPH
; TRACPART TAB2_3 'NCLK'
; FINS ; MESS 'PARTITION
2' ' ' txt ' SELON
2 NOEUDS'
; SI GRAPH
; TRACPART TAB2_4 'NCLK'
; FINS ;
VALIDER TAB2_1 24 lelok1 ;
VALIDER TAB2_2 24 lelok1 ;
VALIDER TAB2_3 18 lelok1 ;
VALIDER TAB2_4 4 lelok1 ;
'FIN' iityp ;
* +--------------------+
* | MAILLAGE VOLUMIQUE |
* +--------------------+
SURF1
= (0.
0.
0.
) DROI 4 (1.
0.
0.
) TRAN 4 (0.
1.
0.
) ;VOLU1
= SURF1
VOLU '
TRAN'
4 (0.
0.
1.
) ;VOLU2
= VOLU1
PLUS (1.
0.
0.
) ;* VOLU2 = CHAN 'TET4' VOLU2 ;
VOLU3 = VOLU1 ET VOLU2 ;
COUP1
= SURF1
PLUS (0.
0.
0.25) ;COUP2
= SURF1
PLUS (1.
0.
0.75) ;* COUP2 = CHAN 'TRI3' COUP2 ;
COUP3
= (COTE 2 COUP1
) TRAN 2 (0.
0.
0.5) ;COUP4
= SURF1
PLUS (0.75 0.
0.75) ;COUP_A
= COUL 'ROUG'
(COUP1
ET COUP2
ET COUP3
) ;COUP_B
= COUL 'VERT'
(COUP1
ET COUP4
ET COUP3
) ;
VOLU3D
= '
CHAN' VOLU3 'QUAD'
; VOLU3F
= '
CHAN' VOLU3D 'QUAF'
;COUP_AD
= '
CHAN' COUP_A 'QUAD'
; COUP_AF
= '
CHAN' COUP_AD 'QUAF'
;COUP_BD
= '
CHAN' COUP_B 'QUAD'
; COUP_BF
= '
CHAN' COUP_BD 'QUAF'
;
ELIM (VOLU3
ET COUP_A
ET COUP_B '
ET' VOLU3D
ET COUP_AD
ET COUP_BD '
ET' VOLU3F
ET COUP_AF
ET COUP_BF
) SMALL
;
'REPE' iityp 3 ;
ityp = &iityp ;
'SI' ('EGA' ityp 1) ;
vol3 = volu3 ; coupa = coup_a ; coupb = coup_b ; txt = 'LINE' ; lelok3 = lline3d ;
'FINS' ;
'SI' ('EGA' ityp 2) ;
vol3 = volu3D ; coupa = coup_aD ; coupb = coup_bD ; txt = 'QUAD' ; lelok3 = lquad3d ;
'FINS' ;
'SI' ('EGA' ityp 3) ;
vol3 = volu3F ; coupa = coup_aF ; coupb = coup_bF ; txt = 'QUAF' ; lelok3 = lquaf3d ;
'FINS' ;
SI GRAPH ;
TRAC (VOL3
ET COUPA
) 'CACH' '
TITR'
('
CHAI' 'MAILLAGE SEPARATEUR COUP_A' ' ' txt
) ; TRAC (VOL3
ET COUPB
) 'CACH' '
TITR'
('
CHAI' 'MAILLAGE SEPARATEUR COUP_B' ' ' txt
) ; FINS ;
TAB3_2
= PART 'NESC' 'ARLE' VOL3
5 ;TAB3_4
= PART 'NESC' 'SEPA' VOL3 'MAIL' COUPA
;TAB3_5
= PART 'NESC' 'SEPA' VOL3 'MAIL' COUPB
;
MESS 'PARTITION
3' ' ' txt ' AVEC L OPTION "OPTI"'
; SI GRAPH
; TRACPART TAB3_1 'NCLK'
; FINS ; MESS 'PARTITION
3' ' ' txt ' AVEC L OPTION "ARLE"'
; SI GRAPH
; TRACPART TAB3_2 'NCLK'
; FINS ; MESS 'PARTITION
3' ' ' txt ' AVEC L OPTION "CONN"'
; SI GRAPH
; TRACPART TAB3_3 'NCLK'
; FINS ; MESS 'PARTITION
3' ' ' txt ' AVEC L OPTION "SEPA" "MAIL" COUP_A'
; SI GRAPH
; TRACPART TAB3_4 'NCLK'
; FINS ; MESS 'PARTITION
3' ' ' txt ' AVEC L OPTION "SEPA" "MAIL" COUP_B'
; SI GRAPH
; TRACPART TAB3_5 'NCLK'
; FINS ;
VALIDER TAB3_1 8 lelok3 ;
VALIDER TAB3_2 5 lelok3 ;
VALIDER TAB3_3 1 lelok3 ;
VALIDER TAB3_4 2 lelok3 ;
VALIDER TAB3_5 1 lelok3 ;
'FIN' iityp ;
'FIN' ;