* G_THETA PROCEDUR JB251061 20/11/04 21:17:46 10763 *|=====================================================================| *| | *| OBJECTIF : | *| ========== | *| | *| 1) calculer l'integrale caracteristique de mecanique de la rupture | *| a) J en elasto-plasticite ou en elasto-dynamique pour un | *| materiau isotrope. | *| b) dJ/da en elasto-plasticite, utilisable uniquement dans le cas | *| de materiau isotrope et homogene pour les elements massifs. | *| c) C* dans le cas de fluage secondaire stationnaire pour un | *| materiau isotrope. | *| d) C*H dans le cas de fluage primaire sous un chargement radial | *| pour un materiau isotrope. | *| | *| 2) separer les modes K1, K2 et K3 en elasticite, utilisable | *| uniquement dans le cas de materiau homogene et isotrope | *| pour les elements massifs. | *| | *| | *| ENTREE : | *| ======== | *| | *| SUPTAB objet de type TABLE. En entree, SUPTAB sert a definir les | *| options et les parametres du calcul. Ses indices sont des | *| objets de type MOTS (a ecrire en toutes lettres) dont voici | *| la liste : | *| | *| | *| Arguments obligatoires dans tous les cas | *| ---------------------------------------- | *| | *| SUPTAB.'OBJECTIF' = MOT pour preciser le but du calcul, vaut | *| 1) 'J' pour calculer l'integrale J (ou G), | *| caracteristique en elasto-plastique. | *| 2) 'J_DYNA' pour calculer l'integrale J (ou G), | *| caracteristique en elasto-dynamique. | *| 3) 'C*' pour calculer l'integrale C*, | *| caracteristique en fluage secondaire | *| stationnaire. | *| 4) 'C*H' pour calculer l'integrale C*(h), | *| caracteristique en fluage primaire ou | *| tertiaire. | *| 5) 'DJ/DA' pour calculer l'integrale de la | *| derivation dJ/da, caracteristique pour | *| analyser la stabilite de propagation d'une | *| fissure ou des fissures interagissantes. | *| 6) 'DECOUPLAGE' pour decouper les modes mixtes, | *| c'est a dire la separation des facteurs K1, | *| K2 (et K3 et 3D). | *| | *| SUPTAB.'COUCHE' = ENTIER representant le nombre de couches | *| d'elements autour du front de la fissure | *| qui se deplacent pour simuler la propagtion | *| de la fissure. Il vaut 0 si seul la pointe de | *| la fissure se deplace, 1 si c'est la premiere | *| couche d'elements entourant la fissure, 2 si | *| c'est l'ensemble des premiere et deuxieme couches | *| d'elements etc. Il convient veiller a ce que | *| l'ensemble des elements a deplacer n'atteint pas | *| le bord de la structure fissuree. | *| Si COUCHE et CHAMP_THETA sont tous deux donnés, | *| CHAMP_THETA est écrasé (cf.8.) | *| | *| SUPTAB.'FRONT_FISSURE' = POINT en 2D ou MAILLAGE en 3D massif | *| representant le front de la fissure. | *| | *| | *| Arguments obligatoires avec des elements standards | *| -------------------------------------------------- | *| | *| SUPTAB.'LEVRE_SUPERIEURE' = Selon la convention de definition, cet | *| objet (type MAILLAGE) representant la | *| levre superieure de la fissure. | *| | *| SUPTAB.'LEVRE_INFERIEURE' = Selon la convention de definition, cet | *| objet (type MAILLAGE) representant la | *| la levre inferieure de la fissure. Si | *| une seule levre est modelisee, un des | *| des deux mots ici (LEVRE_SUPERIEURE ou | *| LEVRE_INFERIEURE) sera suffisant pour | *| decrire la fissure. | *| | *| | *| Arguments obligatoires avec des elements enrichis (XFEM) | *| -------------------------------------------------------- | *| | *| SUPTAB.'PSI' = 1ere level set (CHPOINT) decrivant la fissure dans | *| le cas ou l'on utilise des elements XFEM . | *| SUPTAB.'PHI' = 2eme level set. | *| | *| | *| | *| Solution obligatoire issus de la procedure PASAPAS | *| -------------------------------------------------- | *| | *| SUPTAB.'SOLUTION_PASAPAS' = TABLE sortant de la procedure PASAPAS. | *| | *| | *| Solution obligatoire issus de l'operateur RESO | *| ---------------------------------------------- | *| | *| SUPTAB.'SOLUTION_RESO' = CHPOINT de deplacement issus de RESO. | *| SUPTAB.'CARACTERISTIQUES' = Champ de caractristiques matrielles | *| et eventuellement geometriques | *| si necessaire. | *| SUPTAB.'MODELE' = Objet modele (type MMODEL) englobant toute la | *| structure. | *| SUPTAB.'TEMPERATURES' = CHPOINT de temperature creant une contrainte| *| thermique non nulle si elle existe. | *| SUPTAB.'CHARGEMENTS_MECANIQUES' = CHPOINT representant l'ensemble | *| des forces exterieures | *| (surfaciques, volumiques ou | *| ponctuelles ....) appliquees sur | *| le systeme si elles existent, SAUF| *| la pression sur les levres de la | *| fissure | *| SUPTAB.'BLOCAGES_MECANIQUES' = RIGIDITE representant le blocages | *| mecanique du probleme, a fournir | *| uniquement dans le cas de calcul | *| de la derivation dJ/da. | *| | *| | *| Arguments optionnels | *| -------------------- | *| | *| | *| 1 : Materiaux composites (2D massif ou 3D coque seulement) | *| | *| SUPTAB.'MODELES_COMPOSITES' = TABLE indicee par des entiers (1 2... | *| M, M = nombre de Materiaux composites)| *| pour donner les modeles des materiaux | *| ayant des discontinutes de proprietes | *| materielles. | *| | *| 2 : Pour un front de fissure tridimensionnel massif | *| | *| SUPTAB.'NOEUDS_AVANCES' = MAILLAGE de type POI1 pour donner les | *| points du front pour lesquels le calcul | *| sera effectue. Si cet argument est | *| obsent, le calcul sera fait pour tous | *| les noeuds sur le front de la fissure. | *| | *| 3 : Calcul des termes croises de la matrice dJi/daj | *| (i non egal a j) dans le cas des fisures interagissantes. | *| | *| SUPTAB.'FISSURE_2' = Objet de type MAILLAGE representant une autre | *| fissure (levres superieure + inferieure si | *| toutes les deux levres sont presentes). | *| SUPTAB.'FRONT_FISSURE_2' = POINT ou MAILLAGE reprsentant le front | *| de la fissure 2 decrite ci-dessus. | *| | *| | *| 4 : Cas d'une fissure circulaire dans une geometrie plane | *| | *| SUPTAB.'POINT_CENTRE' = centre de la fissure circulaire | *| | *| 5 : Cas ou l'extension de la fissure correspond a une simple | *| translation dans un tuyauterie droite (3D). Dans ce cas | *| on effectue dans la procedure CH_THETA une transformation | *| de tuyau en plaque en passant au systeme de coordonnees | *| cylindriques. Il est alors necessaire de fournir : | *| | *| SUPTAB.'POINT_1' = centre du systeme de coordonnees | *| SUPTAB.'POINT_2' = POINT tel que l'axe defini par POINT_1 | *| vers POINT_2 soit l'axe Z poisitif | *| SUPTAB.'POINT_3' = POINT tel que le plan defini par les 3 points | *| POINT_1 POINT_2 POINT_3 donne l'angle theta nul | *| | *| 6 : Cas ou l'extension de la fissure ne correspond | *| pas a une simple translation (3D) | *| | *| 6.1 Fissure dans un tuyauterie droite (3D, Rotation) | *| | *| SUPTAB.'POINT_1' = Objet de type POINT | *| SUPTAB.'POINT_2' = Objet de type POINT qui, avec le point POINT_1, | *| constitue l'axe perpendiculaire a la section | *| fissuree. | *| | *| 6.2 Fissure dans un coude (3D, rotation + transformation) | *| Outre les deux points SUPTAB.'POINT_1' et SUPTAB.'POINT_2' | *| definis en haut on donne encore : | *| | *| SUPTAB.'CHPOINT_TRANSFORMATION' = Objet de type CHPOINT utilise | *| pour transformer une coude en un | *| tuyauterie droite. | *| SUPTAB.'OPERATEUR' = Objet de type MOT valant 'PLUS' ou 'MOIN' pour | *| indiquer l'operateur PLUS ou MOIN a utiliser | *| si l'on veut transformer la coude en un | *| tuyauterie droite. | *| | *| 7 : Rotation rigidifiante imposee dans le calcul par PASAPAS | *| | *| SUPTAB.'ROTATION_RIGIDIFIANTE' = table indicee par entiers 0,1,2... | *| donnant les champs de deplacements | *| due a une rotation rigidifiante de | *| la piece autour d'un point. Cette | *| rotation rigidifiante est imposee | *| dans le calcul par PASAPAS en tant | *| d'un calcul en grand deplacement. | *| | *| 8 : Cas ou on souhaite donner soi-meme le champ THETA | *| | *| SUPTAB.'CHAMP_THETA' = Objet de type CHPOINT caracterisant la | *| propagation de la fissure. Dans ce cas, | *| ne pas fournir l'indice 'COUCHE' de SUPTAB, | *| mais fournir 'CHAMP_THETA' a chaque appel. | *| | *| 9 : Cas ou on souhaite calculer une integrale dans l epaisseur | *| d une structure en coque (rapport DMT/96-317) | *| | *| On utilise pour cela la technique de multicouche, qui | *| consiste, avant d'appeler la proceduer G_THETA, a : | *| 1) Etablir un modele multicouches (cf MODE CONS) sur un ou | *| des element(s) proche(s) de la fissure sachant qu'il faut | *| au moins une couche en peau inferieure, une couche en | *| peau superieure, une couche en ligne moyenne {ces couches | *| doivent avoir une epaisseur inferieure a 1e-4*(epaisseur | *| totale de la coque) et donc 2 couches intermediaires. | *| 2) Penser a donner un excentrement et un nom constituant | *| different a ces couches. | *| 3) Assembler le modele multicouches avec le modele du reste | *| de la structure. | *| 4) Effectuer le calcul des contraintes et des deplacements | *| avec le modele total et le materiau qui en decoule. | *| Le calcul de l'integrale avec la procedure G_THETA sera | *| realise sur un seul element en multicouche et pour toutes les| *| couches dans cet element qui ont une epaisseur inferieure a | *| 1e-4*(epaisseur totale de la coque). Un tel element doit | *| etre designe par l'argument suivant : | *| | *| SUPTAB.'ELEMENT_MULTICOUCHE' = Objet MAILLAGE comportant UN SEUL | *| element modelise en multicouche. Il | *| doit etre a l'interieur de la zone | *| THETA, c'est a dire dans la zone | *| definie par le nombre SUPTAB.'COUCHE'. *| Il ne doit pas etre trop loin, ni | *| trop proche de la pointe de la | *| fissure. Theoriquement, l'integrale | *| a calculer est independant du choix | *| de l'element pres de la fissure, ce | *| qui est numeriquement verifiable en | *| la determinant sur des elemens en | *| multicouche differents. NOTA : Cette | *| technique necessite un maillage tres | *| fin dans la zone de la pointe de la | *| fissure. | *| | *| | *| SORTIE : | *| ======== | *| | *| Les resultats du calcul correspondant a un champ THETA specifie par | *| l'objet SUPTAB.'COUCHE' (ou SUPTAB.'CHAMP_THETA' dans le cas ou on | *| souhaite donner soi-meme un champ de type Theta) sont sauves de la | *| maniere suivante : | *| | *| | *| Dans tous les cas de calcul | *| --------------------------- | *| | *| SUPTAB.'RESULTATS' = Objet contenant la valeur numerique du calcul. | *| Son type est variable selon qu'on est en 2D ou | *| 3D et selon la solution du probleme traite : | *| | *| 1) valeur de l'integrale de contour dans le cas| *| d'une solution provenant de l'operateur RESO| *| 2D => FLOTTANT | *| 3D massif => TABLE indicee par | *| .(points au front de fissure) | *| .'GLOBAL' pour une estimation globale | *| 3D coque => TABLE indicee par mots | *| .'SUPERI' en peau superieure | *| .'INFERI' en peau inferieure | *| .'MEDIAN' au plan median et | *| .'GLOBAL' pour une estimation globale | *| | *| 2) valeur de l'integrale de contour a un | *| certain pas du calcul dans le cas d'une | *| solution provenant de la procedure PASAPAS | *| 2D => TABLE indicee par | *| .(numero du pas de calcul) | *| 3D massif => TABLE indicees par | *| .(numero du pas de calcul).(points au | *| front de fissure) | *| 3D coque => TABLE indicees | *| .(numero du pas de calcul).'SUPERI' | *| .(numero du pas de calcul).'INFERI' | *| .(numero du pas de calcul).'MEDIAN' et | *| .(numero du pas de calcul).'GLOBAL' | *| | *| 3) valeur des F.I.C. (facteurs d'intensite des | *| contraintes) dans le cas de decouplage des | *| modes avec une solution provenant de | *| l'operateur RESO | *| 2D => TABLE indicee par mots | *| .'I' pour KI | *| .'II' pour KII | *| 3D massif => TABLE indicees par | *| .'I' .(points au front de fissure) | *| pour KI | *| .'II' .(points au front de fissure) | *| pour KII | *| .'III'.(points au front de fissure) | *| pour KIII et | *| .'GLOBAL'.(points au front de fissure) | *| | *| 4) valeur des F.I.C. (facteurs d'intensite des | *| contraintes) a un certain pas du calcul | *| dans le cas de decouplage des modes avec | *| une solution provenant de la procedure | *| PASAPAS | *| 2D => TABLE indicees | *| .'I' .(numero du pas de calcul) pour KI | *| .'II'.(numero du pas de calcul) pour KII | *| 3D massif => TABLE indicees par | *| .'I' .(numero du pas de calcul).(point | *| au front de fissure) pour KI | *| .'II' .(numero du pas de calcul).(points | *| au front de fissure) pour KII | *| .'III'.(numero du pas de calcul).(points | *| au front de fissure) pour KIII | *| | *| | *| Dans le cas de calcul effectue pas a pas | *| ---------------------------------------- | *| | *| SUPTAB.'EVOLUTION_RESULTATS' = Objet contenant l'evolution des | *| resultats en fonction du temps. | *| Son type est variable selon la | *| configuration du probleme traite : | *| | *| 1) Evolution de l'integrale de contour | *| 2D => EVOLUTION | *| 3D massif => TABLE indicee par | *| .(points au front de fissure) | *| .'GLOBAL' evolution pour une | *| estimation globale | *| 3D coque => TABLE indicee par MOTS | *| .'SUPERI' en peau superieure | *| .'INFERI' en peau inferieure | *| .'MEDIAN' au plan median et | *| .'GLOBAL' evolution pour une | *| estimation globale | *| | *| 2) Evolution des F.I.C. (facteurs | *| d'intensite de contrainte) | *| 2D => TABLE indicee par | *| .'I' pour KI | *| .'II' pour KII | *| 3D massif => TABLE indicee par | *| .'I'. (points au front de fissure) *| .'II'. (points au front de fissure) *| .'III'.(points au front de fissure) *| .'GLOBAL' evolution pour une | *| estimation globale | *| | *| | *| Dans le cas des elements de coque | *| --------------------------------- | *| | *| SUPTAB.'EPAISSEUR_RESULTATS' = representant l'evolution de la valeur| *| des integrales dans l'epaisseur de la| *| coque. Son type est variable selon la| *| solution du probleme traite : | *| 1) EVOLUTION dans le cas d'une solution | *| provenant de l'operateur RESO | *| 2) TABLE indicee par .(numero du pas de | *| calcul) dans le cas d'une solution | *| provenant de la procedure PASAPAS | *| | *| | *| Dans le cas de calcul elasto-plastique | *| -------------------------------------- | *| | *| SUPTAB.'CRITERE_DECHARGE' = En cas de calcul elasto-plastique | *| isotrope ou cinematique, eventuellement thermique, on | *| calcul un critere de decharge des contraintes defini par | *| (si, F = courbe de traction ): crit = F(EPSeq)/ SIGeq. | *| crit = 1. si non-decharge et crit > 1. si decharge. | *| SUPTAB.'CRITERE_DECHARGE' est une table indicee par les | *| temps de calcul. | *| | *| | *| Dans le cas du contact frottement sur les levres | *| -------------------------------------- | *| | *| A ce jour, cela est traite pour le cas xfem (these de B.Trolle). | *| | *|=====================================================================| * INTRODUCTION DE VARIABLES UTILES * -------------------------------- * CREATION DE LA TABLE DE BOOLEENS * ******************************** SAUT 'LIGNE' ; '--------------------' ; FINSI ; SAUT 'LIGNE' ; * CONFIGURATION INITIALE * ********************** * ============================================================================= * DETERMINATION DU CAS DEMANDE ET VERIFICATION DES DONNEES OBLIGATOIRES * --------------------------------------------------------------------- * APPEL A G_CAS * ************* OBJUTI = G_CAS SUPTAB BOOL ; MESS 'ERREUR : IL Y A EU UN PROBLEME INATTENDU PENDANT LA LECTURE DES' ; MESS ' DONNEES' ; FINSI ; * LECTURE DES DONNEES FOURNIES * **************************** GDIME = OBJUTI.'DIMENSION' ; MOD_TOT = OBJUTI.'MOD_TOT' ; MOD_MEC = OBJUTI.'MOD_MEC' ; MAT_MEC = OBJUTI.'MAT_MEC' ; WTAB = OBJUTI.'WTAB' ; FINSI ; MAILLAGE = OBJUTI.'MAILLAGE' ; M_FRONT = OBJUTI.'FRONT' ; * QUELQUES DONNEES NON ISSUES DE G_CAS * ************************************ * TYPE D'ELEMENTS DU MAILLAGE SI BOOL.'MODE_PRES' ; FINSI ; FINSI ; * VERIFICATIONS DANS LE CAS DE PERSO1 SI BOOL.'PERSO1' ; MESS 'utilisation de PERSO1 en cours de dvlpt' ; FINSI ; ESTIM = SUPTAB.'SOLUTION_PASAPAS'.'ESTIMATION' ; SINON ; FINSI ; MESS 'Attention! utilisation de PERSO1 sans MAILLAGE_REDUIT' ; FINSI ; FINSI ; * MOTS DE COMPOSANTES UTILES * ************************** * LISTMOT SCAL : * LISTMOTS POUR LE DEPLACEMENT ET POUR LA FORCE : * ON EXTRAIT LES GDIME PREMIERS MOTS CAR ON NE VEUT PAS DES ROTATIONS * DANS LE CAS DES COQUES SI (EGA GDIME 3) ; FINSI ; * CREATION DE CHAR1 SI PASAPAS * **************************** CHAR1 = SUPTAB.'SOLUTION_PASAPAS'.'CHARGEMENT' ; FINSI ; * DONNEES EN CAS DE CONTACT * ************************* OBJCON = SUPTAB.'MODELE_FISSURE' ; FINSI ; * ============================================================================= * EXTRACTION DU MAILLAGE, DU CHAMP THETA ET DE LA DIRECTION DE PROPAGATION * ------------------------------------------------------------------------ * MODELE MULTICOUCHES DANS LE CAS DE COQUE * **************************************** SI BOOL.'COQ' ; ELMULT = SUPTAB.'ELEMENT_MULTICOUCHE' ; MESS 'ERREUR : L ELEMENT EN MULTICOUCHE DOIT' ; FINSI ; MESS 'ERREUR : ON VEUT UN SEUL ELEMENT EN MULTICOUCHE' ; FINSI ; SINON ; MESS 'ERREUR : IL FAUT DESIGNER UN ELEMENT EN MULTICOUCHE' ; FINSI ; MESS ' INTERMEDIAIRES POUR L ELEMENT DESIGNE EN' ; MESS ' MULTICOUCHE PROCHE DE LA FISSURE.' ; FINSI ; I1 = (2 * &NBJ5) - 1 ; MODCOU.&NBJ5 = M_ELMU.I1 ; EPAITO = EPAITO + EP1 ; FIN NBJ5 ; NSUPE = 0 ; NMOYE = 0 ; NINFE = 0 ; SI (EGA EX1 (EPAITO/2.) 1.E-4) ; NSUPE = LM1 ; FINSI ; SI (EGA EX1 0. 1.E-10) ; NMOYE = LM1 ; FINSI ; SI (EGA EX1 (EPAITO/(-2.)) 1.E-4) ; NINFE = LM1 ; FINSI ; FIN NBJ6 ; SI (EGA NSUPE 0) ; MESS 'ERREUR : IL FAUT UNE COUCHE EN PEAU SUPERIEURE' ; MESS ' D EPAISSEUR INFERIEURE A' ; FINSI ; SI (EGA NMOYE 0) ; MESS 'ERREUR : IL FAUT UNE COUCHE AU PLAN MEDIAN' ; MESS ' AYANT UN EXCENTREMENT NUL' ; FINSI ; SI (EGA NINFE 0) ; MESS 'ERREUR : IL FAUT UNE COUCHE EN PEAU INFERIEURE' ; MESS ' D EPAISSEUR INFERIEURE A' ; FINSI ; SUPTAB.'EPAISSEUR' = EPAITO ; M_SUPE = MODCOU.NSUPE ; M_MOYE = MODCOU.NMOYE ; M_INFE = MODCOU.NINFE ; FINSI ; * MAILLAGE UTILISE DANS LA RESOLUTION PAR E.F. * ******************************************** SI BOOL.'COQ' ; M1 = M_DETA.(2*&NBJ8) ; ITER NBJ8 ; FINSI ; TMULT.M1 = VRAI ; FIN NBJ9 ; FINSI ; FIN NBJ8 ; FINSI ; SUPTAB.'MAILLAGE' = MAILLAGE ; * DETERMINATION DES CHAMPS THETA ET PI ET DE LA ZONE DE TRAVAIL ELTETA * ******************************************************************** MESS 'DETERMINATION DES CHAMPS THETA' ; FINSI ; * COUCHE ET CHAMP_THETA TOUS LES DEUX DONNES FINSI ; * DETERMINATION DE CHAMP_THETA * NOMBRE DE COUCHE DONNE => ON APPELLE CH_TETX OU CH_TETA POUR CALCULER * CHAMP_THETA * SI CHAMP_THETA EST EGALEMENT FOURNI, IL EST ECRASE SINON ; SI BOOL.'DJ/DA' ; SUPTAB.'COUCHE' = (SUPTAB.'COUCHE') - 1 ; SUPTAB.'COUCHE' = (SUPTAB.'COUCHE') + 1 ; SINON ; P1 = SUPTAB.'FRONT_FISSURE' ; SUPTAB.'FRONT_FISSURE' = SUPTAB.'FRONT_FISSURE_2' ; SUPTAB.'FISSURE' = SUPTAB.'FISSURE_2' ; SUPTAB.'FRONT_FISSURE' = P1 ; FINSI ; FINSI ; FINSI ; SINON ; MESS 'CHAMP_THETA FOURNI PAR L UTILISATEUR' ; FINSI ; CHTHETA = SUPTAB.'CHAMP_THETA' ; CHTHETA = CHTHETA.'GLOBAL' ; FINSI ; * DETERMINATION DE ELTETA * ELTETA1 = MAILLAGE OU TETA N EST PAS NUL + 1 COUCHE * ELTETA = MAILLAGE FOURNI PAR L UTILISATEUR ELTETA = SUPTAB.'MAILLAGE_REDUIT' ; * VERIFICATION DE LA COMPATIBILITE AVEC CHTHETA MESS 'ATTENTION : LE MAILLAGE_REDUIT DONNE EST INCOMPATIBLE AVEC LE' ; MESS ' CHAMP THETA, IL SERA DONC IGNORE.' ; ELTETA = ELTETA1 ; FINSI ; SINON ; ELTETA = ELTETA1 ; FINSI ; * DETERMINATION DE LA DIRECTION DE PROPAGATION ET DES NORMALES * ON EST DANS LE CAS XFEM SI (EGA GDIME 2) ; * LA DIRECTION DE PROPAGATION EST PERPENDICULAIRE A GRAD PHI ET DANS LE * MEME SENS QUE GRAD PSI => ON UTILISE UN PRODUIT VECTORIEL * ETAPE 1 : PROJECTION SUR LE FRONT DE FISSURE ET PASSAGE EN CHPO * ETAPE 2 : PRODUIT VECTORIEL AVEC LA NORMALE AU PLAN * NB : ON FAIT ATTENTION AU SENS DE TETA GRACE A SIGN TETA = SIGN1 * TETA ; * ETAPE 3 : NORMALISATION ET CALCUL DE DIR2 DIR1 = TETA / NTETA ; SINON ; * PASSAGE DES DIRECTIONS EN CHPO ET PRODUITS VECTORIELS * NORMALISATION, INTERPOLATION PUIS RENORMALISATION : * POUR DIR1 ON FAIT ATTENTION CAR ON PEUT AVOIR UN POINT SINGULIER V1 = DIR1 ; * POUR DIR2 PAS DE PROBLEME V2 = DIR2 ; * POUR DIR3 ON FAIT ATTENTION CAR ON PEUT AVOIR UN POINT SINGULIER V3 = DIR3 ; FINSI ; SINON ; * ON EST DANS LE CAS STD DIR1 = DIR1 / NDIR1 ; SI (NON BOOL.'COQ') ; SINON ; FINSI ; DIR2 = DIR2 / NDIR2 ; SI (EGA GDIME 3) ; FINSI ; FINSI ; FINSI ; FINSI ; * DETERMINATION DU REPERE LOCAL * ***************************** * ON STOCKE LES DIRECTIONS DANS UTILTETA * DIRECTION DE PROPAGATION : DIR1 * DIRECTION TANGENTE AU FRONT : DIR2 * DIRECTION DE CISAILLEMENT SI SEPARATION DE MODES : DIR3 UTILTETA.'DIRECTION1' = DIR1 ; SI (NON BOOL.'COQ') ; UTILTETA.'DIRECTION2' = DIR2 ; SI (EGA GDIME 3) ; UTILTETA.'DIRECTION3' = DIR3 ; FINSI ; FINSI ; * ON COMPLETE ELTETA * ****************** * AJOUT EVENTUEL DE ELPI A ELTETA ELPI = SUPTAB.'FRONT_FISSURE_2' ; REPE MAIL2 ((SUPTAB.'COUCHE') + 1) ; FIN MAIL2 ; ELTETA = ELTETA ET ELPI ; FINSI ; * AJOUT DU NOEUD SUPPORT EN DEF.PL.GENERALISEES SI (EGA GMODE 'PLANGENE') ; FINSI ; * L'ELEMENT SUPPORTANT LE MODELE MULTICOUCHE * DOIT ETRE DANS LA ZONE THETA SI BOOL.'COQ' ; SI (NEG N1 N2) ; MESS ' L INTEGRALE SE TROUVE EN DEHORS DE LA ZONE' ; MESS ' DEFINIE PAR LE NOMBRE DE COUCHES DONNE.' ; FINSI ; FINSI ; * TESTS DE COMPATIBILITE * ********************** * BOOL.'REPRI' = VRAI SI REPRISE DE CALCUL, FAUX SINON BOOL.'REPRI' = FAUX ; BOOL.'REPRI' = (N1 - 1) > SUPTAB.'IABC' ; MESS 'on tente une reprise...' ; FINSI ; FINSI ; * TESTS DE COMPATIBILITE SI REPRISE DE CALCUL SI BOOL.'REPRI' ; * ON VERIFIE QUE L OBJECTIF RESTE LE MEME SI (NEG SUPTAB.'OBJ1' SUPTAB.'OBJECTIF') ; MESS 'ERREUR : REPRISE IMPOSSIBLE CAR L OBJECTIF DU' ; MESS ' CALCUL ACTUEL N EST PAS LE MEME QUE' ; MESS ' CELUI DU CALCUL PRECEDENT' ; FINSI ; * ON DOIT AVOIR LE MEME NOMBRE DE COUCHE (ON SUPPOSE LA FISSURE FIXE) SI (NEG SUPTAB.'COU1' SUPTAB.'COUCHE') ; MESS 'ERREUR : REPRISE IMPOSSIBLE CAR LE NOMBRE DE' ; MESS ' COUCHE ACTUEL N EST PAS LE MEME QUE' ; MESS ' CELUI UTILISE POUR LE CALCUL PRECEDENT' ; FINSI ; FINSI ; * RESTE A VERIFIER LA COMPATIBILITE DES SUPPORT DE CHAMP TETA VIA ELTETA * ELTETA DOIT ETRE INCLUS DANS ELTET1 ELTET1 = SUPTAB.'ELTET1' ; MESS 'ERREUR : REPRISE IMPOSSIBLE CAR LE SUPPORT DU ' ; MESS ' CELUI UTILISE POUR LE CALCUL PRECEDENT' ; FINSI ; MESS 'REPRISE DU CALCUL AUTORISE !' ; FINSI ; * TESTS DE COMPATIBILITE SI UTILISATION DE PERSO1 ELTET1 = SUPTAB.'ELTET1' ; MESS 'ERREUR : REPRISE IMPOSSIBLE CAR LE SUPPORT DU ' ; MESS ' CELUI UTILISE POUR LE CALCUL PRECEDENT' ; FINSI ; MESS 'POURSUITE DU CALCUL VIA PERSO1 AUTORISE !' ; FINSI ; FINSI ; * ============================================================================= * MODELES ET MATERIAUX DANS LA ZONE DE TRAVAIL * -------------------------------------------- * VERIFICATION DES DONNEES D ENTREE POUR MODELES_COMPOSITES REPE BIN4 N1 ; SI (NEG T1 'MMODEL ') ; MESS ' TABLE MODELES_COMPOSITES EST INCORRECTE' ; FINSI ; FIN BIN4 ; MESS 'ERREUR : TOUS LES MODELES DE MATERIAUX' ; MESS ' COMPOSITES NE SONT PAS DONNES' ; FINSI ; FINSI ; * CREATION DE MOD_MEC ET TABMOD * CAS DE MODELES COMPOSITES (AVEC DISCONTINUITE) : ON A DU TRAVAIL M1 = SUPTAB.'MODELES_COMPOSITES'.&BIN1 ; * SI ON A DES NOEUDS EN COMMUN, ... SI (NEG (N1 + N2) N3) ; * ... ON LES RECUPERE * SI TOUS LES NOEUDS EN COMMUN SONT SUR LE CONTOUR * => PAS D ELEMENTS A RECUPERER => ON PASSE AU MODELE SUIVANT SI (EGA N1 N2) ; ITER BIN1 ; FINSI ; * SINON, ON RECUPERE LES ELEMENTS CONCERNES ET LE MODELE REDUIT MOD_MEC_R = MOD_MEC_R ET TABMOD.N1 ; FINSI ; FIN BIN1 ; SINON ; * CAS DE MODELES SANS DISCONTINUITE : ON A MOINS DE TRAVAIL TABMOD.1 = MOD_MEC_R ; FINSI ; * CHAMP EPAISSEUR DANS LA ZONE DE TRAVAIL SI BOOL.'COQ' ; FINSI ; * CALCUL DE C* PAR DEUX TYPES DE MODELE FLUAGE * ******************************************** *** ITYPEF = 1 MODELE FLUAGE POUR LEQUEL ON A UNE EXPRESSION *** EXPLICITE DE L'INTEGRATION DE LA VITESSE DE *** DEFORMATION DE FLUAGE SUR LE TEMPS *** ITYPEF = 2 MODELE FLUAGE POUR LEQUEL ON N'OBTIENT PAS *** FACILEMENT CETTE EXPRESSION EXPLICITE *** ITYPEF = 99 SI EN ELASTO OU THERMO-ELASTO-PLASTICITE * DETERMINATION DE ITYPEF ITYPEF = 99 ; SI (BOOL.'C*' OU BOOL.'C*H') ; ITYPEF = 1 ; FINSI ; ITYPEF = 2 ; FINSI ; FINSI ; * INTERFACES DANS LA ZONE DE TRAVAIL * ********************************** * CREATION DES INTERFACES INTER-MODELE * ON BOUCLE SUR LES MODELES QUI APPARTIENNENT A ELTETA IIN3 = &BIN2 ; REPE BIN3 NIN3 ; IIN3 = IIN3 + 1 ; * ON ITERE SI (M1 INCLUT DANS M2) OU (M2 INCLUT DANS M1) ITER BIN3 ; FINSI ; * ON ITERE SI M1 ET M2 N ONT PAS DE NOEUDS COMMUNS ITER BIN3 ; FINSI ; * ON RECUPERE L INTERFACE M1-M2 * LO1=VRAI <=> IL EXISTE DES NOEUDS COMMUNS A M1 ET M2 * LO2=VRAI <=> IL N'Y A PAS 1 NOEUD COMMUN A M1 ET M2 * LO4 = M1 ET M2 FORMENT BIEN UNE INTERFACE ET NE SE CHEVAUCHENT PAS SI (LO1 ET LO2 ET LO4) ; * ON AJOUTE L INTERFACE CAR ON A >1 NOEUDS EN COMMUN A M1 ET M2 LINTER.LE1 = L1 ; * BOOL.'PARAL'=VRAI <=> TOUTES LES INTERFACES SONT // A LA FISSURE * SI BOOL.'PARAL'=FAUX IL FAUT AJOUTER DES TERMES D INTERFACES AU C * PETITE MODIF CAR DIR1 DOIT ETRE UN CHPOINT DESORMAIS * -> A VERIFIER ? SI (GDIME EGA 2) ; PDIR1 = XDIR1 YDIR1 ; SINON ; PDIR1 = XDIR1 YDIR1 ZDIR1 ; FINSI ; LO1 = ((EGA P1 PDIR1 1.E-6) OU (EGA P1 (-1.*PDIR1) 1.E-6)) ; BOOL.'PARAL' = BOOL.'PARAL' ET LO1 ; FINSI ; FIN BIN3 ; FIN BIN2 ; FINSI ; * DANS LE CAS DECOUPLAGE SEULEMENT : * TEST SI FRONT_FISSURE EST DANS UNE INTERFACE LE1 = IND1.&BIN4 ; SI (EGA N1 N2) ; QUIT BIN4 ; SINON ; ITER BIN4 ; FINSI ; FIN BIN4 ; FINSI ; * SI OUI (BOOL.'DANS'),ON DETERMINE LES MODELES SUP ET INF MODINF = 0 ; MODSUP = 0 ; * ON REDEFINIT : BOOL.'PARAL'=VRAI <=> L'INTERFACE A LAQUELLE APPARTIENT LA FISSURE E BOOL.'PARAL' = FAUX ; LSUP = SUPTAB.'LEVRE_SUPERIEURE' ; LINF = SUPTAB.'LEVRE_INFERIEURE' ; SI ( ((N1 + NLSUP - N1SUP) > 1) ET ((N2 + NLINF - N2INF) > 1)) ; * LSUP ET MOD1 ONT PLUS D'1 POINT COMMUN ET IDEM POUR LINF ET MOD2 SINON ; SI ( ((N1 + NLINF - N1INF) > 1) ET ((N2 + NLSUP - N2SUP) > 1)) ; SINON ; MESS 'ERREUR : INCOMPATIBILITE ENTRE LE MODELES_COMPOSITES' ; FINSI ; FINSI ; * LA FISSURE EST BIEN DANS LE PROLONGEMENT DE L' INTERFACE BOOL.'PARAL' = VRAI ; FINSI ; * REM: il faudrait egalement verifier que MODSUP et MODINF suffisent a decrire E * MODPLA : table indicee par entier pour stocker les modeles * mecaniques de chaque objet MMODEL. ************************************************** *** Elle est vide si le modele est elastique ou elastoplastique *** avec une courbe de traction independante de la temperature. *** Dans le cas contraire la table vaut : *** 1 si le modele est plastique isotrope. Alors une *** nouvelle courbe de traction EPSE-SIGMA est faite. *** 2 si le modele est plastique cinematique *** 3 si le modele est plastique parfaite BOOL.'GRADYOUN' = FAUX ; BOOL.'GRADNU' = FAUX ; BOOL.'GRADALPH' = FAUX ; MODPLA = TABLE ; TABTRA = TABLE ; REPE BCMOD1 NBOBJ ; MODEI = TABMOD.&BCMOD1 ; * BOOL.'GRADYOUN' SI (EGA TYPYO 'EVOLUTIO') ; BOOL.'GRADYOUN' = VRAI ; SINON ; SI (TEST1 '>' 1.E-10) ; BOOL.'GRADYOUN' = VRAI ; FINSI ; FINSI ; * BOOL.'GRADNU' SI (EGA TYPNU 'EVOLUTIO') ; BOOL.'GRADNU' = VRAI ; SINON ; SI (TEST1 '>' 1.E-10) ; BOOL.'GRADNU' = VRAI ; FINSI ; FINSI ; * BOOL.'GRADALPH' SI BOOL.'THER' ; SI (EGA TYPAL 'EVOLUTIO') ; BOOL.'GRADALPH' = VRAI ; SINON ; SI (TEST1 '>' 1.E-10) ; BOOL.'GRADALPH' = VRAI ; FINSI ; FINSI ; FINSI ; * COURBE DE TRACTION SI (EGA TYPTR 'NUAGE ') ; MODPLA.&BCMOD1 = 1 ; SI (EGA &BNUA1 1) ; SINON ; FINSI ; FIN BSIG1 ; SI (&BNUA1 EGA 1) ; SINON ; FINSI ; FIN BNUA1 ; TABTRA.&BCMOD1 = TRA2 ; * ON ENLEVE LA COURBE DE TRACTION SI ELLE DEPEND DE * LA TEMPERATURE (OPERATION TROP COUTEUSE POUR VARI) SI (NEG C1 'ECRO') ; SI (EGA &BCOM1 1) ; SINON ; FINSI ; FINSI ; FIN BCOM1 ; FINSI ; * SIGY (et pas TRAC) SINON ; SI ((EGA TYPH 'EVOLUTIO') OU (EGA TYPSI 'EVOLUTIO')) ; MODPLA.&BCMOD1 = 2 ; FINSI ; SINON ; SI (EGA TYPSI 'EVOLUTIO') ; MODPLA.&BCMOD1 = 3 ; FINSI ; FINSI ; FINSI ; FINSI ; FIN BCMOD1 ; * CAS IMPOSSIBLE A TRAITER * ************************ MESS 'ERREUR : ON NE PEUT ENCORE DECOUPLER LES MODES' ; FINSI ; FINSI ; * ============================================================================= * PREREQUIS POUR EFFECTUER LES CALCULS * ------------------------------------ * TITRES A AFFICHER SELON LE PROBLEME TRAITER * ******************************************* SINON ; FINSI ; SINON ; FINSI ; SI BOOL.'J' ; SI BOOL.'THER' ; SINON ; FINSI ; FINSI ; SI BOOL.'C*' ; SI BOOL.'THER' ; SINON ; FINSI ; FINSI ; SI BOOL.'C*H' ; SI BOOL.'THER' ; SINON ; FINSI ; FINSI ; SI BOOL.'DJ/DA' ; SI BOOL.'THER' ; SINON ; FINSI ; SINON ; SI BOOL.'THER' ; SINON ; FINSI ; FINSI ; FINSI ; SI BOOL.'J_DYNA' ; SI BOOL.'THER' ; SINON ; FINSI ; FINSI ; SI BOOL.'DECOUPLAGE' ; SI BOOL.'THER' ; SINON ; FINSI ; FINSI ; SI (SUPTAB.'COUCHE' > 9) ; FINSI ; SI (SUPTAB.'COUCHE' > 99) ; FINSI ; SINON ; FINSI ; * AFFICHAGE DU TITRE * ****************** SI (EGA GDIME 2) ; SI BOOL.'DECOUPLAGE' ; MESS ' ' TX1 ; SINON ; MESS ' ' TX1 ; FINSI ; FINSI ; SI ((EGA GDIME 3) ET (NON BOOL.'COQ')) ; SI BOOL.'DECOUPLAGE' ; MESS ' ' TX1 ; SINON ; MESS ' ' TX1 ; FINSI ; FINSI ; SI BOOL.'COQ' ; MESS ' ' TX1 ; MESS ; FINSI ; SINON ; SI (EGA GDIME 2) ; SI BOOL.'DECOUPLAGE' ; SINON ; MESS ' ' TXMECANI TXTERMI TXPRESS MOTCO ; FINSI ; FINSI ; SI ((EGA GDIME 3) ET (NON BOOL.'COQ')) ; SI BOOL.'DECOUPLAGE' ; SINON ; MESS ' Noeud ' TXMECANI TXTERMI TXPRESS MOTCO ; FINSI ; FINSI ; SI BOOL.'COQ' ; MESS ' Plan ' TXMECANI TXTERMI TXPRESS MOTCO ; FINSI ; FINSI ; * FORCE, DEPLACEMENT ET GRADIENT NULS * *********************************** SI (EGA GMODE 'PLANGENE') ; 3 'FZ' 0. 'MX' 0. 'MY' 0. 3 'UZ' 0. 'RX' 0. 'RY' 0. FINSI ; * NOMBRE DE BOUCLE POUR LE CALCUL DES INTEGRALES * ********************************************** NBG = -1 ; SI BOOL.'REPRI' ; NBG = SUPTAB.'IABC' ; NBDEP = NBDEP - 1 - NBG ; FINSI ; SI BOOL.'PERSO1' ; NBG = (WTAB . 'PAS') - 1 ; NBDEP = 1 ; FINSI ; SINON ; NBG = -1 ; NBDEP = 1 ; FINSI ; * SOLUTION DU PAS PRECEDENT SI REPRISE DE CALCUL OU SI PERSO1 * *********************************************************** SI (BOOL.'REPRI' OU (BOOL.'PERSO1' ET (NBG >EG 0))) ; VAR1 = (SUPTAB.'SOLUTION_PASAPAS'.'VARIABLES_INTERNES'.NBG) REDU MOD_MEC_R ; SINON ; VAR1 = VAR000 ; FINSI ; MAT_INST = SUPTAB.'MAT_INST' ; SI (EGA ITYPEF 2) ; VDI1 = SUPTAB.'VDI1' ; FINSI ; WVMIS = SUPTAB.'ENV1' ; FINSI ; MESS 'RECUP DU PAS PRECEDENT OK' ; FINSI ; FINSI ; * CALCUL DE LA DEFORMATION THERMIQUE A TREF SI (BOOL.'THER' ET (NON BOOL.'COQ')) ; SINON ; FINSI ; OBJUTI.'EPTREF' = EPTREF ; FINSI ; * REMPLISSAGE DE OBJUTI * ********************* OBJUTI.'MOD_MEC_R' = MOD_MEC_R ; OBJUTI.'MOTTI' = MOTTI ; OBJUTI.'MODCOU' = MODCOU ; OBJUTI.'TABMOD' = TABMOD ; OBJUTI.'LINTER' = LINTER ; OBJUTI.'ELTETA' = ELTETA ; OBJUTI.'MODPLA' = MODPLA ; OBJUTI.'FOR000' = FOR000 ; OBJUTI.'DEP000' = DEP000 ; OBJUTI.'CMD001' = CMD001 ; OBJUTI.'GRA000' = GRA000 ; OBJUTI.'ITYPEF' = ITYPEF ; OBJUTI.'DIRECTION1' = DIR1 ; OBJUTI.'DIRECTION2' = DIR2 ; OBJUTI.'DIRECTION3' = DIR3 ; OBJUTI.'ELTETA' = ELTETA ; * DECOUPLAGE OBJUTI.'MODSUP' = MODSUP ; OBJUTI.'MODINF' = MODINF ; * AJOUT BP BT POUR LE CONTACT FROTTANT OBJUTI.'OBJCON' = OBJCON ; OBJUTI.'MAILCON' = MAILCON ; FINSI ; * FIN AJOUT BP BT SI BOOL.'PERSO1' ; OBJUTI.'ESTIMATION' = ESTIM ; FINSI ; *************************************************** ** DECLARATION DES TABLES STOCKANT LES RESULTATS ** *************************************************** SI BOOL.'PERSO1' ; FLCREA = NBG EGA -1 ; SINON ; FLCREA = NON BOOL.'REPRI' ; FINSI ; SI FLCREA ; FINSI ; FINSI ; SI ((EGA GDIME 3) OU BOOL.'DECOUPLAGE') ; FINSI ; SI (EGA ITYPEF 99) ; SUPTAB.'CRIT_DECHA_GLOBAL1' = TABLE ; SUPTAB.'CRIT_DECHA_LOCAL1' = TABLE ; SUPTAB.'CRIT_DECHA_GLOBAL2' = TABLE ; SUPTAB.'CRIT_DECHA_GLOBAL2_L' = TABLE ; SUPTAB.'CRIT_DECHA_LOCAL2' = TABLE ; FINSI ; FINSI ; FINSI ; SI BOOL.'DECOUPLAGE' ; REPE IRUPT GDIME ; FINSI ; FINSI ; FINSI ; FIN IRUPT ; FINSI ; FINSI ; *********************************************** *********************************************** ********* BOUCLE SUR LE PAS DE CALCUL ********* *********************************************** *********************************************** REPE BOUCEXT NBDEP ; IABC = NBG + &BOUCEXT ; * DECLARATION DES TABLES STOCKANT LES RESULTATS POUR LE PAS DE TEMPS IABC SI BOOL.'DECOUPLAGE' ; REPE IRUPT GDIME ; FIN IRUPT ; SINON ; FINSI ; FINSI ; *************************************************** ** DEPLACEMENTS,CONTRAINTES ... A L INSTANT INST ** *************************************************** * SOLUTION_PASAPAS SI BOOL.'PERSO1' ; * CAS PERSO1 INST = ESTIM . 'TEMPS' ; SI (BOOL.'GRANDS_DEP' ET (NON BOOL.'ROT_RIG')) ; FINSI ; SI BOOL.'ROT_RIG' ; MESS 'ERREUR : Le deplacement du a une rotation' ; MESS ' rigidifiante au pas ' IABC ' n est pas' MESS ' donne' ; FINSI ; DEPINT = DEPINT - FINSI ; SINON ; VARF = VAR000 ; FINSI ; SI BOOL.'C*' ; SI (EGA IABC 0) ; DELTAT = INST + 1.E+30 ; DEPINT = ESTIM . 'DEPLACEMENTS' ; VITDFI = ESTIM . 'DEFORMATIONS_INELASTIQUES' ; SIG1 = SIGF * 1. ; FINSI ; SI (IABC '>' 0) ; DELTAT= INST - (ESTIM . 'TEMPS') ; DEPINT= (ESTIM.'DEPLACEMENTS') - (ESTIM.'DEPLACEMENTS') ; VITDFI= (ESTIM.'DEFORMATIONS_INELASTIQUES') - (ESTIM.'DEFORMATIONS_INELASTIQUES') ; FINSI ; FINSI ; SI BOOL.'J_DYNA' ; FINSI ; SINON ; * CAS OU ON APPELLE G_THETA APRES PASAPAS INST = SUPTAB.'SOLUTION_PASAPAS'.'TEMPS'.IABC ; DEPINT = (SUPTAB.'SOLUTION_PASAPAS'.'DEPLACEMENTS'.IABC) REDU ELTETA ; SIGF = (SUPTAB.'SOLUTION_PASAPAS'.'CONTRAINTES'.IABC) REDU MOD_MEC_R ; SI (BOOL.'GRANDS_DEP' ET (NON BOOL.'ROT_RIG')) ; FINSI ; SI BOOL.'ROT_RIG' ; MESS 'ERREUR : Le deplacement du a une rotation' ; MESS ' rigidifiante au pas ' IABC ' n est pas' MESS ' donne' ; FINSI ; DEPINT = DEPINT - FINSI ; VARF = (SUPTAB.'SOLUTION_PASAPAS'.'VARIABLES_INTERNES'.IABC) REDU MOD_MEC_R ; SINON ; VARF = VAR000 ; FINSI ; SI BOOL.'C*' ; SI (EGA IABC 0) ; DELTAT = INST + 1.E+30 ; DEPINT = SUPTAB.'SOLUTION_PASAPAS'.'DEPLACEMENTS'.IABC ; VITDFI = SUPTAB.'SOLUTION_PASAPAS'. 'DEFORMATIONS_INELASTIQUES'.IABC ; SIG1 = SIGF * 1. ; FINSI ; SI (IABC > 0) ; DELTAT = INST - (SUPTAB.'SOLUTION_PASAPAS'.'TEMPS'. (IABC - 1)) ; DEPINT = (SUPTAB.'SOLUTION_PASAPAS'.'DEPLACEMENTS'.IABC) - (SUPTAB.'SOLUTION_PASAPAS'.'DEPLACEMENTS'.(IABC - 1)) ; VITDFI = (SUPTAB.'SOLUTION_PASAPAS'. 'DEFORMATIONS_INELASTIQUES'.IABC) - (SUPTAB.'SOLUTION_PASAPAS'. 'DEFORMATIONS_INELASTIQUES'.(IABC - 1)) ; FINSI ; FINSI ; SI BOOL.'J_DYNA' ; VITF = (SUPTAB.'SOLUTION_PASAPAS'.'VITESSES'.IABC) REDU ELTETA ; ACCF = (SUPTAB.'SOLUTION_PASAPAS'.'ACCELERATIONS'.IABC) REDU ELTETA ; FINSI ; FINSI ; SINON ; * SOLUTION_RESO FINSI ; * ON CHANGE LE DEPLACEMENT DEPINT EN MCHAML AU NOEUD **************************************************** * MODIFICATION DES CHAMPS THETA ET PI SI GRANDE ROT **************************************************** SI BOOL.'DJ/DA' ; SUPTAB.'COUCHE' = (SUPTAB.'COUCHE') - 1 ; SUPTAB.'COUCHE' = (SUPTAB.'COUCHE') + 1 ; SINON ; P1 = SUPTAB.'FRONT_FISSURE' ; SUPTAB.'FRONT_FISSURE' = SUPTAB.'FRONT_FISSURE_2' ; SUPTAB.'FISSURE' = SUPTAB.'FISSURE_2' ; SUPTAB.'FRONT_FISSURE' = P1 ; FINSI ; FINSI ; FINSI ; *************************************************** ********** TEMPERATURES A L INSTANT INST ********** *************************************************** SI BOOL.'THER' ; SI BOOL.'THER_DECO' ; SINON ; * bp, 2014-11-13 : ajout distinction cas BOOL.'THER' et BOOL.'THER_DECO' TEPINT = REDU ELTETA SUPTAB.'SOLUTION_PASAPAS'.'TEMPERATURES'. IABC ; FINSI ; SINON ; TEPINT = SUPTAB.'TEMPERATURES' ; FINSI ; FINSI ; *************************************************** ********** DEF IMPOSEE A L INSTANT INST ********** *************************************************** SI BOOL.'DEF_IMP' ; SINON ; DEFI = SUPTAB.'DEFORMATIONS_IMPOSEES' ; FINSI ; FINSI ; *************************************************** ********** CONTACT FROTTANT ********** *************************************************** * ...TODO SINON ; * A PRIORI DEPLACEMENT_FISSURE PAS TRES UTILE ... WDEP = SUPTAB . 'DEPLACEMENT_FISSURE' ; SINON ; FINSI ; FINSI ; SIGCON = SUPTAB . 'PRESSION_FISSURE' ; SINON ; FINSI ; * PEUT ETRE FAIRE UN TEST SUR SIGCON ... FINSI ; FINSI ; ***************************************************** * CONTRAINTE RECALCULEE SI BOOL.'THER' = VRAI et NON BOOL.'PASAPAS' * ***************************************************** FINSI ; *************************************************** ************ MATERIAU A L INSTANT INST ************ *************************************************** SINON ; MAT_INST = MAT_MEC ; * bp: ne devrait on pas ecrire ci dessous..? inutile? * MAT_INST = REDU MOD_MEC_R MAT_MEC FINSI ; OBJUTI.'MAT_INST' = MAT_INST ; *************************************************** ********* RIGIDITE TOTALE A L INSTANT INST ******** *************************************************** * bp: utilite? SI ( BOOL.'DJ/DA' OU (BOOL.'DECOUPLAGE' SI (BOOL.'GRADPROP' ET BOOL.'THER') ; (SUPTAB.'SOLUTION_PASAPAS'.'CARACTERISTIQUES') ; SINON ; M1 = SUPTAB.'SOLUTION_PASAPAS'.'CARACTERISTIQUES' ; FINSI ; SINON ; FINSI ; FINSI ; OBJUTI.'RIGTOT' = RIGTOT ; ******************************************************************** ****** CHARGEMENT MECANIQUE (FORCES NODALES) A L INSTANT INST ****** ******************************************************************** PREINT = FOR000 ; *** SOLUTION_PASAPAS ****************************** FINSI ; SI BOOL.'MODE_PRES' ; * Dans le cas ou il y a un modele de pression * --> on isole la partie du MMODEL de pression qui est appliquee * sur la fissure SI BOOL.'PRES_FISS' ; FINSI ; * --> on calcule les forces nodales equivalentes aux pressions * appliquees hors de la fissure FINSI ; FINSI ; SINON ; *** SOLUTION_RESO ********************************** FINSI ; SI BOOL.'MODE_PRES' ; * Dans le cas ou il y a un modele de pression * --> on isole la partie du MMODEL de pression qui est appliquee sur * la fissure SI BOOL.'PRES_FISS' ; FINSI ; * --> on calcule les forces nodales equivalentes aux pressions * appliquees hors de la fissure FINSI ; FINSI ; FINSI ; ********************************************************************** ******** POUR LES PRESSIONS APPLIQUEES SUR LA FISSURE * on calcule le MCHAML vectoriel de [pression * normale] ********************************************************************** SI BOOL.'PRES_FISS' ; * champ de normale unitaire au maillage de la fissure NF = NF2 / (XX**0.5) ; * champ de pression normale au maillage de la fissure PNF = PF * NF LCP LCOMP LCOMP ; FINSI ; **************************************************** ***** APPEL A G_AUX POUR LES CHAMPS AUXILIAIRES **** **************************************************** * TEST DE G_AUX SI BOOL.'DECOUPLAGE' ; CH_AUX = G_AUX SUPTAB OBJUTI BOOL ; MESS 'ERREUR : G_AUX A RENCONTRE UN PROBLEME' ; FINSI ; FINSI ; * BOUCLE SUR LES INTEGRALES A CALCULER ==============================* * NBMIXT = nbre d integrale a calculer (=1 si J, =2 si K1 K2, =3 * si K1 K2 K3) NBMIXT = 1 ; IM = 0 ; SI BOOL.'DECOUPLAGE' ; NBMIXT = 2 ; SI (EGA GDIME 3) ; NBMIXT = 3 ; FINSI ; FINSI ; REPE BOUCMIX NBMIXT ; IM = IM + 1 ; **************************************************** **************** EN CAS DE DECOUPLAGE ************** **************************************************** SI BOOL.'DECOUPLAGE' ; MOTMIX = CH_AUX.IM.'MOTMIX' ; MOTMIA = CH_AUX.IM.'MOTMIA' ; A_PREI = CH_AUX.IM.'A_PREI' ; A_DEPI = CH_AUX.IM.'A_DEPI' ; A_SIGF = CH_AUX.IM.'A_SIGF' ; A_DEPGR = CH_AUX.IM.'A_DEPGR' ; C_MATE = OBJUTI.'C_MATE' ; FINSI ; **************************************************** ******* EN CAS DE CALCUL EN VISCO_PLASTICITE ******* **************************************************** * INITIALISATION DE FACT1 FACT1 = 1. ; SI (BOOL.'C*' OU BOOL.'C*H') ; SI (EGA ITYPEF 1) ; FINSI ; FINSI ; SI BOOL.'C*' ; SI (EGA ITYPEF 1) ; * DENSITE D'ENERGIE POUR LES FLUAGES DONT ON A UNE * EXPRESSION EXPLICITE DE L'INTEGRATION SUR LE TEMPS ENERM1 = (CHAF2*((CHAF2 + 1.)**(-1.)))*CHAF1*(VMI1**COE1) ; ENERM2 = (CHAF4*((CHAF4 + 1.)**(-1.)))*CHAF3*(VMI1**COE2) ; ENERM3 = (CHAF6*((CHAF6 + 1.)**(-1.)))*CHAF5*(VMI1**COE3) ; ENERM = ENERM1 + ENERM2 + ENERM3 ; SINON ; SI ((EGA INST 0. 1.E-10) ET ('<'(COE2 - 1) 0.)) ; V1 = 0. ; SINON ; V1 = INST**(COE2 - 1) ; FINSI ; ENERM = (CHAF2*((CHAF2 + 1.)**(-1.)))* CHAF1*(VMI1**COE1)*CHAF3*V1 ; FINSI ; SI (BOOL.'COQ' ET BOOL.'EL_LIN') ; ENERM = ENERM*MOD_MEC_R EPAICH ; FINSI ; FINSI ; SI (EGA ITYPEF 2) ; * ON N'A PAS UNE EXPRESSION EXPLICITE DE * L'INTEGRATION DU FLUAGE SUR LE TEMPS SIGMOY = 0.5*(SIG1 + SIGF) ; SI ((EGA IABC 0) ET (NON BOOL.'REPRI')) ; SINON ; FINSI ; SIG11 = SIG1 ; SIG1 = SIGF ; VDI1 = VITDFI ; FINSI ; FINSI ; * FACTEUR AFFECTE A J SI ON CALCULE C*(H) SI BOOL.'C*H' ; N1 = COE2 / COE3 ; SI (EGA INST 0. 1.E-10) ; INST = 1.E-10 ; FINSI ; V1 = 0. ; FIN BF2 ; FIN BF1 ; SI (EGA FACT1 0. 1.E-10) ; FACT1 = 1.E+30 ; FINSI ; FACT1 = ((V1 ** N1) / FACT1) ** COE3 ; FINSI ; FINSI ; ******************************************************** * SI LA COURBE DE TRACTION DEPEND DE LA TEMPERATURE ON * * CALCULE LA VARIATION DE CONTRAINTES DE VON-MISES LORS* * D'UNE AUGMENTATION (DETATE) DE LA TEMPERATURE A INST * ******************************************************** *bp 11/08/2011 : on calcule plutot la variation de la limite d elasticite * ce qui est moins faux si presence de decharge... * => on construit VM1 comm VM2 ! DETATE = 1. ; EPS1 = MSQ1 * EPS1 ; *rem : on pourrait utiliser BORN dans le futur * VMI1 = (CHAN ('VMIS' MOD_MEC_R SIGF MAT_INST) * 'TYPE' 'SCALAIRE')*MSQ1 ; * DETAVM = VMI1 * 0. ; DETAVM = 0. ; REPETER BCMOD2 NBOBJ ; * VM1 = REDU VMI1 MODI ; SI (EGA MODPLA.&BCMOD2 1) ; 'ECRO' TABTRA.&BCMOD2) TEPINT ; EPS2 'STRESSES' 'SCALAIRE' ; 'ECRO' TABTRA.&BCMOD2) TEP1 ; * VM2 = 'VARI' 'NUAG' MODI (EXCO 'ECRO' MA2 SIGM) * (REDU EPS1 MODI) 'STRESSES' 'SCALAIRE' ; * VM2 = ((EXCO VM2 SIGM 'SCAL')CHAN 'TYPE' 'SCALAIRE') * * (REDU MSQ1 MODI) ; EPS2 'STRESSES' 'SCALAIRE' ; FINSI ; SI ((EGA MODPLA.&BCMOD2 2) OU (EGA MODPLA.&BCMOD2 3)) ; * EPS2 = REDU EPS1 MODI ; SI (EGA MODPLA.&BCMOD2 2) ; FINSI ; * VM2 = VM2 * (REDU MSQ1 MODI) ; FINSI ; DETAVM = ((VM2 - VM1) / DETATE) ; SINON ; DETAVM = DETAVM + ((VM2 - VM1) / DETATE) ; FINSI ; FINSI ; FIN BCMOD2 ; FINSI ; ******************************************************* **** ENERGIE DE DEFORMATION ELASTIQUE ET PLASTIQUE **** ******************************************************* *** *** DENSITE D'ENERGIE EN ELASTO OU THERMO-ELASTO-PLASTICITE ET *** DENSITE D'ENERGIE LIEE A LA VARIATION DE COURBE DE TRACTION *** SI (NON BOOL.'C*') ; * SI (BOOL.'PASAPAS' ET (NON BOOL.'DECOUPLAGE')) ; SI (EGA IABC 0) ; SI (BOOL.'COQ' ET BOOL.'EL_LIN') ; VMI1 = VMI1*MOD_MEC_R EPAICH ; FINSI ; FINSI ; SINON ; SI (BOOL.'COQ' ET BOOL.'EL_LIN') ; VMI1 = VMI1*MOD_MEC_R EPAICH ; FINSI ; WVMIS = WVMIS + ((0.5*(DETAV1 + DETAVM))* FINSI ; FINSI ; ENERM = WELAS + WPLAS ; SIG11 = SIG1 ; SIG1 = SIGF*1. ; VAR11 = VAR1 ; VAR1 = VARF*1. ; DETAV1 = DETAVM ; FINSI ; SINON ; ENERM = WELAS ; FINSI ; FINSI ; *************************************************** *********** APPEL A LA PROCEDURE G_CALCUL ********* *************************************************** * REMPLISSAGE DE OBJUTI OBJUTI.'&BOUCMIX' = &BOUCMIX ; OBJUTI.'IABC' = IABC ; OBJUTI.'&BOUCEXT' = &BOUCEXT ; OBJUTI.'INST' = INST ; OBJUTI.'C_MATE' = C_MATE ; OBJUTI.'FACT1' = FACT1 ; OBJUTI.'MAT_INST' = MAT_INST ; OBJUTI.'RIGTOT' = RIGTOT ; OBJUTI.'ENERM' = ENERM ; OBJUTI.'WVMIS' = WVMIS ; OBJUTI.'TEPINT' = TEPINT ; OBJUTI.'PREINT' = PREINT ; OBJUTI.'DEFI' = DEFI ; * PRESSION SUR LES LEVRES SI BOOL.'PRES_FISS' ; OBJUTI.'MODE_PRESSION_FISSURE'= MODPF ; OBJUTI.'PRESSION_FISSURE' = PNF ; FINSI ; OBJUTI.'DEPINT' = DEPINT ; OBJUTI.'SIGF' = SIGF ; OBJUTI.'SIG1' = SIG11 ; OBJUTI.'VARF' = VARF ; * DYNAMIQUE OBJUTI.'VITF' = VITF ; OBJUTI.'ACCF' = ACCF ; * DECOUPLAGE OBJUTI.'MOTMIX' = MOTMIX ; OBJUTI.'MOTMIA' = MOTMIA ; OBJUTI.'A_PREI' = A_PREI ; OBJUTI.'A_DEPI' = A_DEPI ; OBJUTI.'A_SIGF' = A_SIGF ; OBJUTI.'A_DEPGR'= A_DEPGR ; * FROTTEMENT OBJUTI . 'WDEP' = WDEP ; OBJUTI . 'SIGCON' = SIGCON ; FINSI ; * APPEL A G_CALCUL G_CALCUL SUPTAB OBJUTI BOOL ; FIN BOUCMIX ; * FIN DE BOUCLE SUR LES INTEGRALES A CALCULER ========================* **************************************************** ****** ON RECUPERE LA CONFIGURATION INITIALE ******* **************************************************** FORM CONFIG0 ; FINSI ; **************************************************** ******* FIN DE BOUCLE SUR LES PAS DE CALCUL ******** **************************************************** FIN BOUCEXT ; **************************************************** ** STOCKAGE DES RESULTATS DANS L OBJET EVOLUTIONS ** **************************************************** * en plus de ce qui existe dans SUPTAB.'RESULTATS' * et dans CHPO_RESULTATS (fait dans G_calcul) * Cas 2D ******************************************* SI (EGA GDIME 2) ; TITR CHA1 ; SI BOOL.'DECOUPLAGE' ; P1 = &BB2 - 1 ; FIN BB2 ; SUPTAB.'EVOLUTION_RESULTATS'.MOT1 = E1 ; FIN BB1 ; SINON ; P1 = &BB1 - 1 ; FIN BB1 ; SUPTAB.'EVOLUTION_RESULTATS' = E1 ; FINSI ; FINSI ; * Cas 3D ******************************************* * Rem BP : * !!! Attention passer ici lorsque la fissure propage doit conduire * a des erreurs, puisque les points du front changent ...!!! * Il faudrait a terme supprimer cette mise en forme des resultats * ainsi que celle utilisant la table RESULTATS (cf g_calcul). * Seul CHPO_RESULTATS semblent perenne pour la porpagation. SI ((EGA GDIME 3) ET (NON BOOL.'COQ')) ; SI BOOL.'DECOUPLAGE' ; MOT1 = IND1.&BB1 ; SINON ; * CHA2 = CHAI ' (Pt ' ('NOEUD' PM) ')' ; FINSI ; P1 = &BB3 - 1 ; FIN BB3 ; SUPTAB.'EVOLUTION_RESULTATS'.MOT1.PM = E1 ; FIN BB2 ; FIN BB1 ; SINON ; SINON ; * CHA2 = CHAI ' (Pt ' ('NOEUD' PM) ')' ; FINSI ; P1 = &BB2 - 1 ; FIN BB2 ; SUPTAB.'EVOLUTION_RESULTATS'.PM = E1 ; FIN BB1 ; FINSI ; FINSI ; * Cas coque ******************************************* SI BOOL.'COQ' ; * CHA2 = CHAI ' (' PM ')' ; P1 = &BB2 - 1 ; FIN BB2 ; SUPTAB.'EVOLUTION_RESULTATS'.PM = E1 ; FIN BB1 ; FINSI ; FINSI ; ******************************************************** **** STOCKAGE POUR UNE EVENTUELLE REPRISE DE CALCUL **** ******************************************************** SUPTAB.'IABC' = IABC ; SUPTAB.'MAT_INST' = MAT_INST ; SUPTAB.'END1' = ENERM ; SUPTAB.'ENV1' = WVMIS ; FINSI ; SI (EGA ITYPEF 2) ; SUPTAB.'VDI1' = VDI1 ; FINSI ; FINSI ; ******************************************************** ************ ENLEVEMENT DES OBJETS INUTILES ************ ******************************************************** SUPTAB.'COU1' = SUPTAB.'COUCHE' ; FINSI ; *bp: soyons coherent... CHAMP_THETA est deja renseigne SUPTAB.'CHAMP_THET1' = SUPTAB.'CHAMP_THETA' ; OTER SUPTAB 'CHAMP_THETA' ; * UTILTETA sera pratique pour la propagation xfem SUPTAB.'UTILTET1' = UTILTETA ; * ELTETA sera pratique pour les tests de reprise SUPTAB.'ELTET1' = ELTETA ; FINPROC ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales