* CH_THETX PROCEDUR JB251061 21/06/14 21:15:01 11034 * ============================================================================= *PROCEDURE DE CALCUL DU CHAMP THETA/PI EN XFEM *--------------------------------------------- * * DESCRIPTION : PROCEDURE ANALOGUE A CH_THETA MAIS POUR LES ELEMENTS XFEM. * 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. * ============================================================================= * RECUPERATION DE CERTAINES DONNEES MOD_MEC = OBJUTI.'MOD_MEC' ; M_FRONT = OBJUTI.'FRONT' ; * I - COMPATIBILITE DES DONNEES * ----------------------------- MESS ' TABLE L OBJET MAILLAGE' ; SINON ; MAILLAGE = SUPTAB.'MAILLAGE' ; FINSI ; MESS 'ERREUR : LE FRONT DE LA FISSURE N EST PAS DONNE' ; SINON ; PFISS = SUPTAB.'FRONT_FISSURE' ; SINON ; FINSI ; FINSI ; SINON ; PSI1 = SUPTAB.'PSI' ; PHI1 = SUPTAB.'PHI' ; FINSI ; COUCHE = SUPTAB.'COUCHE' ; SINON ; THETA = SUPTAB.'CHAMP_THETA' ; SINON ; MESS 'ERREUR : IL FAUT SOIT LE NOMBRE DE COUCHES SOIT UN CHAMP THETA' ; FINSI ; FINSI ; * ON DETERMINE SI UNE OU DEUX LEVRES SONT MODELISEES NB_LEVRES = 2 ; * SI UNE DEMI-EPROUVETTE EST MODELISEE, * ON ESPERE QUE PHI(X)>0 OU <0 QQSOIT X SI ((MAXY1*MINY1) <EG 0.) ; NB_LEVRES = 1 ; FINSI ; FINSI ; * ELEMENTS POUR LESQUELS ON VEUT FAIRE LE CALCUL SI (EGA GDIME 3) ; NOAV = SUPTAB.'NOEUDS_AVANCES' ; SINON ; FINSI ; FIN INOEU ; FINSI ; * II - CREATION DES CHAMPS THETA * ------------------------------ * II.1 - CAS 2D * ************* SI (EGA GDIME 2) ; * ELEMENT CONTENANT LE FRONT DE FISSURE * TEST POUR VOIR SI ON EST SUR UN NOEUD, DANS UN ELEMENT OU SUR UN BORD SI(LOGPSI10 ET LOGPHI10) ; MBOUGER = EFISS0 ; SINON ; SI((LOGPSI10 OU LOGPHI10) ET (EGA COUCHE 0)) ; MESS ' RESULTAT PROBABLEMENT DE MAUVAISE PRECISION' ; FINSI ; FINSI ; * CREATION DU MAILLAGE A BOUGER : MBOUGER REPE BCOUCH COUCHE ; FIN BCOUCH ; * CREATION DU MAILLAGE OU THETA N'EST PAS NUL : MAIL * PSI ET PHI DOIVENT ETRE ENTIREMENT DEFINIS SUR MAIL SI (NBEL1 NEG 0) ; FINSI ; * DETERMINATION DU CHAMP THETA : * ON DEFINIT UN MODELE THERMIQUE POUR CALCULER LES GRADIENTS * THETA EST PERPENDICULAIRE A GRAD(PHI) ET DANS LE SENS DE GRAD(PSI) * ON UTILISE SIGN POUR S'ASSURER QUE THETA ET GRAD(PSI) SONT DANS LE MEME SENS THETA = SIGN1 * THETA ; * DIRECTION DE PROPAGATION DIR1 SUR LE FRONT AVANT DE CHANGER THETA EN CHPO * ON CHANGE THETA EN CHPO ET ON REDUIT SON SUPPORT A MBOUGER SINON ; * ON INTERPOLE THETA SUR LE FRONT POUR DIR1 FINSI ; * ON NORMALISE DIR1 ET ON CALCULE DIR2 DIR1 = DIR1 / NDIR1 ; * ON NORMALISE THETA ET ON MULTIPLIE PAR 2. / NB_LEVRES THETA = THETA / NTHETA * 2. / NB_LEVRES ; * STOCKAGE TTHETA.FINTER = THETA ; FINSI ; * II.2 - CAS 3D * ************* SI (EGA GDIME 3) ; * ELEMENTS CONTENANT LE FRONT DE FISSURE EPSP = 1.E-4 * DX0 ; EPSN = -1.E-4 * DX0 ; * CREATION DU MAILLAGE A BOUGER : MBOUGER MBOUGER = EFISS0 ; SI (COUCHE > 1) ; REPE ICOUCH (COUCHE - 1) ; FIN ICOUCH ; FINSI ; * CREATION DU MAILLAGE OU THETA N'EST PAS NUL : MAIL * ON VERIFIE QUE PSI ET PHI SONT ENTIEREMENT DEFINIS SUR MAIL SI (NBEL1 NEG 0) ; FINSI ; * ON SE RESTREINT AU DOMAINE DE DEFINITION DE PSI ET PHI * ON COMMENCE PAR CREER LE CHAMP THETA GLOBAL : * ********************************************* * ON DEFINIT UN MODELE THERMIQUE POUR CALCULER LES GRADIENTS * TAW = GRAD(PSI)^GRAD(PHI) * THETA = GRAD(PHI)^TAW * ON CHANGE THETA EN CHPO * ON NORME THETA, EN FAISANT ATTENTION QUE LE CHAMP PEUT ETRE QUASI-NUL * PAR ENDROITS => ON UTILISE MASQ OBJUTI.'V1' = THETA ; * ON REDUIT THETA A MBOUGER * ON FAIT DE MEME AVEC GRAD(PHI), MAIS IL N'EST A PRIORI JAMAIS NUL DONC PAS * BESOIN DE MASQ * ON FAIT DE MEME AVEC TAW, LUI AUSSI PEUT ETRE QUASI-NUL * ON INTERPOLE LES 3 DIRECTIONS SUR LE FRONT * ON LES NORME ET ON LES CHANGE EN DIFFUS * ENSUITE ON IDENTIFIE CHAQUE ELEMENT AUTOUR DU FRONT A BOUGER : * ************************************************************** REPE IPFISS1 NPFISS1 ; * EXTRACTION DES ELEMENTS CONTENANT LE POINT COURANT SI (EGA &IPFISS1 1) ; TAB_ELF.(1) = ELI ; SINON ; * S'IL Y A DES ELEMENTS EN COMMUN AVEC L'AVANT DERNIER INDICE DE LA TABLE * ALORS ON LES ENLEVE ITER IPFISS1 ; FINSI ; FINSI ; FINSI ; FINSI ; * ON REGARDE ENSUITE L'INTERSECTION AVEC LE DERNIER INDICE DE LA TABLE * S'IL N'Y A PAS D'ELEMENT EN COMMUN ON A TERMINE SINON ; * SINON IL FAUT SUPPRIMER/AJOUTER DES ELEMENTS * DANS CE CAS IL Y AVAIT DES ELEMENTS EN TROP DANS LE DERNIER INDICE * => ON LES ENLEVE ET ON MET CE QUI RESTE DANS UN NOUVEL INDICE FINSI ; SINON ; * DANS CE CAS IL Y A DES ELEMENTS EN TROP DANS ELI * => ON LES ENLEVE ET ON STOCKE CE QUI RESTE DANS UN NOUVEL INDICE FINSI ; FINSI ; FINSI ; FIN IPFISS1 ; * CREATION ET REMPLISSAGE DE LA TABLE TTHETA * ****************************************** * FONCTIONS D'INTERPOLATION * ON BOUCLE SUR LES ELEMENTS ENTOURANT LE FRONT MBOUGI = TAB_ELF.&IELF ; ITER IELF ; FINSI ; * ON BOUCLE SUR LE NOMBRE DE COUCHES REPE ICOUCH (COUCHE - 1) ; FIN ICOUCH ; TINTER.(TAB_ELF.&IELF) = FINTER ; FIN IELF ; * TABLE TTHETA FINTER = TINTER.(TIND.&IIND) ; THETI = FINTER * THETA ; TTHETA.(TIND.&IIND) = THETI ; FIN IIND ; TTHETA.'GLOBAL' = THETA ; * NORMALISATION * ************* * PETIT FLOTTANT POUR QUE LE MOUVEMENT SOIT INFINITESIMAL EPS1 = 1.E-4 ; THETI = TTHETA.(TIND.&ICHAM) ; * ON CREE UN CHAMP THETI DONT LA NORME EST PROCHE DE LA DIMENSION DES ELEMENTS THETI = THETI * 2. / DELTA_A ; TTHETA.(TIND.&ICHAM) = THETI ; FIN ICHAM ; * ON REMPLACE THETA PAR LE CHAMP THETA GLOBAL THETA = TTHETA.'GLOBAL' ; FINSI ; * II.3 - STOCKAGE DU CHAMP THETA ET DES DIRECTIONS * ************************************************ SUPTAB.'CHAMP_THETA' = THETA ; FINSI ; SUPTAB.'TAB_THETA' = TTHETA ; OBJUTI.'DIRECTION1' = DIR1 ; OBJUTI.'DIRECTION2' = DIR2 ; SI (EGA GDIME 3) ; OBJUTI.'DIRECTION3' = DIR3 ; FINSI ; FINP ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales