Download ch_theta.procedur

Back to the list

   1 : * CH_THETA  PROCEDUR  JC220346  12/09/12    21:15:01     7501           
   2 : 'DEBPROC' CH_THETA SUPTAB*TABLE ;
   3 : *|=====================================================================|
   4 : *|                                                                     |
   5 : *|  << OBJET >> :                                                      |
   6 : *|                                                                     |
   7 : *|  Procedure determinant un champ/point de type THETA, c'est-a-dire   |
   8 : *|  un champ/point dont le norme est constant a l'interieur d'une      |
   9 : *|  courronne entourant le front d'une fissure, zero a l'exterieur de  |
  10 : *|  cette courronne. Le vecteur represente par le champ THETA indique  |
  11 : *|  la direction de propagation eventuelle de la fissure.              |
  12 : *|                                                                     |
  13 : *|  << ENTREE >> :                                                     |
  14 : *|                                                                     |
  15 : *|  SUPTAB = Objet de type TABLE dont les indices sont des             |
  16 : *|           objets de type MOT (a ecrire en toutes lettres) :         |
  17 : *|                                                                     |
  18 : *|  ARGUMENTS OBLIGATOIRES DANS TOUS LES CAS                           |
  19 : *|  °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°                           |
  20 : *|                                                                     |
  21 : *|  SUPTAB.'MAILLAGE' = Objet de type MAILLAGE representant soit       |
  22 : *|                      la structure totale etudiee (maillage          |
  23 : *|                      utilise dans l'analyse par elements finis,     |
  24 : *|                      soit, pour reduire le temps de calcul, le      |
  25 : *|                      maillage entourant le plus grand des contours  |
  26 : *|                      qu'on a defini pour calculer le champ THETA.   |
  27 : *|  SUPTAB.'FISSURE'  = Objet de type MAILLAGE donnant toutes les deux |
  28 : *|                      levres d'une fissure si elle est complete (la  |
  29 : *|                      fissure presente des noeuds doubles), une      |
  30 : *|                      seule levre si l'autre levre n'est pas maillée |
  31 : *|                      en raison, par example, de la symetrie du      |
  32 : *|                      probleme.                                      |
  33 : *|  SUPTAB.'FRONT_FISSURE' = Objet de type POINT (representant la      |
  34 : *|                           pointe de la fissure) si la fissure est   |
  35 : *|                           une ligne, de type MAILLAGE (representant |
  36 : *|                           le front de la fissure) si la fissure est |
  37 : *|                           sur un plan en 3D.                        |
  38 : *|  SUPTAB.'COUCHE'   = Objet de type ENTIER representant le nombre    |
  39 : *|                      de couches d'elements (autour du point de      |
  40 : *|                      fissure) qui se deplacent pour simuler la      |
  41 : *|                      propagtion de la fissure.                      |
  42 : *|                                                                     |
  43 : *|  CAS D'UNE FISSURE CIRCULAIRE DANS UNE GEOMETRIE PLANE              |
  44 : *|  °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°              |
  45 : *|                                                                     |
  46 : *|  SUPTAB.'PCENTRE'  = centre de la fissure circulaire                |
  47 : *|                                                                     |
  48 : *|                                                                     |
  49 : *|  CAS OU L EXTENSION DE FISSURE CORRESPOND A UNE                     |
  50 : *|  °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°                     |
  51 : *|  SIMPLE TRANSLATION DANS UN TUYAUTERIE DROITE (3D)                  |
  52 : *|  °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°                  |
  53 : *|                                                                     |
  54 : *|  Dans ce cas on effectue dans la procedure une transformation de    |
  55 : *|  tuyau en plaque en passant au systeme de coordonnees cylindriques. |
  56 : *|  Il est alors necessaire de fournir :                               |
  57 : *|                                                                     |
  58 : *|  SUPTAB.'POINT_1' = centre du systeme de coordonnees                |
  59 : *|  SUPTAB.'POINT_2' = POINT tel que l'axe defini par POINT_1          |
  60 : *|                     vers POINT_2 soit l'axe Z poisitif              |
  61 : *|  SUPTAB.'POINT_3' = POINT tel que le plan defini par les 3 points   |
  62 : *|                     POINT_1 POINT_2 POINT_3 donne l'angle theta nul |
  63 : *|                                                                     |
  64 : *|  CAS OU L EXTENSION DE FISSURE NE CORRESPOND PAS                    |
  65 : *|  °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°                    |
  66 : *|  A UNE SIMPLE TRANSLATION                                           |
  67 : *|  °°°°°°°°°°°°°°°°°°°°°°°°                                           |
  68 : *|                                                                     |
  69 : *|  A) Fissure dans un tuyauterie droite (3D, Rotation)                |
  70 : *|                                                                     |
  71 : *|  SUPTAB.'POINT_1' = Objet de type POINT                             |
  72 : *|  SUPTAB.'POINT_2' = Objet de type POINT qui, avec le point POINT_1, |
  73 : *|                     constitue l'axe perpendiculaire a la section    |
  74 : *|                     fissuree.                                       |
  75 : *|                                                                     |
  76 : *|  B) Fissure dans un coude (3D, rotation + transformation)           |
  77 : *|                                                                     |
  78 : *|     Outre les deux points SUPTAB.'POINT_1' et SUPTAB.'POINT_2'      |
  79 : *|     definis en haut on donne encore :                               |
  80 : *|  SUPTAB.'CHPOINT_TRANSFORMATION' = Objet de type CHPOINT utilise    |
  81 : *|                                    pour transformer une coude en    |
  82 : *|                                    un tuyauterie droite.            |
  83 : *|                                                                     |
  84 : *|  SUPTAB.'OPERATEUR' = Objet de type MOT valant 'PLUS' ou 'MOIN'     |
  85 : *|                       pour indiquer l'operateur PLUS ou MOIN a      |
  86 : *|                       utiliser si l'on veut transformer la coude    |
  87 : *|                       en un tuyauterie droite.                      |
  88 : *|                                                                     |
  89 : *|  EN CAS DES ELEMENTS DE COQUE                                       |
  90 : *|  °°°°°°°°°°°°°°°°°°°°°°°°°°°°                                       |
  91 : *|                                                                     |
  92 : *|  SUPTAB.'EPAISSEUR' = Objet de type FLOTTANT donnant l'épaisseur    |
  93 : *|                       de la coque a la pointe de la fissure         |
  94 : *|                                                                     |
  95 : *|                                                                     |
  96 : *|  << SORTIE >> :                                                     |
  97 : *|                                                                     |
  98 : *|  TETA = Objet de type :                                             |
  99 : *|                                                                     |
 100 : *|       - TABLE INDICEE PAR DES OBJETS DE TYPE POINT CONTENANT        |
 101 : *|         DES ELEMENTS DE TYPE CHPOINT DANS LE CAS 3 DIMENSIONS.      |
 102 : *|         CHAQUE ELEMENT CONTIENT LE CHAMP THETA AU NOEUD DU          |
 103 : *|         FRONT DE COORDONNEES CELLES DU POINT P : TETA.P. ELLE       |
 104 : *|         EST EGALEMENT INDICEE PAR LE MOT 'GLOBAL' POUR DONNER       |
 105 : *|         LE CHAMP THETA GLOBAL LE LONG DE TOUT FRONT DE LA FISSURE   |
 106 : *|       - ELEMENT DE TYPE CHPOINT CONTENANT LE CHAMP THETA EN 2       |
 107 : *|         DIMENSIONS (OU EN 3 DIMENSIONS AVEC DES ELEMENTS DE         |
 108 : *|         COQUE MINCE) A LA POINTE DE FISSURE                         |
 109 : *|                                                                     |
 110 : *|=====================================================================|
 111 : *-- ICOQU = VRAI ==> Elements de coque
 112 : *-- ILIN =  VRAI ==> Elements lineaires
 113 : *-- IQUA =  VRAI ==> Elements nonlineaires
 114 : &DIME = 'VALEUR' DIME ; &MODE = 'VALEUR' MODE ;
 115 : &ELEM = 'VALEUR' ELEM ; MOTAX = 'MOT' AXIS ;
 116 : ITRAN = VRAI; IROTA = FAUX; VALPI = 3.14159261626;
 117 : *------------------------------------------------*
 118 : *-------- TEST DE COMPABILITE DES DONNEES -------*
 119 : *------------------------------------------------*
 120 : 'SI' ('EGA' &ELEM 'UUUU');
 121 :    'MESS' 'ERREUR : TYPE D ELEMENTS NON CONNU. UTILISEZ';
 122 :    'MESS' '         L OPERATEUR OPTI POUR LE DECLARER';
 123 :    'QUITTER' CH_THETA;
 124 : 'FINSI';
 125 : 'SI' ('NON' ('EXIST' SUPTAB 'MAILLAGE'));
 126 :    'MESS' 'ERREUR : ON N A PAS TROUVE DANS LA'
 127 :    'MESS' '         TABLE L OBJET MAILLAGE';
 128 :    'QUITTER' CH_THETA;
 129 : 'SINON';
 130 :    MAILLAGE = SUPTAB.'MAILLAGE' ;
 131 :    NB1 = 'NBNO' ('CHAN' MAILLAGE 'POI1');
 132 : 'FINSI';
 133 : M_FISS = 'ELEM' MAILLAGE 'APPU' 'LARG' SUPTAB.'FRONT_FISSURE';
 134 : NBNO1 = 'NBNO' ('ELEM' (CHAN 'LIGNE' M_FISS) 1);
 135 : ILIN = 'EGA' NBNO1 2; IQUA = 'EGA' NBNO1 3;
 136 : IPLAN = ('EGA' &ELEM 'TRI3') 'OU' ('EGA' &ELEM 'QUA4') 'OU'
 137 :         ('EGA' &ELEM 'TRI6') 'OU' ('EGA' &ELEM 'QUA8');
 138 : ICOQU = (&DIME 'EGA' 3) 'ET' IPLAN;
 139 : ****
 140 : 'SI' (ICOQU 'ET' ('NON' ('EXIST' SUPTAB 'EPAISSEUR')));
 141 :    'MESS' 'ERREUR : L EPAISSEUR DE LA COQUE N EST PAS DONNEE';
 142 :    'QUITTER' CH_THETA;
 143 : 'FINSI';
 144 : ****
 145 : 'SI' ('NON' ('EXIST' SUPTAB 'FISSURE'));
 146 :    'MESS' 'ERREUR : LA FISSURE DU PROBLEME N EST PAS DONNEE';
 147 :    'QUITTER' CH_THETA;
 148 : 'SINON';
 149 :    FISSURE = SUPTAB.'FISSURE';
 150 :   'SI' ('NEG' ('TYPE' FISSURE) 'MAILLAGE');
 151 :      'MESS' 'ERREUR : LA FISSURE DOIT ETRE UN OBJET DE TYPE MAILLAGE';
 152 :      'QUITTER' CH_THETA;
 153 :   'FINSI';
 154 :    NB2 = 'NBNO' ('CHAN' (FISSURE 'ET' MAILLAGE) 'POI1');
 155 :   'SI' ('NEG' NB1 NB2);
 156 :      'MESS' 'ERREUR : IL Y A DES NOEUDS DOUBLES ENTRE';
 157 :      'MESS' '         LE MAILLAGE ET LA FISSURE';
 158 :      'QUITTER' CH_THETA;
 159 :   'FINSI';
 160 :    LMOTS = 'ELEM' FISSURE 'TYPE'; ILIGN = FAUX;
 161 :   'SI' ('EGA' ('DIME' LMOTS) 1);
 162 :      MOT1 = 'EXTR' LMOTS 1;
 163 :      ILIGN = ('EGA' MOT1 'SEG2') 'OU' ('EGA' MOT1 'SEG3');
 164 :   'FINSI';
 165 :   'SI' (('EGA' &DIME 3) 'ET' ('NON' ICOQU));
 166 :     'SI' ILIGN;
 167 :       'MESS' 'ERREUR : EN 3D AVEC ELEMENTS MASSIFS LA';
 168 :       'MESS' '         FISSURE DOIT ETRE UNE SURFACE';
 169 :       'QUITTER' CH_THETA;
 170 :     'FINSI';
 171 :   'FINSI';
 172 :   'SI' ((&DIME 'EGA' 2) 'OU' ICOQU);
 173 :     'SI' ('NON' ILIGN);
 174 :       'MESS' 'ERREUR : EN 2D OU ELEMENTS EN COQUE MINCE';
 175 :       'MESS' '         LA FISSURE DOIT ETRE UNE LIGNE';
 176 :       'QUITTER' CH_THETA;
 177 :     'FINSI';
 178 :   'FINSI';
 179 : 'FINSI';
 180 : ****
 181 : 'SI' ('NON' ('EXIST' SUPTAB 'FRONT_FISSURE'));
 182 :    'MESS' 'ERREUR : LE FRONT DE LA FISSURE N EST PAS DONNE';
 183 :    'QUITTER' CH_THETA;
 184 : 'FINSI';
 185 : ****
 186 : NB2 = 'NBNO' ('CHAN' (SUPTAB.'FRONT_FISSURE' 'ET' MAILLAGE) 'POI1');
 187 : 'SI' ('NEG' NB1 NB2);
 188 :    'MESS' 'ERREUR : IL Y A DES NOEUDS DOUBLES ENTRE LE';
 189 :    'MESS' '         MAILLAGE ET LE FRONT DE LA FISSURE';
 190 :    'QUITTER' CH_THETA;
 191 : 'FINSI';
 192 : IFOND = 'TYPE' SUPTAB.'FRONT_FISSURE';
 193 : 'SI' ((&DIME 'EGA' 3) 'ET' ('NON' ICOQU));
 194 :   'SI' ('EGA' IFOND 'POINT   ');
 195 :     'MESS' 'ERREUR : EN 3D AVEC ELEMENTS MASSIFS LE FRONT';
 196 :     'MESS' '         DE LA FISSURE DOIT ETRE UNE LIGNE';
 197 :     'QUITTER' CH_THETA;
 198 :   'FINSI';
 199 : 'FINSI';
 200 : 'SI' ((&DIME 'EGA' 2) 'OU' ICOQU);
 201 :   'SI' ('NON' ('EGA' IFOND 'POINT   '));
 202 :     'MESS' 'ERREUR : EN 2D OU ELEMENTS EN COQUE MINCE LE';
 203 :     'MESS' '         FOND DE LA FISSURE DOIT ETRE UN POINT';
 204 :     'QUITTER' CH_THETA;
 205 :   'FINSI';
 206 : 'FINSI';
 207 : NB1 = 'NBNO' ('CHAN' FISSURE 'POI1');
 208 : NB2 = 'NBNO' ('CHAN' (SUPTAB.'FRONT_FISSURE' 'ET' FISSURE) 'POI1');
 209 : 'SI' ('NEG' NB1 NB2);
 210 :    'MESS' 'ERREUR : IL Y A DES NOEUDS DOUBLES ENTRE LE FRONT';
 211 :    'MESS' '         DE LA FISSURE ET LA FISSURE ELLE MEME';
 212 :    'QUITTER' CH_THETA;
 213 : 'FINSI';
 214 : ****
 215 : 'SI' ('NON' ('EXIST' SUPTAB 'COUCHE'));
 216 :    'MESS' 'ERREUR : ON VEUT LE NOMBRE DE COUCHES D ELEMENTS';
 217 :    'MESS' '         AUTOUR DE LA FISSURE QUI SE DEPLACE';
 218 :    'MESS' '         POUR SIMULER LA PROPAGATION DE LA FISSURE';
 219 :    'QUITTER' CH_THETA;
 220 : 'SINON';
 221 :    COUCHE = SUPTAB.'COUCHE' ;
 222 : 'FINSI';
 223 : ****
 224 : ICOUDE = FAUX;
 225 : ITUYAU = FAUX;
 226 : 'SI' (('EXISTE' SUPTAB 'CHPOINT_TRANSFORMATION') 'OU'
 227 :       ('EXISTE' SUPTAB 'OPERATEUR'));
 228 :    ICOUDE = VRAI;
 229 :   'SI' ('NON' ('EXIST' SUPTAB 'CHPOINT_TRANSFORMATION'));
 230 :     'MESS' 'ERREUR : ON VEUT LE CHAMP/POINT QUI TRANSFORME';
 231 :     'MESS' '         LA COUDE EN UN TUYAUTERIE DROITE.';
 232 :     'QUITTER' CH_THETA;
 233 :   'FINSI';
 234 :  'SI' ('NON' ('EXIST' SUPTAB 'OPERATEUR'));
 235 :     'MESS' 'ERREUR : ON VEUT LE NOM DE L OPERATEUR A UTILISER';
 236 :     'MESS' '         POUR LA TRANSFORMATION DE LA COUDE. ';
 237 :     'QUITTER' CH_THETA;
 238 :   'SINON';
 239 :      OPER1 = 'MOT' SUPTAB.'OPERATEUR';
 240 :   'FINSI';
 241 : 'FINSI';
 242 : ****
 243 : 'SI' ('NON' ('EXISTE' SUPTAB 'POINT_3'));
 244 :   'SI' (('EXISTE' SUPTAB 'POINT_1') 'OU'
 245 :         ('EXISTE' SUPTAB 'POINT_2') 'OU' ICOUDE);
 246 :     'SI' ('NEG' &DIME 3);
 247 :        'MESS' 'ERREUR : DONNEES IMCOMPATIBLES. CONSULTEZ LA NOTICE';
 248 :        'QUITTER' CH_THETA;
 249 :     'FINSI';
 250 :      ITRAN = FAUX; IROTA = VRAI;
 251 :     'SI' (('NON' ('EXIST' SUPTAB 'POINT_1')) 'OU'
 252 :           ('NON' ('EXIST' SUPTAB 'POINT_2')));
 253 :        'MESS' 'ERREUR : ON VEUT LES POINTS POUR CONSTITUER L AXE';
 254 :        'MESS' '         PERPENDICULAIRE A LA SECTION FISSUREE.';
 255 :        'QUITTER' CH_THETA;
 256 :     'SINON';
 257 :         POINT_1 = SUPTAB.'POINT_1';
 258 :         POINT_2 = SUPTAB.'POINT_2';
 259 :     'FINSI';
 260 :   'FINSI';
 261 : 'FINSI';
 262 : ****
 263 : 'SI' ('EXISTE' SUPTAB 'POINT_3');
 264 :    'SI' (('NON' ('EXIST' SUPTAB 'POINT_1')) 'OU'
 265 :          ('NON' ('EXIST' SUPTAB 'POINT_2')));
 266 :       'MESS' 'ERREUR : ON VEUT LES POINTS POUR CONSTITUER L AXE';
 267 :       'MESS' '         PERPENDICULAIRE A LA SECTION FISSUREE.';
 268 :       'QUITTER' CH_THETA;
 269 :    'SINON';
 270 :      'SI' ('NEG' &DIME 3);
 271 :         'MESS' 'ERREUR : DONNEES IMCOMPATIBLES. CONSULTEZ LA NOTICE';
 272 :         'QUITTER' CH_THETA;
 273 :      'FINSI';
 274 :       ITUYAU = VRAI;
 275 :       PAXEZ1 = SUPTAB.'POINT_1';
 276 :       PAXEZ2 = SUPTAB.'POINT_2';
 277 :       PAXEZ3 = SUPTAB.'POINT_3';
 278 :    'FINSI';
 279 : 'FINSI';
 280 : ****
 281 : 'SI' ('EXISTE' SUPTAB 'PCENTRE');
 282 :   'SI' ('NEG' &DIME 2);
 283 :      'MESS' 'ERREUR : DONNEES IMCOMPATIBLES. CONSULTEZ LA NOTICE';
 284 :      'QUITTER' CH_THETA;
 285 :   'FINSI';
 286 :    ITRAN = FAUX; IROTA = VRAI;
 287 :    PCENTRE = SUPTAB.'PCENTRE';
 288 : 'FINSI';
 289 : *------------------------------------------------*
 290 : *--- QUELQUES MOTS POUR SIMPLIFIER L'ECRITURE ---*
 291 : *------------------------------------------------*
 292 : E = 'MOT' 'EXCO'; C = 'MOT' 'CHAI'; S = 'MOT' 'SCAL';
 293 : MU1 = 'MOT' 'UX'; MU2 = 'MOT' 'UY'; MU3 = 'MOT' 'UZ';
 294 : MF1 = 'MOT' 'FX'; MF2 = 'MOT' 'FY'; MF3 = 'MOT' 'FZ';
 295 : 'SI' ('EGA' MOTAX &MODE) ;
 296 :    MU1 = 'MOT' 'UR'; MU2 = 'MOT' 'UZ'; MU3 = 'MOT' 'UT';
 297 :    MF1 = 'MOT' 'FR'; MF2 = 'MOT' 'FZ';
 298 : 'FINSI';
 299 : TABUTIL = TABL;
 300 : ******************************************
 301 : 'SI' ((&DIME 'EGA' 3) 'ET' ('NON' ICOQU));
 302 : ******************************************
 303 :    TABUTIL.'DIRECTION' = TABL;
 304 :    TMAIL = 'TABLE'; TMBOUGER = 'TABLE'; TVECTEUR = 'TABLE';
 305 :    TPFISS = 'TABLE'; TTETA = 'TABLE';
 306 :    FONDFISS = ORDO (SUPTAB.'FRONT_FISSURE') ;
 307 :    NP = 'NBNO' FONDFISS ;
 308 :    PINIT = FONDFISS 'POIN' 'INIT' ;
 309 :    PFINA = FONDFISS 'POIN' 'FINA' ;
 310 : *--------------------------------------------------*
 311 : * On veut savoir si une seule ou toutes les 2 levres
 312 : * de la fissure ont été modelisees
 313 : * Si 1 levre modelisee : XMULT=2 et ICOS1=FAUX
 314 : * Si 2 levres modelisees : XMULT=1 et ICOS1=VRAI
 315 : *--------------------------------------------------*
 316 :    PFISS = PINIT; CC = FONDFISS 'ELEM' 'APPU' 'LARG' PFISS;
 317 :    VCUB = MAILLAGE 'ELEM' 'APPUYE' 'LARG' PFISS;
 318 :    SURF1 = ('ENVE' VCUB) 'ELEM' 'APPUYE' 'LARG' PFISS;
 319 :    SURF1 = SURF1 'DIFF' (SURF1 'ELEM' 'APPU' 'STRI' FISSURE);
 320 :    PP2 = 'POINT' 2 CC;
 321 :   'SI' ('EGA' ('NBNO' SURF1) ('NBNO' (SURF1 'ET' PP2)));
 322 :      SURF2 = SURF1 'ELEM' 'APPU' 'LARG' PP2;
 323 :     'SI' ('NBEL' SURF2 '>' 2);
 324 :        SURF2 = SURF1 'ELEM' 'APPU' 'LARG' ('POINT' 1 FONDFISS);
 325 :     'FINSI';
 326 :      SURF1 = SURF1 'DIFF' SURF2;
 327 :   'FINSI';
 328 :    FISS1 = ('CONT' SURF1) 'ELEM' 'APPU' 'LARG' PFISS;
 329 :    FISS1 = 'ORDO' FISS1;
 330 :    P1 = 'POINT' FISS1 'INIT'; P2 = 'POINT' FISS1 'FINA';
 331 :    V1 = 'MOIN' PFISS P1; V2 = 'MOIN' PFISS P2;
 332 :    COS1 = ('PSCA' V1 V2) / (('NORM' V1)*('NORM' V2));
 333 :    ICOS1 = COS1 '>' ('COS' 120.);
 334 :   'SI' ICOS1;
 335 :      X1 Y1 Z1 = 'COOR' P1; X2 Y2 Z2 = 'COOR' P2;
 336 :      POINSF = ((X1 + X2)/2.) ((Y1 + Y2)/2.) ((Z1 + Z2)/2.);
 337 :   'SINON';
 338 :      POINSF = P1;
 339 :     'SI'  ('NEG' ('NBNO' FISSURE) ('NBNO' (FISSURE 'ET' POINSF)));
 340 :         POINSF = P2;
 341 :     'FINSI';
 342 :   'FINSI';
 343 : *
 344 :    XMULT = 2.;
 345 : *MC 06/07/98 : test sur le numéro du noeud plutôt que
 346 : *              sur la proximité de ceux-ci
 347 :   'SI' (('NEG' ('NOEU' P1) ('NOEU' PFISS)) 'ET'
 348 :         ('NEG' ('NOEU' P2) ('NOEU' PFISS)) 'ET' ICOS1);
 349 :      XMULT = 1.;
 350 :   'FINSI';
 351 : *---------------------------------------------------------*
 352 : * On determine le support du mouvement de la fissure : MAIL
 353 : * et le maillage qui se deplace : MBOUGER
 354 : *---------------------------------------------------------*
 355 :    MAILVOL = FONDFISS; MBOUGVOL = FONDFISS;
 356 :   'REPETER' MAILV (COUCHE + 1) ;
 357 :      MAILVOL = MAILLAGE 'ELEM' 'APPUYE' 'LARG' MAILVOL ;
 358 :     'SI' ('EGA' &MAILV COUCHE); MBOUGVOL = MAILVOL; 'FINSI';
 359 :   'FIN' MAILV ;
 360 : *
 361 :   'REPETER' BBCC0 2;
 362 :      'SI' ('EGA' &BBCC0 1); SURF1 = PINIT; N1 = 2; N2 = 1; 'FINSI';
 363 :      'SI' ('EGA' &BBCC0 2); SURF1 = PFINA; N1 = 1; N2 = 2; 'FINSI';
 364 :       CC = FONDFISS 'ELEM' 'APPU' 'LARG' SURF1;
 365 :      'REPETER' BSURF1 (COUCHE + 1);
 366 :         VCUB = MAILLAGE 'ELEM' 'APPUYE' 'LARG' SURF1 ;
 367 :         PP2 = 'POINT' N1 CC;
 368 : * MC 19/12/96 : Modif pour fissure non débouchante
 369 :        'SI' ('EGA' &BSURF1 1); SURF1P = PP2; 'FINSI';
 370 :         VCUB = 'INTE' VCUB (MAILLAGE 'ELEM' 'APPUYE' 'LARG' SURF1P);
 371 :         SURF1 = ('ENVE' VCUB) 'ELEM' 'APPUYE' 'LARG' SURF1 ;
 372 :         SURF1P = (('ENVE' VCUB) 'DIFF' SURF1)
 373 :                               'ELEM' 'APPUYE' 'LARG' SURF1P;
 374 : * Fin de modif
 375 :         SURF1 = SURF1 'DIFF' (SURF1 'ELEM' 'APPU' 'STRI' FISSURE);
 376 :        'SI' ('EGA' ('NBNO' SURF1) ('NBNO' (SURF1 'ET' PP2)));
 377 :          'SI' (&BSURF1 '>' 1);
 378 :             SURF1 = SURF1 'DIFF' SURF3;
 379 :          'FINSI';
 380 :           SURF2 = SURF1 'ELEM' 'APPU' 'LARG' PP2;
 381 :          'SI' (('NBEL' SURF2) '>' 2);
 382 :             SURF2 = SURF1 'ELEM' 'APPU' 'LARG' ('POINT' N2 CC);
 383 :          'FINSI';
 384 :           SURF1 = SURF1 'DIFF' SURF2;
 385 :           CC = 'DIFF' ('CONT' ('ELEM' SURF2 1)) CC;
 386 :           CC = 'ORDO' CC;
 387 :           CC = 'ELEM' CC 2;
 388 :          'SI' (&BSURF1 '>' 1); SURF3 = SURF2 'ET' SURF3; 'SINON';
 389 :             SURF3 = SURF2 ;
 390 :          'FINSI';
 391 :        'FINSI';
 392 :      'FIN' BSURF1;
 393 :      'SI' ('EGA' &BBCC0 1);
 394 :         SURINI = PINIT;
 395 :        'REPETER' BSURI1 (COUCHE + 1);
 396 :           SURINI = SURF1 'ELEM' 'APPU' LARG SURINI;
 397 :          'SI' ('EGA' &BSURI1 COUCHE); SURINIT1 = SURINI; 'FINSI';
 398 :        'FIN' BSURI1;
 399 :      'FINSI';
 400 :      'SI' ('EGA' &BBCC0 2);
 401 :         SURFIN = PFINA ;
 402 :        'REPETER' BSURI2 (COUCHE + 1);
 403 :           SURFIN = SURF1 'ELEM' 'APPU' LARG SURFIN;
 404 :          'SI' ('EGA' &BSURI2 COUCHE); SURFINA1 = SURFIN; 'FINSI';
 405 :        'FIN' BSURI2;
 406 :      'FINSI';
 407 :   'FIN' BBCC0;
 408 : *
 409 :   'SI' ('EGA' COUCHE 0); NN = 1; 'SINON'; NN = 2; 'FINSI';
 410 :   'REPETER' BBCC1 NN;
 411 :      TAB1 = TABLE; I = 0;
 412 :     'SI' (&BBCC1 'EGA' 1);
 413 :        TAB1.1 = SURINI; TAB1.NP = SURFIN; MAIL3D = MAILVOL;
 414 :     'FINSI';
 415 :     'SI' (&BBCC1 'EGA' 2);
 416 :        TAB1.1 = SURINIT1; TAB1.NP = SURFINA1; MAIL3D = MBOUGVOL;
 417 :     'FINSI';
 418 :      TRANCH1 = MAIL3D 'ELEM' 'APPU' 'LARG' TAB1.1;
 419 :      TRANCH2 = TRANCH1; TRANCHET = TRANCH1;
 420 :     'SI' (('NBEL' FONDFISS) '>' 1);
 421 :       'REPETER' BOURECU (('NBEL' FONDFISS) - 1) ;
 422 :          I = I + 1 ;
 423 :          TRANCH2 = (MAIL3D 'ELEM' 'APPU' 'LARG' TRANCHET)
 424 :                    'DIFF' TRANCHET;
 425 :          TRANCHET = TRANCHET 'ET' TRANCH2 ;
 426 :          ENVEBI = 'DIFF' ('ENVE' TRANCH2) ('ENVE' TRANCH1);
 427 :         'SI' ILIN ;
 428 :            TAB1.(I + 1) = 'DIFF' ENVEBI (('ENVE' TRANCH2)
 429 :                           'ET' ('ENVE' TRANCH1)) ;
 430 :         'SINON' ;
 431 :            TAB1.((2 * I) + 1) = 'DIFF' ENVEBI (('ENVE' TRANCH2)
 432 :                                 'ET' ('ENVE' TRANCH1)) ;
 433 :            POINTRAN = TRANCH1 'CHANGE' 'POI1' ;
 434 :            POINBORD = (TAB1.((2 * I) - 1) 'ET'
 435 :                        TAB1.((2 * I) + 1)) 'CHANGE' 'POI1';
 436 :            TAB1.(2 * I) = POINTRAN 'DIFF' POINBORD;
 437 :         'FINSI' ;
 438 :          TRANCH1 = TRANCH2;
 439 :       'FIN' BOURECU ;
 440 :     'FINSI';
 441 :     'SI' (('NON' ILIN) 'ET' (NP '>' 2));
 442 :        POINTRAN = TRANCH2 'CHANGE' 'POI1';
 443 :        POINBORD = (TAB1.NP 'ET' TAB1.(NP - 2)) 'CHANGE' 'POI1';
 444 :        TAB1.(NP - 1) = POINTRAN 'DIFF' POINBORD ;
 445 :     'FINSI';
 446 :     'SI' (&BBCC1 'EGA' 1); TMAIL = TAB1; 'FINSI';
 447 :     'SI' (&BBCC1 'EGA' 2); TMBOUGER = TAB1; 'FINSI';
 448 :   'FIN' BBCC1;
 449 : *-------------------------------------------*
 450 : * Recuperation des points du front de fissure
 451 : *-------------------------------------------*
 452 :   FNUAGE = FONDFISS 'CHAN' 'POI1';
 453 :   I = 0;
 454 :   'REPETER' BPF NP;
 455 :      I = I + 1;
 456 :      TPFISS.I = (('CHAN' 'POI1' TMAIL.I) 'ET' FNUAGE) 'DIFF'
 457 :                 (('CHAN' 'POI1' TMAIL.I) 'DIFF' FNUAGE);
 458 :      TPFISS.I = 'POIN' 1 TPFISS.I;
 459 :     'SI' ('EGA' COUCHE 0); TMBOUGER.I = TPFISS.I; 'FINSI';
 460 :   'FIN' BPF;
 461 : *--------------------------------------*
 462 : * Transformation du tuyau en plaque dans
 463 : * le cas d une fissure non traversante
 464 : *--------------------------------------*
 465 : 'SI' ITUYAU;
 466 :    'DEPLACE' MAILLAGE 'COOR' 'CYLI' PAXEZ1 PAXEZ2 PAXEZ3;
 467 : 'FINSI';
 468 : *--------------------------------------------------*
 469 : * Recuperation de deux points de SURINI et de SURFIN
 470 : *--------------------------------------------------*
 471 :    PI1 = ('DIFF' ('CHAN' 'POI1' ('CONT' SURINI))
 472 :          ('MANU' 'POI1' PINIT)) 'POIN' 1;
 473 : *
 474 :    PF1 = ('DIFF' ('CHAN' 'POI1' ('CONT' SURFIN))
 475 :          ('MANU' 'POI1' PFINA)) 'POIN' 1;
 476 : *----------------------------------------------------------*
 477 : * Recuperation des vecteurs normaux
 478 : * La norme de ces vecteurs est du meme ordre de grandeur que
 479 : * la mesure d un segment du front. Pour qu une translation avec
 480 : * un de ces vecteurs corresponde a une avance infinitesimale,
 481 : * on divise chaque vecteur par 100 fois la mesure d un segment
 482 : *----------------------------------------------------------*
 483 :    VNPF = (POINSF 'MOIN' TPFISS.1) 'PVEC' (POINSF 'MOIN' TPFISS.2);
 484 :    VNPF = VNPF / ('NORM' VNPF) ;
 485 :    VECT11 = (TPFISS.2 'MOINS' TPFISS.1) 'PVEC' VNPF;
 486 :    PI3 = PINIT 'PLUS' VNPF; PF3 = PFINA 'PLUS' VNPF;
 487 :    VPLAN1 = (PI1 'MOINS' PINIT) 'PVEC' (PINIT 'MOINS' PI3);
 488 :   'SI' ('EGA' ('PSCA' VPLAN1 VECT11) 0. 1.E-10);
 489 :      TVECTEUR.1 = VECT11 ;
 490 :   'SINON';
 491 :      P11 = TPFISS.1 'PLUS' VECT11;
 492 :      P12 = P11 'SYME' 'PLAN' PI1 PINIT PI3 ;
 493 :      VECT12 = P12 'MOIN' TPFISS.1;
 494 :      TVECTEUR.1 = VECT11 'PLUS' VECT12 ;
 495 :   'FINSI';
 496 :    TVECTEUR.1 = TVECTEUR.1 / 100. ;
 497 :    VECT21 = (TPFISS.NP 'MOINS' TPFISS.(NP - 1)) 'PVEC' VNPF ;
 498 :    VPLAN2 = (PF1 'MOINS' PFINA) 'PVEC' (PFINA 'MOINS' PF3);
 499 :   'SI' ('EGA' ('PSCA' VPLAN2 VECT21) 0. 1.E-10);
 500 :      TVECTEUR.NP = VECT21 ;
 501 :   'SINON';
 502 :      P21 = TPFISS.NP 'PLUS' VECT21;
 503 :      P22 = P21 'SYME' 'PLAN' PF1 PFINA PF3 ;
 504 :      VECT22 = P22 'MOIN' TPFISS.NP;
 505 :      TVECTEUR.NP = VECT21 'PLUS' VECT22 ;
 506 :   'FINSI';
 507 :    TVECTEUR.NP = TVECTEUR.NP / 100. ;
 508 :    I = 1 ;
 509 :   'SI' (NP > 2) ;
 510 :     'REPETER' BVECT (NP - 2) ;
 511 :        I = I + 1 ;
 512 :        VTFF1 = TPFISS.I 'MOINS' TPFISS.(I - 1) ;
 513 :        VNFF1 = VTFF1 'PVECT' VNPF ;
 514 :        VTFF2 = TPFISS.(I + 1) 'MOINS' TPFISS.I ;
 515 :        VNFF2 = VTFF2 'PVECT' VNPF ;
 516 :        TVECTEUR.I = .5 * (VNFF1 'PLUS' VNFF2) ;
 517 :        TVECTEUR.I = TVECTEUR.I / 100. ;
 518 :     'FIN' BVECT ;
 519 :   'FINSI' ;
 520 : *--------------------------------------
 521 : * Vecteur et maillage de support global
 522 : * en 3D avec des éléments massifs
 523 : *--------------------------------------
 524 :    PNOR1 = PROG;
 525 :   'REPETER' BNOR1 NP;
 526 :      PNOR1 = PNOR1 'ET' ('PROG' ('NORM' TVECTEUR.&BNOR1));
 527 :   'FIN' BNOR1;
 528 :    MINOR1 = 'MINI' PNOR1;
 529 :   'REPETER' BVGLO NP;
 530 :      N1 = MINOR1 / ('EXTR' PNOR1 &BVGLO) ;
 531 :      X1 = N1 * ('COOR' 1 (TVECTEUR.&BVGLO)) ;
 532 :      Y1 = N1 * ('COOR' 2 (TVECTEUR.&BVGLO)) ;
 533 :      Z1 = N1 * ('COOR' 3 (TVECTEUR.&BVGLO)) ;
 534 :     'SI' (&BVGLO 'EGA' 1);
 535 :        TVECTEUR.(NP + 1) = 'MANU' 'CHPO' (TMAIL.&BVGLO)
 536 :                          3 MU1 X1 MU2 Y1 MU3 Z1 'NATURE' 'DIFFUS';
 537 :     'SINON';
 538 :        TVECTEUR.(NP + 1) = TVECTEUR.(NP + 1) 'ET' ('MANU' 'CHPO'
 539 :           (TMAIL.&BVGLO) 3 MU1 X1 MU2 Y1 MU3 Z1 'NATURE' 'DIFFUS');
 540 :     'FINSI';
 541 :   'FIN' BVGLO;
 542 : *
 543 :    TPFISS.(NP + 1) = SUPTAB.'FRONT_FISSURE';
 544 :    TMBOUGER.(NP + 1) = SUPTAB.'FRONT_FISSURE';
 545 :   'SI' (COUCHE '>' 0);
 546 :     'REPETER' MBOUG COUCHE ;
 547 :        TMBOUGER.(NP + 1) = 'ELEM' MAILLAGE 'APPUYE'
 548 :                            'LARG' TMBOUGER.(NP + 1) ;
 549 :     'FIN' MBOUG ;
 550 :   'FINSI';
 551 :    TMAIL.(NP + 1) = 'ELEM' MAILLAGE 'APPU'
 552 :                     'LARG' TMBOUGER.(NP + 1) ;
 553 : *-----------------------------------------*
 554 : * Transformation d'une plaque en tuyau
 555 : * dans le cas d une fissure non traversante
 556 : *-----------------------------------------*
 557 : 'SI' ITUYAU;
 558 :     'DEPLACE' MAILLAGE 'COOR' 'CART';
 559 : 'FINSI';
 560 : ********
 561 : 'FINSI';
 562 : ********
 563 : *********************************
 564 : 'SI' (('EGA' &DIME 2) 'OU' ICOQU);
 565 : *********************************
 566 : *----------------------------------------------*
 567 : *-- On determine la direction de propagation --*
 568 : *-- et le support geometrique du champ THETA --*
 569 : *----------------------------------------------*
 570 :    PFISS = SUPTAB.'FRONT_FISSURE';
 571 :    FISS1 = FISSURE 'ELEM' 'APPU' 'LARG' PFISS;
 572 :    FISS1 = 'ORDO' FISS1;
 573 :    P1 = 'POINT' FISS1 'INIT'; P2 = 'POINT' FISS1 'FINA';
 574 : *MC 06/07/98 : test sur le numéro du noeud plutôt que
 575 : *              sur la proximité de ceux-ci
 576 :   'SI' (('NEG' ('NOEU' P1) ('NOEU' PFISS)) 'ET'
 577 :         ('NEG' ('NOEU' P2) ('NOEU' PFISS)));
 578 :      XMULT = 1.;
 579 :      MESU1 = 'MESU' ('DROI' 1 PFISS P1);
 580 :      MESU2 = 'MESU' ('DROI' 1 PFISS P2);
 581 :      XX1 = (('COOR' 1 PFISS) - ('COOR' 1 P1)) / MESU1;
 582 :      XX2 = (('COOR' 1 PFISS) - ('COOR' 1 P2)) / MESU2;
 583 :      YY1 = (('COOR' 2 PFISS) - ('COOR' 2 P1)) / MESU1;
 584 :      YY2 = (('COOR' 2 PFISS) - ('COOR' 2 P2)) / MESU2;
 585 :      XX1 = (XX1 + XX2) / 2.; YY1 = (YY1 + YY2) / 2.;
 586 :     'SI' ('EGA' &DIME 3);
 587 :        ZZ1 = (('COOR' 3 PFISS) - ('COOR' 3 P1)) / MESU1;
 588 :        ZZ2 = (('COOR' 3 PFISS) - ('COOR' 3 P2)) / MESU2;
 589 :        ZZ1 = (ZZ1 + ZZ2) / 2.;
 590 :     'FINSI';
 591 :   'SINON';
 592 :      XMULT = 2.;
 593 : *MC 06/07/98 : test sur le numéro du noeud plutôt que
 594 : *              sur la proximité de ceux-ci
 595 :     'SI' ('EGA' ('NOEU' P2) ('NOEU' PFISS)); P2 = P1; 'FINSI';
 596 :      MESU1 = 'MESU' ('DROI' 1 PFISS P2);
 597 :      XX1 = (('COOR' 1 PFISS) - ('COOR' 1 P2)) / MESU1;
 598 :      YY1 = (('COOR' 2 PFISS) - ('COOR' 2 P2)) / MESU1;
 599 :     'SI' ('EGA' &DIME 3);
 600 :        ZZ1 = (('COOR' 3 PFISS) - ('COOR' 3 P2)) / MESU1;
 601 :     'FINSI';
 602 :   'FINSI';
 603 :   'SI' ('EGA' &DIME 2); VECTEUR = (XX1 YY1); 'FINSI';
 604 :   'SI' ('EGA' &DIME 3); VECTEUR = (XX1 YY1 ZZ1); 'FINSI';
 605 :    NP = 0 ;
 606 :    MBOUGER = SUPTAB.'FRONT_FISSURE';
 607 :   'SI' (COUCHE '>' 0);
 608 :     'REPETER' MBOUG COUCHE ;
 609 :        MBOUGER = 'ELEM' MAILLAGE 'APPUYE' 'LARG' MBOUGER ;
 610 :     'FIN' MBOUG ;
 611 :   'FINSI';
 612 :    MAIL = 'ELEM' MAILLAGE 'APPU' 'LARG' MBOUGER ;
 613 : *******
 614 : 'FINSI' ;
 615 : *******
 616 : *--------------------------------------------*
 617 : * Configuration initiale. Il ne faut pas la -*
 618 : *  placer avec la determination de VECTEUR --*
 619 : *--------------------------------------------*
 620 : CONF0 = 'FORM';
 621 : *-----------------------------------------------*
 622 : * Boucle sur les noeuds du front de la fissure -*
 623 : *-----------------------------------------------*
 624 : N = 0 ;
 625 : 'REPETER' PROTETA (NP + 1);
 626 : N = N + 1 ;
 627 : 'SI' (('EGA' &DIME 3) 'ET' ('NON' ICOQU));
 628 :    MAIL = TMAIL.N ; PFISS = TPFISS.N;
 629 :    MBOUGER = TMBOUGER.N; VECTEUR = TVECTEUR.N;
 630 : 'FINSI';
 631 : *-------------------------------------------------*
 632 : *----- Valeur initiale pour le vecteur THETA -----*
 633 : *-------------------------------------------------*
 634 : TETA = 'MANU' 'CHPO' MAIL 2 MU1 0. MU2 0. 'NATURE' 'DIFFUS' ;
 635 : 'SI' ((&DIME 'EGA' 3)) ;
 636 :    TETA = TETA + ('MANU' 'CHPO' MAIL 1 MU3 0. 'NATURE' 'DIFFUS');
 637 : 'FINSI' ;
 638 : *-------------------------------------------------------------*
 639 : * Donnees pour le calcul de l accroissement d aire de fissure *
 640 : *-------------------------------------------------------------*
 641 : XAIRE = 1.;
 642 : 'SI' ICOQU; XAIRE = SUPTAB.'EPAISSEUR'; 'FINSI';
 643 : 'SI' ('EGA' MOTAX &MODE);
 644 :    XAIRE = 2. * VALPI * ('COOR' 1 PFISS);
 645 : 'FINSI';
 646 : * Si 3D, on recupere la partie du plan de fissure proche
 647 : * du point avance pour calculer l accroissement d aire
 648 : 'SI' (('EGA' &DIME 3) 'ET' ('NON' ICOQU));
 649 :    PLFISS = 'ELEM' FISSURE APPUY LARG MBOUGER;
 650 :    MODFIS = 'MODL' PLFISS 'MECANIQUE' 'ELASTIQUE';
 651 :    CHFIS1 = 'MANU' 'CHPO' FISSURE 1 'SCAL' 1.;
 652 :    CHFIS1 = 'CHAN' 'CHAM' CHFIS1 MODFIS 'STRESSES';
 653 :    XAIREI = 'INTG' CHFIS1 MODFIS;
 654 : * L aire doit correspondre a une seule levre de fissure
 655 : * Si les deux levres sont modelisees, on divise l aire par 2
 656 :   'SI' ICOS1; XAIREI = XAIREI / 2.; 'FINSI';
 657 : 'FINSI';
 658 : *--------------------------------------------------------*
 659 : *---- THETA généré par la différence de coordonnées -----*
 660 : *--------------------------------------------------------*
 661 : 'SI' (&DIME 'EGA' 2); XX0 YY0 = 'COOR' MAIL; 'FINSI';
 662 : 'SI' (&DIME 'EGA' 3); XX0 YY0 ZZ0 = 'COOR' MAIL; 'FINSI';
 663 : *- Translation de la fissure avec une vecteur normalisée -*
 664 : 'SI' ITRAN ;
 665 :   'SI' ITUYAU;
 666 :      'DEPLACE' MAILLAGE 'COOR' 'CYLI' PAXEZ1 PAXEZ2 PAXEZ3;
 667 :   'FINSI';
 668 :   'DEPLACE' 'PLUS' MBOUGER VECTEUR;
 669 :   'SI' ITUYAU;
 670 :     'DEPLACE' MAILLAGE 'COOR' 'CART' ;
 671 :   'FINSI';
 672 :   'SI' (&DIME 'EGA' 2); XX1 YY1 = 'COOR' MAIL; 'FINSI';
 673 :   'SI' (&DIME 'EGA' 3);
 674 :      XX1 YY1 ZZ1 = 'COOR' MAIL;
 675 :     'SI' ('NON' ICOQU);
 676 :        XAIREF = 'INTG' CHFIS1 MODFIS;
 677 :       'SI' ICOS1; XAIREF = XAIREF / 2.; 'FINSI';
 678 :     'FINSI';
 679 :   'FINSI';
 680 :   'SI' ITUYAU;
 681 :      'DEPLACE' MAILLAGE 'COOR' 'CYLI' PAXEZ1 PAXEZ2 PAXEZ3;
 682 :   'FINSI';
 683 :   'DEPLACE' 'MOIN' MBOUGER VECTEUR ;
 684 :   'SI' ITUYAU;
 685 :      'DEPLACE' MAILLAGE 'COOR' 'CART'  ;
 686 :   'FINSI';
 687 :    TETAT = ('NOMC' MU1 (XX1 - XX0)) +
 688 :            ('NOMC' MU2 (YY1 - YY0));
 689 :   'SI' (&DIME 'EGA' 3);
 690 :      TETAT = TETAT + ('NOMC' MU3 (ZZ1 - ZZ0));
 691 :     'SI' ('NON' ICOQU); XAIRE = XAIREF - XAIREI; 'FINSI';
 692 :   'FINSI' ;
 693 :    TETA = (TETAT * XMULT / XAIRE) + TETA ;
 694 : 'FINSI' ;
 695 : *----- Rotation de la fissure selon le point ou l'axe donné
 696 : * Pour que la rotation effectuee corresponde a une avance
 697 : * infinitesimale, on choisit un angle de rotation de 0.01 degre
 698 : 'SI' IROTA ;
 699 :    ANG1 = 1.D-2 ;
 700 :   'SI' ('EGA' &DIME 2);
 701 :     'DEPLACE' 'TOUR' MBOUGER ANG1 PCENTRE ;
 702 :      XX1 YY1 = 'COOR' MAIL ;
 703 :     'DEPLACE' 'TOUR' MBOUGER (0. - ANG1) PCENTRE ;
 704 :      TETAR = ('NOMC' MU1 (XX1 - XX0)) +
 705 :              ('NOMC' MU2 (YY1 - YY0)) ;
 706 :      X1 = 'EXTR' TETAR MU1 PFISS ;
 707 :      Y1 = 'EXTR' TETAR MU2 PFISS ;
 708 :      NOR1 = ('NORM' (X1 Y1)) + 1.D-20 ;
 709 :      TETAR = TETAR / NOR1 ;
 710 :   'FINSI';
 711 :   'SI' ('EGA' &DIME 3);
 712 :     'SI' ('NON' ICOUDE);
 713 :       'DEPLACE' 'TOUR' MBOUGER ANG1 POINT_1 POINT_2 ;
 714 :        XX1 YY1 ZZ1 = 'COOR' MAIL ;
 715 :       'SI' ('NON' ICOQU);
 716 :          XAIREF = 'INTG' CHFIS1 MODFIS;
 717 :         'SI' ICOS1; XAIREF = XAIREF / 2.; 'FINSI';
 718 :       'FINSI';
 719 :       'DEPLACE' 'TOUR' MBOUGER ANG1 POINT_2 POINT_1 ;
 720 :     'SINON';
 721 :       'DEPLACE' OPER1 MAILLAGE SUPTAB.'CHPOINT_TRANSFORMATION' ;
 722 :       'DEPLACE' 'TOUR' MBOUGER ANG1 POINT_1 POINT_2 ;
 723 :       'DEPLACE' OPER1 MAILLAGE (-1.*(SUPTAB.'CHPOINT_TRANSFORMATION'));
 724 :        XX1 YY1 ZZ1 = 'COOR' MAIL ;
 725 :       'SI' ('NON' ICOQU);
 726 :          XAIREF = 'INTG' CHFIS1 MODFIS;
 727 :         'SI' ICOS1; XAIREF = XAIREF / 2.; 'FINSI';
 728 :       'FINSI';
 729 :       'DEPLACE' OPER1 MAILLAGE (SUPTAB.'CHPOINT_TRANSFORMATION');
 730 :       'DEPLACE' 'TOUR' MBOUGER ANG1 POINT_2 POINT_1 ;
 731 :       'DEPLACE' OPER1 MAILLAGE (-1.*(SUPTAB.'CHPOINT_TRANSFORMATION'));
 732 :     'FINSI';
 733 :      TETAR = ('NOMC' MU1 (XX1 - XX0)) +
 734 :              ('NOMC' MU2 (YY1 - YY0)) +
 735 :              ('NOMC' MU3 (ZZ1 - ZZ0)) ;
 736 :     'SI' ('NON' ICOQU);
 737 :        XAIRE = XAIREF - XAIREI;
 738 :     'SINON';
 739 :        X1 = 'EXTR' TETAR MU1 PFISS ;
 740 :        Y1 = 'EXTR' TETAR MU2 PFISS ;
 741 :        Z1 = 'EXTR' TETAR MU3 PFISS ;
 742 :        NOR1 = ('NORM' (X1 Y1 Z1)) + 1.D-20 ;
 743 :        TETAR = TETAR / NOR1 ;
 744 :     'FINSI';
 745 :   'FINSI' ;
 746 :    TETA = (TETAR * XMULT / XAIRE) + TETA ;
 747 : 'FINSI';
 748 : *--------------------------------------------*
 749 : * Objet util a garder dans la table TABUTIL -*
 750 : *--------------------------------------------*
 751 : 'SI' (('EGA' &DIME 2) 'OU' ICOQU);
 752 :    TABUTIL.'DIRECTION' = VECTEUR;
 753 : 'FINSI';
 754 : 'SI' (('EGA' &DIME 3) 'ET' ('NON' ICOQU));
 755 :   'SI' (N '<EG' NP);
 756 :      TTETA.(TPFISS.N) = TETA ;
 757 :      TABUTIL.'DIRECTION'.(TPFISS.N) = VECTEUR;
 758 :   'SINON';
 759 :      TTETA.'GLOBAL' = TETA ;
 760 :      TABUTIL.'DIRECTION'.'GLOBAL' = VECTEUR;
 761 :   'FINSI';
 762 : 'FINSI';
 763 : 'FIN' PROTETA;
 764 : *------------------------------------------------------*
 765 : * Fin de boucle sur les noeuds de front de la fissure -*
 766 : *------------------------------------------------------*
 767 : 'SI' (('EGA' &DIME 3) 'ET' ('NON' ICOQU));
 768 :    TETA = TTETA;
 769 : 'FINSI';
 770 : *-------------------------------------------------------------*
 771 : * La configuration peut etre modifiee par DEPL. La directive -*
 772 : * suivante nous permet de retrouver configuration initiale ---*
 773 : *-------------------------------------------------------------*
 774 : 'FORM' CONF0;
 775 : *-------------------------------*
 776 : * Fin de la procedure CH_THETA -*
 777 : *-------------------------------*
 778 : * rendre compatible les chpoint
 779 : *mess ' type de teta '  ( 'TYPE' TETA);
 780 : 'SI' ( 'EXIS' SUPTAB  'MODELE'); MOO=SUPTAB . 'MODELE';
 781 : 'SINON';
 782 : MOO=SUPTAB .'SOLUTION_PASAPAS' .'MODELE';
 783 : 'FINSI';
 784 : 'SI' ( 'EGA' ('TYPE' TETA) 'CHPOINT  ');
 785 : teta='CFND' teta MOO;
 786 : 'SINON';
 787 :   'REPE' BOO (NP - 1);
 788 :    IIP=TPFISS.&boo;
 789 :    TETA.IIP= 'CFND' TETA.IIP  MOO;
 790 :    'FIN' BOO;
 791 :    TETA.'GLOBAL'= 'CFND' TETA.'GLOBAL'  MOO;
 792 : 'FINSI';
 793 : 
 794 : *------------------------------------------------------*
 795 : * Dans TABUTIL on ajoute les chpoint de DIRECTION     -*
 796 : *------------------------------------------------------*
 797 : 
 798 : * VECTEUR 1
 799 : si (EGA (TYPE TETA) 'CHPOINT  ');
 800 :   VECTEUR1 = TETA ;
 801 : sino;
 802 :   VECTEUR1 = TETA . 'GLOBAL';
 803 : fins;
 804 : VECTEUR1= REDU VECTEUR1 (SUPTAB.'FRONT_FISSURE');
 805 : * VECTEUR1 = VECTEUR1 / (NORM VECTEUR1);
 806 :   NVECT1 = PSCA VECTEUR1 VECTEUR1
 807 :           (MOTS 'UX' 'UY' 'UZ') (MOTS 'UX' 'UY' 'UZ');
 808 :   VECTEUR1 = VECTEUR1 / (NVECT1**0.5);
 809 : TABUTIL . 'DIRECTION1' = VECTEUR1;
 810 : 
 811 : si(non ICOQU);
 812 : 
 813 : * VECTEUR 2
 814 :   F1 = PRES 'MASS' MOO SUPTAB.'LEVRE_SUPERIEURE' 1.;
 815 :   VECTEUR2 = REDU F1 (SUPTAB.'FRONT_FISSURE');
 816 :   VECTEUR2 = EXCO VECTEUR2 (MOTS 'FX' 'FY' 'FZ')
 817 :                            (MOTS 'UX' 'UY' 'UZ') 'NOID';
 818 : *  VECTEUR2 = VECTEUR2 / (NORM VECTEUR2);
 819 :   NVECT2 = PSCA VECTEUR2 VECTEUR2
 820 :           (MOTS 'UX' 'UY' 'UZ') (MOTS 'UX' 'UY' 'UZ');
 821 :   VECTEUR2 = VECTEUR2 / (NVECT2**0.5);
 822 :   TABUTIL . 'DIRECTION2' = VECTEUR2;
 823 : 
 824 : * VECTEUR3 = VECTEUR1 pvec VECTEUR2
 825 : *   VECTEUR3 = ( ((exco VECTEUR1 'UY' 'UX') * (exco VECTEUR2 'UZ' 'UX'))
 826 : *           - ((exco VECTEUR1 'UZ' 'UX') * (exco VECTEUR2 'UY' 'UX')) )
 827 : *        et ( ((exco VECTEUR1 'UZ' 'UY') * (exco VECTEUR2 'UX' 'UY'))
 828 : *           - ((exco VECTEUR1 'UX' 'UY') * (exco VECTEUR2 'UZ' 'UY')) )
 829 : *        et ( ((exco VECTEUR1 'UX' 'UZ') * (exco VECTEUR2 'UY' 'UZ'))
 830 : *           - ((exco VECTEUR1 'UY' 'UZ') * (exco VECTEUR2 'UX' 'UZ')) );
 831 :   VECTEUR3 = ( * VECTEUR1 VECTEUR2
 832 :    (mots 'UY' 'UZ' 'UX') (mots 'UZ' 'UX' 'UY') (mots 'UX' 'UY' 'UZ') )
 833 :            - ( * VECTEUR1 VECTEUR2
 834 :    (mots 'UZ' 'UX' 'UY') (mots 'UY' 'UZ' 'UX') (mots 'UX' 'UY' 'UZ') );
 835 :   TABUTIL . 'DIRECTION3' = VECTEUR3;
 836 : 
 837 : fins;
 838 : 
 839 : 'FINPROC' TETA TABUTIL;
 840 : 
 841 : 
 842 : 
 843 : 
 844 :  

© Cast3M 2003 - All rights reserved.
Disclaimer