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