* CH_THETA PROCEDUR JB251061 21/06/14 21:15:01 11034 * ============================================================================= * PROCEDURE DE CALCUL DU CHAMP THETA/PI * ------------------------------------- * * DESCRIPTION : DETERMINE UN CHPOINT DE NORME CONSTANTE A L'INTERIEUR D'UNE * COURONNE ENTOURANT LE FRONT DE FISSURE ET NUL A L'EXTERIEUR DE * CETTE COURONNE. LE CHPOINT THETA AINSI DEFINI REPRESENTE LA * DIRECTION DE PROPAGATION EVENTUELLE DE LA FISSURE. * ============================================================================= * ON DETERMINE CE QUE L'ON CALCULE CALCUL = VRAI ; SINON ; CALCUL = FAUX ; SINON ; SI BOOL.'DJ/DA' ; CALCUL = VRAI ; SINON ; SINON ; FINSI ; FINSI ; SINON ; FINSI ; FINSI ; FINSI ; * SI RESULT = RIEN C'EST QU'ON A DEJA TOUT CE QU'IL FAUT SI (EGA RESULT 'RIEN') ; FINSI ; * RECUPERATION DE CERTAINES DONNEES GDIME = OBJUTI.'DIMENSION' ; MAILLAGE = SUPTAB.'MAILLAGE' ; CRACK = SUPTAB.'FISSURE' ; FRON1 = SUPTAB.'FRONT_FISSURE' ; MOD_MEC = OBJUTI.'MOD_MEC' ; * QUELQUES MOTS UTILES * (ON EXTRAIT LES GDIME PREMIERS MOTS CAR ON NE VEUT PAS DES ROTATIONS * DANS LE CAS DES COQUES) SI (EGA GDIME 3) ; FINSI ; * VECTEUR NUL SI (EGA GDIME 2) ; VNUL = 0. 0. ; SINON ; VNUL = 0. 0. 0. ; FINSI ; * NOEUDS POUR LESQUELS ON VEUT FAIRE LE CALCUL SI ((EGA GDIME 3) ET (NON BOOL.'COQ')) ; NOAV = SUPTAB.'NOEUDS_AVANCES' ; SINON ; NOAV = FRON1 ; FINSI ; FINSI ; * ============================================================================= * PARTIE 1 : CALCUL DU CHAMP THETA OU PI * -------------------------------------- * I - COMPATIBILITE DES DONNEES * ----------------------------- * VERIFICATION DE LA VALEUR DE 'ELEM' SI (EGA GELEM ' ') ; FINSI ; * DEFINITION DU MAILLAGE ET DU NOMBRE DE NOEUDS MAILLAGE = SUPTAB.'MAILLAGE' ; SINON ; FINSI ; * VERIFICATION QUE L'EPAISSEUR EST DONNEE POUR LES COQUES MESS 'ERREUR : L EPAISSEUR DE LA COQUE N EST PAS DONNEE' ; FINSI ; * VERIFICATIONS SUR LA FISSURE : * ****************************** * DEFINITION DE LA FISSURE MESS 'ERREUR : LA FISSURE DU PROBLEME N EST PAS DONNEE' ; SINON ; CRACK = SUPTAB.'FISSURE' ; FINSI ; * VERIFICATION QUE LA FISSURE EST DE TYPE MAILLAGE FINSI ; * VERIFICATION QU'IL N'Y A PAS DE NOEUDS DOUBLES SI (NEG NB1 NB2) ; MESS 'ERREUR : IL Y A DES NOEUDS DOUBLES ENTRE' ; FINSI ; * VERIFICATION QUE LA FISSURE EST UNE LIGNE EN 2D OU 3D COQUE * ET UNE SURFACE EN 3D MASSIF SI ((EGA GDIME 2) OU ((EGA GDIME 3) ET BOOL.'COQ')) ; MESS ' LA FISSURE DOIT ETRE UNE LIGNE' ; FINSI ; FINSI ; SI ((EGA GDIME 3) ET (NON BOOL.'COQ')) ; MESS ' LA FISSURE DOIT ETRE UNE LIGNE' ; FINSI ; FINSI ; * VERIFICATIONS SUR LE FRONT DE FISSURE : * *************************************** * VERIFICATION QUE LE FRONT EST FOURNI MESS 'ERREUR : LE FRONT DE LA FISSURE N''EST PAS DONNE' ; FINSI ; SI (NEG NB1 NB2) ; MESS 'ERREUR : IL Y A DES NOEUDS DOUBLES ENTRE LE' ; FINSI ; * VERIFICATION QUE LE FRONT DE FISSURE EST UNE LIGNE EN 3D MASSIF * ET UN POINT EN 2D OU 3D COQUE SI ((GDIME EGA 3) ET (NON BOOL.'COQ')) ; SI (NEG MFRONT 'MAILLAGE') ; MESS 'ERREUR : EN 3D AVEC ELEMENTS MASSIFS LE FRONT' ; FINSI ; MESS 'ERREUR : EN 3D AVEC ELEMENTS MASSIFS LE FRONT' ; MESS ' DE LA FISSURE DOIT ETRE UNE LIGNE' ; FINSI ; FINSI ; SI ((GDIME EGA 2) 'OU' ((GDIME EGA 3) ET BOOL.'COQ')) ; SI (NON (EGA MFRONT 'POINT')) ; MESS ' FOND DE LA FISSURE DOIT ETRE UN POINT' ; FINSI ; FINSI ; * VERIFICATION QU'IL N'Y A PAS DE NOEUDS DOUBLES ENTRE LE FRONT ET LA FISSURE SI (NEG NB1 NB2) ; MESS 'ERREUR : IL Y A DES NOEUDS DOUBLES ENTRE LE FRONT' ; FINSI ; * VERIFICATION QUE LE NOMBRE DE COUCHES EST FOURNI COUCHE = SUPTAB.'COUCHE' ; SINON ; * SINON ON DOIT AVOIR FOURNI CHAMP_THETA ET ON DETERMINE * ALORS COUCHE A PARTIR DE CELUI-CI THETA = SUPTAB.'CHAMP_THETA' ; COUCHE = 0 ; MAIL1 = FRON1 ; FINSI ; REPE ICOUCH ; COUCHE = COUCHE + 1 ; SI ((EGA NCRIT 0)) ; QUIT ICOUCH ; FINSI ; MAIL1 = MAIL2 ; FIN ICOUCH ; LIST COUCHE ; SINON ; MESS 'ERREUR : IL FAUT SOIT LE NOMBRE DE COUCHES SOIT UN CHAMP THETA' ; FINSI ; FINSI ; SI CALCUL ; * VERIFICATIONS UNIQUEMENT SI CALCUL DU CHAMP GLOBAL * CAS 3D : VERIFICATIONS EN CAS DE TUYAU DROIT ET COUDE : * ******************************************************* * TTD = TRANSLATION TUYAUTERIE DROITE * RTD = ROTATION TUYAUTERIE DROITE * RC = ROTATION COUDE * DEFINITION DE BOOLEENS UTILES SI (EGA GDIME 3) ; SI (LPOINT1 ET LPOINT2 ET LPOINT3) ; * LES 3 POINTS SONT DONNES SI (LCHTRAN OU LOPERA) ; * SI ON DONNE LES 3 POINTS PLUS L'UN DE CES 2 INDICES ON NE SAIT PAS QUOI FAIRE SINON ; * ON A UNIQUEMENT LES 3 POINTS DONC LE CAS EST 'TTD' BOOL.'TTD' = VRAI ; BOOL.'RTD' = FAUX ; BOOL.'RC' = FAUX ; PAXEZ1 = SUPTAB.'POINT_1'; PAXEZ2 = SUPTAB.'POINT_2'; PAXEZ3 = SUPTAB.'POINT_3'; FINSI ; SINON ; * IL MANQUE DONC AU MOINS UN POINT SI (LPOINT1 ET LPOINT2) ; * LES POINTS 1 ET 2 SONT DONNES BOOL.'TTD' = FAUX ; POINT_1 = SUPTAB.'POINT_1'; POINT_2 = SUPTAB.'POINT_2'; SI (LCHTRAN ET LOPERA) ; * AVEC CES 2 INDICES EN PLUS ON EST DANS LE CAS 'RC' BOOL.'RTD' = FAUX ; BOOL.'RC' = VRAI ; SINON ; * IL MANQUE AU MOINS UN DES DEUX INDICES SI (LCHTRAN OU LOPERA) ; * S'IL Y EN A UN DES DEUX ALORS IL MANQUE UNE INFO MESS ' TRANSFORME LE COUDE EN TUYAUTERIE DROITE' MESS ' SONT TOUS DEUX OBLIGATOIRES.' ; SINON ; * AUCUN DES DEUX INDICES N'EST DONNE DONC ON EST DANS LE CAS 'RTD' BOOL.'RTD' = VRAI ; BOOL.'RC' = FAUX ; FINSI ; FINSI ; SINON ; * IL MANQUE DONC AU MOINS 2 POINTS SI (LPOINT1 OU LPOINT2) ; * ON NE PEUT RIEN FAIRE AVEC UN SEUL DES DEUX POINTS MESS ' L''AXE PERPENDICULAIRE A LA SECTION FISSUREE.' ; SINON ; * IL N'Y A AUCUN DES POINTS BOOL.'TTD' = FAUX ; BOOL.'RTD' = FAUX ; BOOL.'RC' = FAUX ; FINSI ; FINSI ; FINSI ; * BOOLEEN POUR ROTATION (SINON C'EST FORCEMENT UNE TRANSLATION) BOOL.'ROTATION' = BOOL.'RTD' OU BOOL.'RC' ; SINON ; * PAS EN 3D DONC AUCUN DES INDICES NE DOIT ETRE RENSEIGNE SI (LCHTRAN OU LOPERA OU LPOINT1 OU LPOINT2 OU LPOINT3) ; MESS 'ERREUR : UN DES INDICES RENSEIGNES NECESSITE' ; SINON ; * AUCUN DES INDICES N'A ETE RENSEIGNE DONC ON EST DANS AUCUN DES CAS BOOL.'TTD' = FAUX ; BOOL.'RTD' = FAUX ; BOOL.'RC' = FAUX ; FINSI ; FINSI ; * CAS 2D : VERIFICATIONS EN CAS DE FISSURE CIRCULAIRE SI (EGA GDIME 2) ; * BOOLEEN POUR ROTATION (SINON C'EST FORCEMENT UNE TRANSLATION) SI BOOL.'ROTATION' ; PCENTRE = SUPTAB.'POINT_CENTRE' ; FINSI ; FINSI ; FINSI ; * II - EXTRACTION DES MAILLAGES NECESSAIRES * ----------------------------------------- * CREATION DU MAILLAGE GLOBAL A BOUGER : MBOUGER MBOUGER = FRON1 ; REPE IBOUG COUCHE ; FIN IBOUG ; * CREATION DU SUPPORT GLOBAL DU CHAMP THETA : MAIL * EN 3D MASSIF ON DECOUPE LE MAILLAGE EN TRANCHES SI ((EGA GDIME 3) ET (NON BOOL.'COQ')) ; * ON ORDONNE LE FRONT DE FISSURE * DETERMINATION DES NOEUDS DU FRONT DANS L'ORDRE DE PARCOURT FIN IAJOU ; FIN IELEM ; * DECOUPAGE EN TRANCHES DE MAIL ET MBOUGER REPE ICOUCH (COUCHE + 1) ; I1 = (N1*(&IELEM - 1)) + 1 ; I2 = I1 + N1 ; SURF1 = TMAIL.I1 ; SURF2 = TMAIL.I2 ; TMAIL.I1 = SURF1 ; SI (EGA N1 2) ; TMAIL.(I1 + 1) = MIL1 ; FINSI ; FIN IELEM ; SI (EGA &ICOUCH COUCHE) ; FINSI ; FIN ICOUCH ; * SI LE FRONT EST FERME ON ENLEVE LES DERNIERS INDICES DES TABLEAUX * CAR ILS SONT IDENTIQUES AUX PREMIERS SI (NON FDEBOUCH) ; FINSI ; * ON AJOUTE LES MAILLAGES GLOBAUX TPFISS.(NPFISS + 1) = FRON1 ; TMAIL.(NPFISS + 1) = MAIL ; TMBOUGER.(NPFISS + 1) = MBOUGER ; FINSI ; * III - CALCUL DU CHAMP THETA/PI * ------------------------------ SI CALCUL ; * III.1 - DIRECTION DE PROPAGATION * ******************************** * CAS 2D OU 3D COQUE : * ******************** SI ((EGA GDIME 2) OU BOOL.'COQ') ; * ON DETERMINE LA DIRECTION DE PROPAGATION * ON FAIT LA MOYENNE SUR LES DEUX POINTS QUI NE SONT PAS FRON1 * POUR LE CAS OU LES DEUX LEVRES SONT MODELISEES VECTEUR = VNUL ; REPE IELEM NELEM ; FIN IELEM ; VECTEUR = VECTEUR / NELEM ; FINSI ; * CAS 3D MASSIF : * *************** SI ((EGA GDIME 3) ET (NON BOOL.'COQ')) ; * DETERMINATION DU VECTEUR NORMAL AU PLAN DE FISSURE FIN IELEM ; * PASSAGE DU TUYAU EN PLAQUE SI BOOL.'TTD' ; FINSI ; * DIRECTION D'AVANCEE DE FISSURE EN CHAQUE POINT DU FRONT SI FDEBOUCH ; * SI LE FRONT EST DEBOUCHANT ON ENLEVE LE PREMIER ET LE DERNIER NOEUD... I0 = 1 ; * ...ET ON LES TRAITE ICI REPE IENT 2 ; * ON BOUCLE SUR LE PREMIER ET LE DERNIER NOEUD P1 = TPFISS.INOEU ; * ON BOUCLE SUR LE OU LES SEGMENTS APPUYES SUR P1 (1 OU 2 LEVRES DONNEES) FIN IELEM ; FIN IENT ; SINON ; I0 = 0 ; FINSI ; * POINTS P1 ET P2 DE PART ET D'AUTRE DU POINT &IPFISS * ON OBTIENT LE VECTEUR TANGENT AU FRONT * LE PRODUIT VECTORIEL AVEC VNORM DONNE LA DIRECTION DE PROPAGATION FIN IPFISS ; * ON AJOUTE LE CHAMP GLOBAL DE DIRECTION DE PROPAGATION * ON BOUCLE SUR LES NOEUDS POUR DETERMINER LE MIN DES NORMES DES VECTEURS REPE IPFISS NPFISS ; FIN IPFISS ; * PUIS ON REBOUCLE POUR CREER LE CHPO DE DIRECTION REPE IPFISS NPFISS ; GDIR = GDIR + CHPO1 ; FIN IPFISS ; TVECTEUR.(NPFISS + 1) = GDIR ; * ON REPASSE LA PLAQUE EN TUYAU SI BOOL.'TTD' ; FINSI ; VECTEUR = GDIR ; FINSI ; * III.2 - CHAMP THETA GLOBAL * ************************** * CONFIGURATION INITIALE * ON COMMENCE PAR DEPLACER LES NOEUDS DE MBOUGER SI BOOL.'ROTATION' ; * CAS DE LA ROTATION ANG1 = .01 ; SI (EGA GDIME 2) ; SINON ; SI BOOL.'RC' ; DEPL OPER1 MAILLAGE SUPTAB.'CHPOINT_TRANSFORMATION' ; FINSI ; SI BOOL.'RC' ; FINSI ; FINSI ; SINON ; * CAS DE LA TRANSLATION SI BOOL.'TTD' ; FINSI ; SI BOOL.'TTD' ; FINSI ; FINSI ; * ON CREE MAIL2 * PUIS ON INVERSE LA TRANSFORMATION SI BOOL.'ROTATION' ; * CAS DE LA ROTATION SI (EGA GDIME 2) ; SINON ; SI BOOL.'RC' ; DEPL OPER1 MAILLAGE SUPTAB.'CHPOINT_TRANSFORMATION' ; FINSI ; SI BOOL.'RC' ; FINSI ; FINSI ; SINON ; * CAS DE LA TRANSLATION SI BOOL.'TTD' ; FINSI ; SI BOOL.'TTD' ; FINSI ; FINSI ; * CHAMP THETA GLOBAL * ON REND THETA COMPATIBLE AVEC LES RELATIONS DE CONFORMITE DU MODELE * ON REPREND LA CONFIGURATION INITIALE DANS LE CAS OU ELLE AURAIT ETE * MODIFIEE PAR DEPL FORM CONF0 ; * STOCKAGE DANS SUPTAB FINSI ; * IV - CREATION ET REMPLISSAGE DE LA TABLE TTHETA * ----------------------------------------------- * FONCTIONS D'INTERPOLATION SI ((EGA GDIME 3) ET (NON BOOL.'COQ')) ; REPE IPFISS NPFISS ; TINTER.&IPFISS = FINTER ; FINSI ; FIN IPFISS ; SINON ; FINSI ; * TABLE TTHETA FINTER = TINTER.(TIND.&IIND) ; THETI = FINTER * THETA ; TTHETA.FFRON = THETI ; FIN IIND ; SI ((EGA GDIME 3) ET (NON BOOL.'COQ')) ; TTHETA.'GLOBAL' = THETA ; FINSI ; * V - NORMALISATION DU CHAMP THETA * -------------------------------- * CE QU'ON VEUT C'EST QUE LA SURFACE DE FISSURE CREEE PAR LE MOUVEMENT INFINITESIMAL * EPS1*THETA SOIT EGALE A 2.*EPS1 LORSQUE EPS1 << 1. * NB : ON VEUT 2.*EPS1 CAR LA FISSURE A FORCEMENT DEUX LEVRES, MEME SI UNE SEULE * EST MODELISEE ! * PARTIE DE LA FISSURE QUI AVANCE * MODELE THERMIQUE ISOTROPE POUR INTEGRER SUR LES LEVRES DE FISSURE * AVANTAGE : FONCTIONNE DANS TOUS LES CAS * (2D, 3D ET PAS BESOIN DE MULTIPLIER PAR 2*PI*R EN AXISYMETRIQUE) * ON CALCULE L'AIRE INITIALE * ON DETERMINE LA DIMENSION CARACTERISTIQUE LMIN DU MAILLAGE DU FRONT * PETIT FLOTTANT POUR QUE LE MOUVEMENT SOIT INFINITESIMAL EPS1 = 1.E-4 ; * BOUCLE SUR LES CHAMPS THETI = TTHETA.(TIND.&ICHAM) ; * ON CREE UN CHAMP THETI DONT LA NORME EST PROCHE DE LA DIMENSION DES ELEMENTS * ON DEPLACE LES NOEUDS, ON CALCULE L'AIRE, PUIS ON INVERSE LA TRANSFORMATION * DELTA_A EST LA SURFACE DE FISSURE CREEE PAR LEVRE DELTA_A = (A1 - A0) / EPS1 ; SI BOOL.'COQ' ; * POUR LES COQUES IL FAUT MULTIPLIER PAR L'EPAISSEUR DELTA_A = DELTA_A * SUPTAB.'EPAISSEUR' ; FINSI ; THETI = THETI * 2. / DELTA_A ; * ON REND LES THETI COMPATIBLES AVEC LES RELATIONS DE CONFORMITE DU MODELE TTHETA.(TIND.&ICHAM) = THETI ; FIN ICHAM ; * STOCKAGE DANS SUPTAB * ============================================================================= * PARTIE 2 : EXTRACTION DE LA DIRECTION DE PROPAGATION * ---------------------------------------------------- * ON EXTRAIT LA DIRECTION DE PROPAGATION ET LES NORMALES DU CHAMP THETA CHTHETA = SUPTAB.'CHAMP_THETA' ; DIR1 = DIR1 / NDIR1 ; SI (NON BOOL.'COQ') ; SINON ; FINSI ; DIR2 = DIR2 / NDIR2 ; SI (EGA GDIME 3) ; FINSI ; FINSI ; * ON STOCKE LES DIRECTIONS DANS OBJUTI OBJUTI.'DIRECTION1' = DIR1 ; SI (NON BOOL.'COQ') ; OBJUTI.'DIRECTION2' = DIR2 ; SI (EGA GDIME 3) ; OBJUTI.'DIRECTION3' = DIR3 ; FINSI ; FINSI ; FINSI ; * ============================================================================= * PARTIE 3 : APPEL RECURSIF POUR LE CALCUL DU CHAMP PI * ---------------------------------------------------- * SI L'OBJECTIF EST 'DJ/DA' ET QU'ON A PAS ENCORE DETERMINE LE CHAMP PI, ALORS * ON RELANCE CH_THETA SUR UNE COPIE DE SUPTAB AVEC LES MODIFICATIONS * NECESSAIRES, PUIS ON EXTRAIT LES INDICES 'CHAMP_PI' ET 'TAB_PI' DU RESULTAT SUPTAB2.'COUCHE' = (SUPTAB.'COUCHE') - 1 ; SINON ; SUPTAB2.'FRONT_FISSURE' = SUPTAB.'FRONT_FISSURE_2' ; SUPTAB2.'FISSURE' = SUPTAB.'FISSURE_2' ; FINSI ; CH_THETA SUPTAB2 OBJUTI BOOL ; SUPTAB.'CHAMP_PI' SUPTAB.'TAB_PI' = SUPTAB2.'CHAMP_PI' SUPTAB2.'TAB_PI' ; FINSI ; FINP ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales