* @COUPLAN PROCEDUR PASCAL 12/10/18 21:15:01 7532 *---------------------------------------------------------------------* * NOM : @COUPLAN * * * * DESCRIPTION : Procedure de maillage d'un agregat cubique de poly- * * * * SYNTAXE : TAB2 TAB3 = @COUPLAN TAB1 P1 P2 P3 (ITRAC1) (IMESS1) ;* * * * - TAB1 = Objet TABLE, resultat de la procedure @P_VORO, conte- * * -nant les points sommets de la partition de Voronoi * * s'appuyant sur les points du maillage donne a l'indi- * * -ce 'MPT' de TAB1. * * * * - P1/P2/P3 = Points du plan de coupe ; * * * * - ITRAC1 = LOGIQUE activant le trace des resultats ; * * * * - IMESS1 = LOGIQUE activant messages (No cellule, Face, etc.) ; * * * * - TAB2/TAB3 = TABLEs resultats contenant les points sommets de la * * partition de Voronoi decrite par TAB1 coupee par le * * Plan defini par P1 P2 P3. * * * * LANGAGE : GIBIANE-CAST3M * * AUTEUR : S. PASCAL (CEA/DEN/DM2S/SEMT/LM2S) * * COURRIEL : serge.pascal@cea.fr * *---------------------------------------------------------------------* * VERSION : v1, 14/09/2009, version initiale * *---------------------------------------------------------------------* * * *----------------------- Lecture des arguments -----------------------* * * * Lecture de la table : * * * * Coupe de l'agregat selon le Plan P1 P2 P3 : * * * * Lecture facultative d'un indicateur de trace du resultat : * ITRAC1 = FAUX ; 'FINS' ; * * IMESS1 = FAUX ; 'FINS' ; * * * Representation du Plan de coupe pour les traces : * 'SI' ITRAC1 ; 'FINS' ; * * * Normale au Plan : * * * *----------------------------- Decoupage -----------------------------* * * * Boucle sur les cellules de Voronoi : * MPT1 = TGN6T . 'MPT' ; 'REPE' BI1 NBI1 ; 'SI' IMESS1 ; 'FINS' ; MAVI1 = TGN6T . PCI1 . 'MAV' ; CHCI1 = (XN1 * (X1 - XP1)) + (YN1 * (Y1 - YP1)) + (ZN1 * (Z1 - ZP1)) ; * Test Si MAVI1 a gauche du Plan : * 'SI' IMESS1 ; 'FINS' ; MPTI1 = TGN6T . PCI1 . 'MPT' ; IPREMJ1 = VRAI ; 'REPE' BJ1 NBJ1 ; 'SI' IMESS1 ; 'FINS' ; 'SI' IMESS1 ; 'FINS' ; MAVIJN1 = TPCNEG1 . PCJ1 . PCI1 . 'MAV' ; TPCNEG1 . PCI1 . PCJ1 = TPCNEG1 . PCJ1 . PCI1 ; 'SINO' ; MAVIJ1 = TGN6T . PCI1 . PCJ1 . 'MAV' ; TPCNEG1 . PCI1 . PCJ1 = TGN6T . PCI1 . PCJ1 ; 'FINS' ; 'SI' IPREMJ1 ; IPREMJ1 = FAUX ; TPCNEG1 . PCI1 . 'MAV' = MAVIJN1 ; 'SINO' ; TPCNEG1 . PCI1 . 'MPT' = TPCNEG1 . PCI1 . 'MPT' 'ET' PCJ1 ; TPCNEG1 . PCI1 . 'MAV' = TPCNEG1 . PCI1 . 'MAV' 'ET' MAVIJN1 ; 'FINS' ; 'FIN' BJ1 ; TPCNEG1 . 'MPT' = TPCNEG1 . 'MPT' 'ET' PCI1 ; TPCNEG1 . 'MAV' = TPCNEG1 . 'MAV' 'ET' TPCNEG1 . PCI1 . 'MAV' ; 'SINO' ; TPCNEG1 . 'MAV' = TPCNEG1 . PCI1 . 'MAV' ; 'FINS' ; 'ITER' BI1 ; 'FINS' ; * * * Test Si MAVI1 a droite du Plan : * 'SI' IMESS1 ; 'FINS' ; MPTI1 = TGN6T . PCI1 . 'MPT' ; IPREMJ1 = VRAI ; 'REPE' BJ1 NBJ1 ; 'SI' IMESS1 ; 'FINS' ; 'SI' IMESS1 ; 'FINS' ; MAVIJP1 = TPCPOS1 . PCJ1 . PCI1 . 'MAV' ; TPCPOS1 . PCI1 . PCJ1 = TPCPOS1 . PCJ1 . PCI1 ; 'SINO' ; MAVIJ1 = TGN6T . PCI1 . PCJ1 . 'MAV' ; TPCPOS1 . PCI1 . PCJ1 = TGN6T . PCI1 . PCJ1 ; 'FINS' ; 'SI' IPREMJ1 ; IPREMJ1 = FAUX ; TPCPOS1 . PCI1 . 'MAV' = MAVIJP1 ; 'SINO' ; TPCPOS1 . PCI1 . 'MPT' = TPCPOS1 . PCI1 . 'MPT' 'ET' PCJ1 ; TPCPOS1 . PCI1 . 'MAV' = TPCPOS1 . PCI1 . 'MAV' 'ET' MAVIJP1 ; 'FINS' ; 'FIN' BJ1 ; TPCPOS1 . 'MPT' = TPCPOS1 . 'MPT' 'ET' PCI1 ; TPCPOS1 . 'MAV' = TPCPOS1 . 'MAV' 'ET' TPCPOS1 . PCI1 . 'MAV' ; 'SINO' ; TPCPOS1 . 'MAV' = TPCPOS1 . PCI1 . 'MAV' ; 'FINS' ; 'ITER' BI1 ; 'FINS' ; * * On est Dans le cas Ou la cellule coupe le Plan : * * Boucle sur les Faces * MPTI1 = TGN6T . PCI1 . 'MPT' ; IPREMJ1 = VRAI ; 'REPE' BJ1 NBJ1 ; 'SI' IMESS1 ; 'FINS' ; MAVIJ1 = TGN6T . PCI1 . PCJ1 . 'MAV' ; CHCIJ1 = (XN1 * (X1 - XP1)) + (YN1 * (Y1 - YP1)) + (ZN1 * (Z1 - ZP1)) ; * Test Si MAVIJ1 est Dans le Plan : * 'FINS' ; * Test Si MAVIJ1 est a gauche du Plan : * 'SI' IMESS1 ; 'FINS' ; 'SI' IMESS1 ; 'FINS' ; MAVIJN1 = TPCNEG1 . PCJ1 . PCI1 . 'MAV' ; TPCNEG1 . PCI1 . PCJ1 = TPCNEG1 . PCJ1 . PCI1 ; 'SINO' ; TPCNEG1 . PCI1 . PCJ1 = TGN6T . PCI1 . PCJ1 ; 'FINS' ; TPCNEG1 . PCI1 . 'MPT' = TPCNEG1 . PCI1 . 'MPT' 'ET' PCJ1 ; TPCNEG1 . PCI1 . 'MAV' = TPCNEG1 . PCI1 . 'MAV' 'ET' MAVIJN1 ; 'SINO' ; TPCNEG1 . PCI1 . 'MAV' = MAVIJN1 ; 'FINS' ; 'ITER' BJ1 ; 'FINS' ; * Test Si MAVIJ1 est a droite du Plan : * 'SI' IMESS1 ; 'FINS' ; 'SI' IMESS1 ; 'FINS' ; MAVIJP1 = TPCPOS1 . PCJ1 . PCI1 . 'MAV' ; TPCPOS1 . PCI1 . PCJ1 = TPCPOS1 . PCJ1 . PCI1 ; 'SINO' ; MAVIJ1 = TGN6T . PCI1 . PCJ1 . 'MAV' ; TPCPOS1 . PCI1 . PCJ1 = TGN6T . PCI1 . PCJ1 ; 'FINS' ; TPCPOS1 . PCI1 . 'MPT' = TPCPOS1 . PCI1 . 'MPT' 'ET' PCJ1 ; TPCPOS1 . PCI1 . 'MAV' = TPCPOS1 . PCI1 . 'MAV' 'ET' MAVIJP1 ; 'SINO' ; TPCPOS1 . PCI1 . 'MAV' = MAVIJP1 ; 'FINS' ; 'ITER' BJ1 ; 'FINS' ; * * * On est Dans le cas Ou la Face coupe le Plan : * * Test Si cellule PCJ1 deja coupee : * 'MESS' 'QUIT' BI1 ; 'FINS' ; 'SI' IMESS1 ; 'FINS' ; * Arete Intersection : MAVIJK0 : * MAVIJN1 = TPCNEG1 . PCJ1 . PCI1 . 'MAV' ; MAVIJP1 = TPCPOS1 . PCJ1 . PCI1 . 'MAV' ; * Face relative a PCJ0 : * TPCNEG1 . PCI1 . PCJ0 . PCJ1 . 'MAV' = MAVIJK0 ; TPCPOS1 . PCI1 . PCJ0 . PCJ1 . 'MAV' = MAVIJK0 ; 'SI' IPREMJ1 ; IPREMJ1 = FAUX ; MAVIJ0 = MAVIJK0 ; 'SINO' ; MAVIJ0 = MAVIJ0 'ET' MAVIJK0 ; TPCNEG1 . PCI1 . PCJ0 . 'MPT' = TPCNEG1 . PCI1 . PCJ0 . 'MPT' 'ET' PCJ1 ; TPCPOS1 . PCI1 . PCJ0 . 'MPT' = TPCPOS1 . PCI1 . PCJ0 . 'MPT' 'ET' PCJ1 ; 'FINS' ; * Face relative a PCJ1 : * TPCNEG1 . PCI1 . PCJ1 = TPCNEG1 . PCJ1 . PCI1 ; TPCPOS1 . PCI1 . PCJ1 = TPCPOS1 . PCJ1 . PCI1 ; * Cellule PCI1 : * TPCNEG1 . PCI1 . 'MPT' = TPCNEG1 . PCI1 . 'MPT' 'ET' PCJ1 ; TPCNEG1 . PCI1 . 'MAV' = TPCNEG1 . PCI1 . 'MAV' 'ET' MAVIJN1 ; 'SINO' ; TPCNEG1 . PCI1 . 'MAV' = MAVIJN1 ; 'FINS' ; TPCPOS1 . PCI1 . 'MPT' = TPCPOS1 . PCI1 . 'MPT' 'ET' PCJ1 ; TPCPOS1 . PCI1 . 'MAV' = TPCPOS1 . PCI1 . 'MAV' 'ET' MAVIJP1 ; 'SINO' ; TPCPOS1 . PCI1 . 'MAV' = MAVIJP1 ; 'FINS' ; 'ITER' BJ1 ; 'SINO' ; 'MESS' 'QUIT' BI1 ; 'FINS' ; 'FINS' ; * * * Boucle sur les aretes : * * * *------------------------------ VERRUE -------------------------------* * TGN6T . PCI1 . PCJ1 ne contient pas l'indice 'MPT' : on le cree * * en attente evolution @P_VORO... * IPREMX1 = VRAI ; INDX0 = TINDIJ1 . &BX0 ; 'SI' IPREMX1 ; IPREMX1 = FAUX ; TGN6T . PCI1 . PCJ1 . 'MPT' = INDX0 ; 'SINO' ; TGN6T . PCI1 . PCJ1 . 'MPT' = TGN6T . PCI1 . PCJ1 . 'MPT' 'ET' INDX0 ; 'FINS' ; 'FINS' ; 'FIN' BX0 ; 'FINS' ; *---------------------------------------------------------------------* * * 'SI' IMESS1 ; 'FINS' ; MPTIJ1 = TGN6T . PCI1 . PCJ1 . 'MPT' ; IPREMK1 = VRAI ; 'REPE' BK1 NBK1 ; MAVIJK1 = TGN6T . PCI1 . PCJ1 . PCK1 . 'MAV' ; 'ITER' BK1 ; 'FINS' ; CHCIJK1 = (XN1 * (X1 - XP1)) + (YN1 * (Y1 - YP1)) + (ZN1 * (Z1 - ZP1)) ; * Test Si MAVIJK1 est a gauche du Plan : * 'SI' IMESS1 ; 'FINS' ; TPCNEG1 . PCI1 . PCJ1 . PCK1 = TGN6T . PCI1 . PCJ1 . PCK1 ; TPCNEG1 . PCI1 . PCJ1 . 'MAV' = TPCNEG1 . PCI1 . PCJ1 . 'MAV' 'ET' MAVIJK1 ; TPCNEG1 . PCI1 . PCJ1 . 'MPT' = TPCNEG1 . PCI1 . PCJ1 . 'MPT' 'ET' PCK1 ; 'SINO' ; TPCNEG1 . PCI1 . PCJ1 . 'MAV' = MAVIJK1 ; 'FINS' ; 'ITER' BK1 ; 'FINS' ; * Test Si MAVIJK1 est a droite du Plan : * 'SI' IMESS1 ; 'FINS' ; TPCPOS1 . PCI1 . PCJ1 . PCK1 = TGN6T . PCI1 . PCJ1 . PCK1 ; TPCPOS1 . PCI1 . PCJ1 . 'MAV' = TPCPOS1 . PCI1 . PCJ1 . 'MAV' 'ET' MAVIJK1 ; TPCPOS1 . PCI1 . PCJ1 . 'MPT' = TPCPOS1 . PCI1 . PCJ1 . 'MPT' 'ET' PCK1 ; 'SINO' ; TPCPOS1 . PCI1 . PCJ1 . 'MAV' = MAVIJK1 ; 'FINS' ; 'ITER' BK1 ; 'FINS' ; * * * On est Dans le cas Ou l'Arete coupe le Plan : * * * * Test Si cellule PCK1 deja coupee : * 'MESS' 'QUIT' BI1 ; 'FINS' ; 'SI' IMESS1 ; 'FINS' ; * Arete PCI1-PCJ1-PCK1 : * MAVKIJN1 = TPCNEG1 . PCK1 . PCI1 . PCJ1 . 'MAV' ; MAVKIJP1 = TPCPOS1 . PCK1 . PCI1 . PCJ1 . 'MAV' ; TPCNEG1 . PCI1 . PCJ1 . PCK1 = TPCNEG1 . PCK1 . PCI1 . PCJ1 ; TPCPOS1 . PCI1 . PCJ1 . PCK1 = TPCPOS1 . PCK1 . PCI1 . PCJ1 ; * Point intersection PVK0 : * 'SI' IPREMK1 ; IPREMK1 = FAUX ; PVKI1 = PVK0 ; 'SI' IMESS1 ; 'FINS' ; 'SINO' ; PVKI2 = PVK0 ; 'SI' IMESS1 ; 'FINS' ; 'FINS' ; * Face relative a PCJ1 : * TPCNEG1 . PCI1 . PCJ1 . 'MAV' = TPCNEG1 . PCI1 . PCJ1 . 'MAV' 'ET' MAVKIJN1 ; TPCNEG1 . PCI1 . PCJ1 . 'MPT' = TPCNEG1 . PCI1 . PCJ1 . 'MPT' 'ET' PCK1 ; 'SINO' ; TPCNEG1 . PCI1 . PCJ1 . 'MAV' = MAVKIJN1 ; 'FINS' ; TPCPOS1 . PCI1 . PCJ1 . 'MAV' = TPCPOS1 . PCI1 . PCJ1 . 'MAV' 'ET' MAVKIJP1 ; TPCPOS1 . PCI1 . PCJ1 . 'MPT' = TPCPOS1 . PCI1 . PCJ1 . 'MPT' 'ET' PCK1 ; 'SINO' ; TPCPOS1 . PCI1 . PCJ1 . 'MAV' = MAVKIJP1 ; 'FINS' ; * Arete suivante : * 'ITER' BK1 ; 'SINO' ; 'MESS' 'QUIT' BI1 ; 'FINS' ; 'FINS' ; * * * Test Si Face PCI1-PCK1 deja coupee : * 'MESS' 'QUIT' BI1 ; 'FINS' ; 'SI' IMESS1 ; 'FINS' ; * Arete PCI1-PCJ1-PCK1 : * MAVIKJN1 = TPCNEG1 . PCI1 . PCK1 . PCJ1 . 'MAV' ; MAVIKJP1 = TPCPOS1 . PCI1 . PCK1 . PCJ1 . 'MAV' ; TPCNEG1 . PCI1 . PCJ1 . PCK1 = TPCNEG1 . PCI1 . PCK1 . PCJ1 ; TPCPOS1 . PCI1 . PCJ1 . PCK1 = TPCPOS1 . PCI1 . PCK1 . PCJ1 ; * Point intersection PVK0 : * 'SI' IPREMK1 ; IPREMK1 = FAUX ; PVKI1 = PVK0 ; 'SI' IMESS1 ; 'FINS' ; 'SINO' ; PVKI2 = PVK0 ; 'SI' IMESS1 ; 'FINS' ; 'FINS' ; * Face relative a PCJ1 : * TPCNEG1 . PCI1 . PCJ1 . 'MAV' = TPCNEG1 . PCI1 . PCJ1 . 'MAV' 'ET' MAVIKJN1 ; TPCNEG1 . PCI1 . PCJ1 . 'MPT' = TPCNEG1 . PCI1 . PCJ1 . 'MPT' 'ET' PCK1 ; 'SINO' ; TPCNEG1 . PCI1 . PCJ1 . 'MAV' = MAVIKJN1 ; 'FINS' ; TPCPOS1 . PCI1 . PCJ1 . 'MAV' = TPCPOS1 . PCI1 . PCJ1 . 'MAV' 'ET' MAVIKJP1 ; TPCPOS1 . PCI1 . PCJ1 . 'MPT' = TPCPOS1 . PCI1 . PCJ1 . 'MPT' 'ET' PCK1 ; 'SINO' ; TPCPOS1 . PCI1 . PCJ1 . 'MAV' = MAVIKJP1 ; 'FINS' ; * Arete suivante : * 'ITER' BK1 ; 'SINO' ; 'MESS' 'QUIT' BI1 ; 'FINS' ; 'FINS' ; * Sinon : calcul intersection : * 'SI' IMESS1 ; 'FINS' ; 'SI' ((XCK1 * XCK2) '>EG' 0.) ; 'QUIT' BI1 ; 'FINS' ; XBARY1 = XCK2 / (XCK2 - XCK1) ; 'SI' (XCK1 '>'0.) ; 'SINO' ; 'FINS' ; TPCNEG1 . PCI1 . PCJ1 . PCK1 . 'MAV' = MAVIJKN1 ; TPCPOS1 . PCI1 . PCJ1 . PCK1 . 'MAV' = MAVIJKP1 ; * Face relative a PCJ1 : * TPCNEG1 . PCI1 . PCJ1 . 'MAV' = TPCNEG1 . PCI1 . PCJ1 . 'MAV' 'ET' MAVIJKN1 ; TPCNEG1 . PCI1 . PCJ1 . 'MPT' = TPCNEG1 . PCI1 . PCJ1 . 'MPT' 'ET' PCK1 ; 'SINO' ; TPCNEG1 . PCI1 . PCJ1 . 'MAV' = MAVIJKN1 ; 'FINS' ; TPCPOS1 . PCI1 . PCJ1 . 'MAV' = TPCPOS1 . PCI1 . PCJ1 . 'MAV' 'ET' MAVIJKP1 ; TPCPOS1 . PCI1 . PCJ1 . 'MPT' = TPCPOS1 . PCI1 . PCJ1 . 'MPT' 'ET' PCK1 ; 'SINO' ; TPCPOS1 . PCI1 . PCJ1 . 'MAV' = MAVIJKP1 ; 'FINS' ; 'SI' IPREMK1 ; IPREMK1 = FAUX ; PVKI1 = PVK0 ; 'SI' IMESS1 ; 'FINS' ; 'SINO' ; PVKI2 = PVK0 ; 'SI' IMESS1 ; 'FINS' ; 'FINS' ; 'FIN' BK1 ; * * * Construction segment intersection Face avec le Plan : * * Face relative a PCJ0 : * TPCNEG1 . PCI1 . PCJ0 . PCJ1 . 'MAV' = MAVIJK0 ; TPCPOS1 . PCI1 . PCJ0 . PCJ1 . 'MAV' = MAVIJK0 ; 'SI' IPREMJ1 ; IPREMJ1 = FAUX ; MAVIJ0 = MAVIJK0 ; 'SINO' ; MAVIJ0 = MAVIJ0 'ET' MAVIJK0 ; TPCNEG1 . PCI1 . PCJ0 . 'MPT' = TPCNEG1 . PCI1 . PCJ0 . 'MPT' 'ET' PCJ1 ; TPCPOS1 . PCI1 . PCJ0 . 'MPT' = TPCPOS1 . PCI1 . PCJ0 . 'MPT' 'ET' PCJ1 ; 'FINS' ; * Face relative a PCJ1 : * * Partie NEG : * TPCNEG1 . PCI1 . PCJ1 . PCJ0 . 'MAV' = MAVIJK0 ; TPCNEG1 . PCI1 . PCJ1 . 'MAV' = MAVIJN1 ; TPCNEG1 . PCI1 . PCJ1 . 'MPT' = TPCNEG1 . PCI1 . PCJ1 . 'MPT' 'ET' PCJ0 ; * Partie POS : * TPCPOS1 . PCI1 . PCJ1 . PCJ0 . 'MAV' = MAVIJK0 ; MAVIJP1 = TPCPOS1 . PCI1 . PCJ1 . 'MAV' 'ET' MAVIJK0 ; TPCPOS1 . PCI1 . PCJ1 . 'MAV' = MAVIJP1 ; TPCPOS1 . PCI1 . PCJ1 . 'MPT' = TPCPOS1 . PCI1 . PCJ1 . 'MPT' 'ET' PCJ0 ; * Cellule PCI1 : * TPCNEG1 . PCI1 . 'MPT' = TPCNEG1 . PCI1 . 'MPT' 'ET' PCJ1 ; TPCNEG1 . PCI1 . 'MAV' = TPCNEG1 . PCI1 . 'MAV' 'ET' MAVIJN1 ; 'SINO' ; TPCNEG1 . PCI1 . 'MAV' = MAVIJN1 ; 'FINS' ; TPCPOS1 . PCI1 . 'MPT' = TPCPOS1 . PCI1 . 'MPT' 'ET' PCJ1 ; TPCPOS1 . PCI1 . 'MAV' = TPCPOS1 . PCI1 . 'MAV' 'ET' MAVIJP1 ; 'SINO' ; TPCPOS1 . PCI1 . 'MAV' = MAVIJP1 ; 'FINS' ; 'FIN' BJ1 ; * * 'SI' IMESS1 ; 'FINS' ; * * * Face relative a PCJ0 : * TPCNEG1 . PCI1 . PCJ0 . 'MAV' = MAVIJ0 ; TPCPOS1 . PCI1 . PCJ0 . 'MAV' = MAVIJ0 ; * * * Cellule PCI1 : * * Partie NEG : * TPCNEG1 . PCI1 . 'MAV' = TPCNEG1 . PCI1 . 'MAV' 'ET' MAVIJ0 ; TPCNEG1 . PCI1 . 'MPT' = TPCNEG1 . PCI1 . 'MPT' 'ET' PCJ0 ; * Partie POS : * TPCPOS1 . PCI1 . 'MAV' = TPCPOS1 . PCI1 . 'MAV' 'ET' MAVIJ0 ; TPCPOS1 . PCI1 . 'MPT' = TPCPOS1 . PCI1 . 'MPT' 'ET' PCJ0 ; * * * Pts. Ref. de toutes les cellules : * TPCNEG1 . 'MPT' = TPCNEG1 . 'MPT' 'ET' PCI1 ; TPCNEG1 . 'MAV' = TPCNEG1 . 'MAV' 'ET' TPCNEG1 . PCI1 . 'MAV' ; 'SINO' ; TPCNEG1 . 'MAV' = TPCNEG1 . PCI1 . 'MAV' ; 'FINS' ; TPCPOS1 . 'MPT' = TPCPOS1 . 'MPT' 'ET' PCI1 ; TPCPOS1 . 'MAV' = TPCPOS1 . 'MAV' 'ET' TPCPOS1 . PCI1 . 'MAV' ; 'SINO' ; TPCPOS1 . 'MAV' = TPCPOS1 . PCI1 . 'MAV' ; 'FINS' ; 'FIN' BI1 ; * * 'SI' ITRAC1 ; 'TITR' ' Partie Gauche' ; 'TITR' ' Partie droite' ; 'FINS' ; * * 'RESP' TPCNEG1 TPCPOS1 ; * * 'FINP' ; *---------------------------------------------------------------------* * FIN PROCEDURE @COUPLAN *
© Cast3M 2003 - Tous droits réservés.
Mentions légales