* fichier : orieelem.dgibi ************************************************************************ * NOM : ORIEELEM * DESCRIPTION : On teste ORIE et INVE pour les elements massifs * sur des maillages à 1 element. * Egalement, on peut tracer les elements pour savoir * comment ils sont numerotes ! * * Mots-cles : element de reference, numerotation, orientation, inversion * Mots-clés : élément de référence, numérotation * * * LANGAGE : GIBIANE-CAST3M * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF) * mél : stephane.gounand@cea.fr ********************************************************************** * VERSION : v1, 09/05/2016, version initiale * HISTORIQUE : v1, 09/05/2016, création * HISTORIQUE : * HISTORIQUE : ************************************************************************ 'SAUT' 'PAGE' ; graph = faux ; interact = faux ; * *'OPTI' debu 1 ; * * verifie que deux elements sont parfaitement identiques : * noeuds decrits dans le meme ordre 'DEBPROC' egael ; 'ARGUMENT' el1*'MAILLAGE' ; 'ARGUMENT' el2*'MAILLAGE' ; * Operateur ou directive ? Si directive, on signale les erreurs * Sinon on renvoie la valeur du test. 'ARGUMENT' loper/'LOGIQUE' ; 'SI' ('NON' ('EXISTE' loper)) ; loper=vrai ; 'FINSI' ; lok = vrai ; * 1 seul err = 'OU' ('NEG' nbl1 1) ('NEG' nbl2 1) ; lok = lok 'ET' ('NON' err) ; 'SI' ('ET' err ('NON' loper)) ; 'ERREUR' 'Un seul element pour les entrees' ; 'FINSI' ; * type err = 'NEG' tel1 tel2 ; lok = lok 'ET' ('NON' err) ; 'SI' ('ET' err ('NON' loper)) ; 'ERREUR' 'Type differents' ; 'FINSI' ; err = 'NEG' nno1 nno2 ; lok = lok 'ET' ('NON' err) ; 'SI' ('ET' err ('NON' loper)) ; 'ERREUR' 'Pas le meme nbno pour les entrees' ; 'FINSI' ; * Boucle * Ici, on suppose que le CHAN POI1 conserve l'ordre des noeuds de * chaque element. A un moment, on a pense qu'une syntaxe type : * p1 = POIN el1 &ino 'ELEM' 'TRI3' 1 ; * serait plus claire. * pel1 = 'CHANGER' 'POI1' el1 ; pel2 = 'CHANGER' 'POI1' el2 ; 'REPETER' ino nno1 ; err = 'NEG' p1 p2 ; lok = lok 'ET' ('NON' err) ; 'SI' ('ET' err ('NON' loper)) ; 'ERREUR' 'Pas les memes numeros de noeuds pour les entrees' ; 'FINSI' ; 'FIN' ino ; 'SI' loper ; 'RESPRO' lok ; 'FINSI' ; 'FINPROC' ; * * * 'ARGUMENT' el*'MAILLAGE' ; 'MESSAGE' nomel ; * On vérifie que : * 1) inve() .ne. Id * 2) inve(inve()) = Id * 3) orie(inve())=Id * 4) orie()=Id car les elements sont orientes positivement de base ivel = 'INVERSE' el ; ivivel = 'INVERSE' ivel ; 'MESSAGE' 'NON EGAEL el ivel ;' ; tst = EGAEL el ivel ; 'SI' tst ; 'ERREUR' 'lelement et son inverse sont identiques' ; 'FINSI' ; 'MESSAGE' 'EGAEL el ivivel ;' ; EGAEL el ivivel faux ; 'MESSAGE' 'EGAEL el orivel ;' ; orivel = 'ORIENTER' ivel ; EGAEL el orivel faux ; 'MESSAGE' 'EGAEL el orel ;' ; orel = 'ORIENTER' el ; EGAEL el orel faux ; 'SI' graph ; 'FINSI' ; * 'FINPROC' ; * * * 'DEBPROC' veri2 ; 'ARGUMENT' el*'MAILLAGE' ; 'ARGUMENT' eli*'MAILLAGE' ; 'ELIMINATION' ('ET' el eli) 1.D-6 ; 'MESSAGE' nomel ; * On vérifie que : * 1) inve(el) .eq. eli ivel = 'INVERSE' el ; 'MESSAGE' 'EGAEL ivel eli ;' ; EGAEL ivel eli faux ; 'FINPROC' ; * * Fin des procedures * * 'REPETER' idim 3 ; dim = &idim ; *dim = 3 ; 'SI' ('EGA' dim 1) ; * * p3 = 'POIN' 0.5 ; * On construit un inverse à la main... * Cela sert surtout pour les QUAFs 3D où on veut vérifier que l'on ne * s'est pas trompé sur les noeuds faces et centre dans la programmation * de inver4.eso se3i = 'CHANGER' se2i 'QUAD' ; VERI2 se3 se3i ; 'FINSI' ; 'SI' ('EGA' dim 2) ; p1 = 0. 0. ; p2 = 1. 0. ; p3 = 1. 1. ; p4 = 0. 1. ; * * Les inverses * tr6i = 'CHANGER' tr3i 'QUAD' ; VERI2 tr6 tr6i ; tr7i = 'CHANGER' tr6i 'QUAF' ; VERI2 tr7 tr7i ; qu8i = 'CHANGER' qu4i 'QUAD' ; VERI2 qu8 qu8i ; qu9i = 'CHANGER' qu8i 'QUAF' ; VERI2 qu9 qu9i ; 'FINSI' ; 'SI' ('EGA' dim 3) ; p1 = 0. 0. 0. ; p2 = 1. 0. 0. ; p3 = 1. 1. 0. ; p4 = 0. 1. 0. ; p5 = 0. 0. 1. ; p6 = 1. 0. 1. ; p7 = 1. 1. 1. ; p8 = 0. 1. 1. ; * * Les inverses * te10i = 'CHANGER' te4i 'QUAD' ; VERI2 te10 te10i ; te15i = 'CHANGER' te10i 'QUAF' ; VERI2 te15 te15i ; py13i = 'CHANGER' py5i 'QUAD' ; VERI2 py13 py13i ; py19i = 'CHANGER' py13i 'QUAF' ; VERI2 py19 py19i ; pr15i = 'CHANGER' pr6i 'QUAD' ; VERI2 pr15 pr15i ; pr21i = 'CHANGER' pr15i 'QUAF' ; VERI2 pr21 pr21i ; cu20i = 'CHANGER' cu8i 'QUAD' ; VERI2 cu20 cu20i ; cu27i = 'CHANGER' cu20i 'QUAF' ; VERI2 cu27 cu27i ; * Test orientation decoupage tetra en cube * Ce test provoquait une erreur incorrecte * ***** ERREUR 318 ***** dans l'operateur ORIE * Deux elements adjacents ont des orientations opposees * avant les modifs de la fiche 8985. c1 = 'CHANGER' 'TET4' te15 ; c2 = 'CHANGER' 'QUAF' c1 ; c3 = 'CHANGER' 'CUB8' c2 ; tt = 'ORIENTER' c3 ; 'FINSI' ; 'FIN' idim ; 'SI' interact ; 'OPTION' 'DONN' 5 'ECHO' 1 ; 'FINSI' ; * * End of dgibi file ORIEELEM * 'FIN' ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales