1 #@ MODIF macr_cara_poutre_ops Macro DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
9 # (AT YOUR OPTION) ANY LATER VERSION.
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
18 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
20 # RESPONSABLE JMBHH01 J.M.PROIX
22 def macr_cara_poutre_ops(self,UNITE_MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
23 GROUP_MA,ORIG_INER,**args):
25 Ecriture de la macro MACR_CARA_POUTRE
30 # On importe les definitions des commandes a utiliser dans la macro
31 # Le nom de la variable doit etre obligatoirement le nom de la commande
32 LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
33 DEFI_GROUP =self.get_cmd('DEFI_GROUP')
34 CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
35 AFFE_MODELE =self.get_cmd('AFFE_MODELE')
36 DEFI_MATERIAU =self.get_cmd('DEFI_MATERIAU')
37 AFFE_MATERIAU =self.get_cmd('AFFE_MATERIAU')
38 DEFI_FONCTION =self.get_cmd('DEFI_FONCTION')
39 DEFI_CONSTANTE =self.get_cmd('DEFI_CONSTANTE')
40 AFFE_CHAR_THER =self.get_cmd('AFFE_CHAR_THER')
41 AFFE_CHAR_THER_F=self.get_cmd('AFFE_CHAR_THER_F')
42 THER_LINEAIRE =self.get_cmd('THER_LINEAIRE')
43 CALC_VECT_ELEM =self.get_cmd('CALC_VECT_ELEM')
44 CALC_MATR_ELEM =self.get_cmd('CALC_MATR_ELEM')
45 NUME_DDL =self.get_cmd('NUME_DDL')
46 ASSE_VECTEUR =self.get_cmd('ASSE_VECTEUR')
47 POST_ELEM =self.get_cmd('POST_ELEM')
48 CALC_ELEM =self.get_cmd('CALC_ELEM')
49 INTE_MAIL_2D =self.get_cmd('INTE_MAIL_2D')
50 POST_RELEVE_T =self.get_cmd('POST_RELEVE_T')
51 IMPR_TABLE =self.get_cmd('IMPR_TABLE')
52 IMPR_CO =self.get_cmd('IMPR_CO')
53 # La macro compte pour 1 dans la numerotation des commandes
57 # Le concept sortant (de type tabl_cara_geom) est nommé 'nomres' dans
58 # le contexte de la macro
60 self.DeclareOut('nomres',self.sd)
62 # if GROUP_MA_BORD and GROUP_MA:
65 # self.cr.fatal("<F> <MACR_CARA_POUTRE> Avec GROUP_MA, il faut obligatoirement preciser LIAISON, LONGUEUR ET MATERIAU")
68 __nomlma=LIRE_MAILLAGE(UNITE=UNITE_MAILLAGE,)
70 __nomamo=AFFE_MODELE(MAILLAGE=__nomlma,
72 PHENOMENE='MECANIQUE',
73 MODELISATION='D_PLAN',), )
75 __nomdma=DEFI_MATERIAU(ELAS=_F(E=1.0,NU=0.,RHO=1.0),)
78 __nomama=AFFE_MATERIAU(MAILLAGE=__nomlma,
82 # --- CALCUL DES CARACTERISTIQUES GEOMETRIQUES DE LA SECTION :
83 # ------------------------------------------------------
86 if GROUP_MA : motsimps['GROUP_MA'] = GROUP_MA
87 if SYME_X : motsimps['SYME_X'] = SYME_X
88 if SYME_Y : motsimps['SYME_Y'] = SYME_Y
89 motsimps['ORIG_INER'] = ORIG_INER
90 mfact=_F(TOUT='OUI',**motsimps)
91 nomres=POST_ELEM(MODELE=__nomamo,
95 # nb : si GROUP_MA n existe pas : le mot clé est ignoré
98 # ==================================================================
99 # --- = CALCUL DE LA CONSTANTE DE TORSION SUR TOUT LE MAILLAGE =
100 # --- = OU DU CENTRE DE TORSION/CISAILLEMENT =
101 # --- = DES COEFFICIENTS DE CISAILLEMENT =
102 # --- = ET DE L INERTIE DE GAUCHISSEMENT =
103 # --- = DU RAYON DE TORSION SUR TOUT LE MAILLAGE
104 # --- = ON CREE UN MODELE PLAN 2D THERMIQUE REPRESENTANT LA SECTION =
105 # --- = DE LA POUTRE CAR ON A A RESOUDRE DES E.D.P. AVEC DES LAPLACIENS=
106 # ==================================================================
108 if GROUP_MA_BORD and not GROUP_MA:
109 # --- TRANSFORMATION DES GROUP_MA EN GROUP_NO SUR-LESQUELS
110 # --- ON POURRA APPLIQUER DES CONDITIONS DE TEMPERATURE IMPOSEE :
111 # ---------------------------------------------------------
113 if type(GROUP_MA_BORD)==types.StringType:
114 motscles['CREA_GROUP_NO']=_F(GROUP_MA=GROUP_MA_BORD,)
116 motscles['CREA_GROUP_NO']=[]
117 for grma in GROUP_MA_BORD:
118 motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=grma,))
119 __nomlma=DEFI_GROUP(reuse=__nomlma,
125 # --- CREATION D UN MAILLAGE IDENTIQUE AU PREMIER A CECI PRES
126 # --- QUE LES COORDONNEES SONT EXPRIMEES DANS LE REPERE PRINCIPAL
127 # --- D INERTIE DONT L ORIGINE EST LE CENTRE DE GRAVITE DE LA SECTION :
128 # ---------------------------------------------------------------
130 __nomapi=CREA_MAILLAGE(MAILLAGE=__nomlma,
131 REPERE=_F(TABLE=nomres,
134 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
135 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
136 # ------------------------------------------------------
138 __nomoth=AFFE_MODELE(MAILLAGE=__nomapi,
140 PHENOMENE='THERMIQUE',
141 MODELISATION='PLAN',), )
143 # --- POUR LA CONSTRUCTION DU LAPLACIEN, ON DEFINIT UN
144 # --- PSEUDO-MATERIAU DONT LES CARACTERISTIQUES THERMIQUES SONT :
145 # --- LAMBDA = 1, RHO*CP = 0 :
146 # ----------------------
148 __nomath=DEFI_MATERIAU(THER=_F(LAMBDA=1.0,RHO_CP=0.,),)
150 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
151 # ---------------------------------------------------------
153 __chmath=AFFE_MATERIAU(MAILLAGE=__nomapi,
158 # ------------------------------------------------------------
159 # --- - CALCUL DE LA CONSTANTE DE TORSION PAR RESOLUTION -
160 # --- - D UN LAPLACIEN AVEC UN TERME SOURCE EGAL A -2 -
161 # --- - L INCONNUE ETANT NULLE SUR LE CONTOUR DE LA SECTION : -
162 # --- - LAPLACIEN(PHI) = -2 DANS LA SECTION -
163 # --- - PHI = 0 SUR LE CONTOUR : -
164 # ------------------------------------------------------------
166 # --- ON IMPOSE LA VALEUR 0 A L INCONNUE SCALAIRE SUR LE CONTOUR
168 # --- ET ON A UN TERME SOURCE EGAL A -2 DANS TOUTE LA SECTION :
169 # -------------------------------------------------------
172 if args.has_key('GROUP_MA_INTE'):
173 if args['GROUP_MA_INTE'] != None :
174 motscles['LIAISON_UNIF']=_F(GROUP_MA=args['GROUP_MA_INTE'],DDL='TEMP'),
175 __chart1=AFFE_CHAR_THER(MODELE=__nomoth,
176 TEMP_IMPO =_F(GROUP_NO=GROUP_MA_BORD,
178 SOURCE =_F(TOUT='OUI',
182 # --- POUR CHAQUE TROU DE LA SECTION :
183 # --- .ON A IMPOSE QUE PHI EST CONSTANT SUR LE CONTOUR INTERIEUR
184 # --- EN FAISANT LE LIAISON_UNIF DANS LE AFFE_CHAR_THER PRECEDENT
185 # --- .ON IMPOSE EN PLUS D(PHI)/DN = 2*AIRE(TROU)/L(TROU)
186 # --- OU D/DN DESIGNE LA DERIVEE PAR RAPPORT A LA
187 # --- NORMALE ET L DESIGNE LA LONGUEUR DU BORD DU TROU :
188 # -------------------------------------------------------
190 if args.has_key('GROUP_MA_INTE'):
191 lgmaint=args['GROUP_MA_INTE']
193 __tbaire=POST_ELEM(MODELE=__nomoth,
194 AIRE_INTERNE=_F(GROUP_MA_BORD=args['GROUP_MA_INTE'],), )
197 motscles['FLUX_REP']=[]
199 if type(lgmaint)==types.StringType:
200 motscles['FLUX_REP']=_F(GROUP_MA=args['GROUP_MA_INTE'],CARA_TORSION=__tbaire)
202 motscles['FLUX_REP']=[]
204 motscles['FLUX_REP'].append(_F(GROUP_MA=grma,CARA_TORSION=__tbaire),)
205 __chart2=AFFE_CHAR_THER(MODELE=__nomoth,**motscles)
207 # --- RESOLUTION DE LAPLACIEN(PHI) = -2
208 # --- AVEC PHI = 0 SUR LE CONTOUR :
209 # ----------------------------------------
212 motscles['EXCIT']=[_F(CHARGE=__chart1,),]
213 if args.has_key('GROUP_MA_INTE'):
215 motscles['EXCIT'].append(_F(CHARGE=__chart2,))
216 __tempe1=THER_LINEAIRE(MODELE=__nomoth,
218 SOLVEUR=_F(STOP_SINGULIER='NON',),
222 # ----------------------------------------------
223 # --- - CALCUL DU CENTRE DE TORSION/CISAILLEMENT -
224 # --- - ET DES COEFFICIENTS DE CISAILLEMENT : -
225 # ----------------------------------------------
227 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
228 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
229 # --- PAR UNE FONCTION EGALE A Y :
230 # --------------------------
232 __fnsec1=DEFI_FONCTION(NOM_PARA='X',
233 VALE=(0.,0.,10.,10.),
234 PROL_DROITE='LINEAIRE',
235 PROL_GAUCHE='LINEAIRE',
238 __fnsec0=DEFI_CONSTANTE(VALE=0.,)
240 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
241 # --- DE LAPLACE EST PRIS EGAL A Y DANS TOUTE LA SECTION :
242 # --------------------------------------------------
246 if args.has_key('NOEUD'):
247 motscles['TEMP_IMPO']=(_F(NOEUD=args['NOEUD'],TEMP=__fnsec0))
248 __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
249 SOURCE=_F(TOUT='OUI',
253 # --- RESOLUTION DE LAPLACIEN(PHI) = -Y
254 # --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
255 # ------------------------------------------------
257 __tempe2=THER_LINEAIRE(MODELE=__nomoth,
259 EXCIT=_F(CHARGE=__chart2,),
260 SOLVEUR=_F(STOP_SINGULIER='NON',),
263 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
264 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
265 # --- PAR UNE FONCTION EGALE A Z :
266 # --------------------------
268 __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
269 VALE=(0.,0.,10.,10.),
270 PROL_DROITE='LINEAIRE',
271 PROL_GAUCHE='LINEAIRE',
274 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
275 # --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
276 # --------------------------------------------------
279 if args.has_key('NOEUD'):
280 motscles['TEMP_IMPO']=_F(NOEUD=args['NOEUD'],TEMP=__fnsec0)
281 __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
282 SOURCE=_F(TOUT='OUI',
286 # --- RESOLUTION DE LAPLACIEN(PHI) = -Z
287 # --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
288 # ------------------------------------------------
290 __tempe3=THER_LINEAIRE(MODELE=__nomoth,
292 EXCIT=_F(CHARGE=__chart3,),
293 SOLVEUR=_F(STOP_SINGULIER='NON',),
296 # --- CALCUL DU RAYON DE TORSION :
297 # --------------------------
299 # CALCUL DU RAYON DE TORSION EXTERNE : rtext
301 __tempe1=CALC_ELEM(reuse=__tempe1,
306 OPTION='FLUX_ELNO_TEMP',
309 __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
310 DEFI_CHEMIN=_F(GROUP_MA=GROUP_MA_BORD),
313 __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
316 NOM_CHAM='FLUX_ELNO_TEMP',
318 NOM_CMP=('FLUX','FLUY'),
319 OPERATION='MOYENNE'))
321 __m1=abs(__flun['TRAC_NOR',3])
322 __m2=abs(__flun['TRAC_NOR',4])
323 __rtext=max(__m1,__m2)
325 # CALCUL DU RAYON DE TORSION : rt
326 # rt = max ( rtext , 2*AIRE(TROU)/L(TROU) )
328 if args.has_key('GROUP_MA_INTE'):
329 if args['GROUP_MA_INTE'] != None :
330 if type(args['GROUP_MA_INTE'])==types.StringType :
331 l_group_ma_inte=[args['GROUP_MA_INTE'],]
333 l_group_ma_inte=args['GROUP_MA_INTE']
334 for i in range(0,len(l_group_ma_inte)):
335 __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
336 DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_inte[i]),
338 __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
341 NOM_CHAM='FLUX_ELNO_TEMP',
343 NOM_CMP=('FLUX','FLUY'),
344 OPERATION='MOYENNE'))
345 __m1=(abs(__flun['TRAC_NOR',3])+abs(__flun['TRAC_NOR',4]))/2.
351 # --- CALCUL DE LA CONSTANTE DE TORSION :
352 # ---------------------------------
355 if args.has_key('GROUP_MA_INTE'):
356 lgmaint=args['GROUP_MA_INTE']
358 motscles['CARA_POUTRE']=_F(CARA_GEOM=nomres,
362 OPTION='CARA_TORSION',
363 GROUP_MA_INTE=args['GROUP_MA_INTE'],)
365 motscles['CARA_POUTRE']=_F(CARA_GEOM=nomres,
369 OPTION='CARA_TORSION', )
370 nomres=POST_ELEM(reuse=nomres,
376 # --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
377 # --- CENTRE DE CISAILLEMENT/TORSION :
378 # ------------------------------
380 nomres=POST_ELEM(reuse=nomres,
383 CARA_POUTRE=_F(CARA_GEOM=nomres,
387 OPTION='CARA_CISAILLEMENT',), )
391 # ------------------------------------------------------------
392 # --- - CALCUL DE L INERTIE DE GAUCHISSEMENT PAR RESOLUTION DE -
393 # --- - LAPLACIEN(OMEGA) = 0 DANS LA SECTION -
394 # --- - AVEC D(OMEGA)/D(N) = Z*NY-Y*NZ SUR LE -
395 # --- - CONTOUR DE LA SECTION -
396 # --- - NY ET NZ SONT LES COMPOSANTES DU VECTEUR N NORMAL -
397 # --- - A CE CONTOUR -
398 # --- - ET SOMME_S(OMEGA.DS) = 0 -
399 # --- - OMEGA EST LA FONCTION DE GAUCHISSEMENT -
400 # --- - L INERTIE DE GAUCHISSEMENT EST SOMME_S(OMEGA**2.DS) -
401 # ------------------------------------------------------------
403 # --- CREATION D UN MAILLAGE DONT LES COORDONNEES SONT EXPRIMEES
404 # --- DANS LE REPERE PRINCIPAL D INERTIE MAIS AVEC COMME ORIGINE
405 # --- LE CENTRE DE TORSION DE LA SECTION, ON VA DONC UTILISER
406 # --- LE MAILLAGE DE NOM NOMAPI DONT LES COORDONNEES SONT
407 # --- EXPRIMEES DANS LE REPERE PRINCIPAL D'INERTIE, L'ORIGINE
408 # --- ETANT LE CENTRE DE GRAVITE DE LA SECTION (QUI EST DONC
412 __nomapt=CREA_MAILLAGE(MAILLAGE=__nomapi,
413 REPERE=_F(TABLE=nomres,
414 NOM_ORIG='TORSION',) )
416 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
417 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
418 # ------------------------------------------------------
420 __nomot2=AFFE_MODELE(MAILLAGE=__nomapt,
422 PHENOMENE='THERMIQUE',
423 MODELISATION='PLAN', ) )
425 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
426 # ---------------------------------------------------------
428 __chmat2=AFFE_MATERIAU(MAILLAGE=__nomapt,
432 # --- POUR LE CALCUL DE L INERTIE DE GAUCHISSEMENT, ON VA DEFINIR
433 # --- LA COMPOSANTE SELON Y DU FLUX A IMPOSER SUR LE CONTOUR
434 # --- PAR UNE FONCTION EGALE A -X :
435 # ---------------------------
437 __fnsec3=DEFI_FONCTION(NOM_PARA='X',
438 VALE=(0.,0.,10.,-10.),
439 PROL_DROITE='LINEAIRE',
440 PROL_GAUCHE='LINEAIRE',
443 # --- POUR LE CALCUL DE L INERTIE DE GAUCHISSEMENT, ON VA DEFINIR
444 # --- LA COMPOSANTE SELON X DU FLUX A IMPOSER SUR LE CONTOUR
445 # --- PAR UNE FONCTION EGALE A Y :
446 # --------------------------
448 __fnsec4=DEFI_FONCTION(NOM_PARA='Y',
449 VALE=(0.,0.,10.,10.),
450 PROL_DROITE='LINEAIRE',
451 PROL_GAUCHE='LINEAIRE',
454 # --- DANS LE BUT D IMPOSER LA RELATION LINEAIRE ENTRE DDLS
455 # --- SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
456 # --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
457 # --- N = 0, N ETANT L EFFORT NORMAL)
458 # --- ON CALCULE LE VECTEUR DE CHARGEMENT DU A UN TERME SOURCE EGAL
459 # --- A 1., LES TERMES DE CE VECTEUR SONT EGAUX A
460 # --- SOMME_SECTION(NI.DS) ET SONT DONC LES COEFFICIENTS DE
461 # --- LA RELATION LINEAIRE A IMPOSER.
462 # --- ON DEFINIT DONC UN CHARGEMENT DU A UN TERME SOURCE EGAL A 1 :
463 # -----------------------------------------------------------
465 __chart4=AFFE_CHAR_THER(MODELE=__nomot2,
466 SOURCE=_F(TOUT='OUI',
469 # --- ON CALCULE LE VECT_ELEM DU AU CHARGEMENT PRECEDENT
470 # --- IL S AGIT DES VECTEURS ELEMENTAIRES DONT LE TERME
471 # --- AU NOEUD COURANT I EST EGAL A SOMME_SECTION(NI.DS) :
472 # --------------------------------------------------
474 __vecel=CALC_VECT_ELEM(CHARGE=__chart4,
478 # --- ON CALCULE LE MATR_ELEM DES MATRICES ELEMENTAIRES
479 # --- DE CONDUCTIVITE UNIQUEMENT POUR GENERER LE NUME_DDL
480 # --- SUR-LEQUEL S APPUIERA LE CHAMNO UTILISE POUR ECRIRE LA
481 # --- RELATION LINEAIRE ENTRE DDLS :
482 # ----------------------------
484 __matel=CALC_MATR_ELEM(MODELE=__nomot2,
489 # --- ON DEFINIT LE NUME_DDL ASSOCIE AU MATR_ELEM DEFINI
490 # --- PRECEDEMMENT POUR CONSTRUIRE LE CHAMNO UTILISE POUR ECRIRE LA
491 # --- RELATION LINEAIRE ENTRE DDLS :
492 # ----------------------------
494 __numddl=NUME_DDL(MATR_RIGI=__matel,
497 # --- ON CONSTRUIT LE CHAMNO QUI VA ETRE UTILISE POUR ECRIRE LA
498 # --- RELATION LINEAIRE ENTRE DDLS :
499 # ----------------------------
501 __chamno=ASSE_VECTEUR(VECT_ELEM=__vecel,
504 # --- ON IMPOSE LA RELATION LINEAIRE ENTRE DDLS
505 # --- SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
506 # --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
507 # --- N = 0, N ETANT L EFFORT NORMAL)
508 # --- POUR IMPOSER CETTE RELATION ON PASSE PAR LIAISON_CHAMNO,
509 # --- LES TERMES DU CHAMNO (I.E. SOMME_SECTION(NI.DS))
510 # --- SONT LES COEFFICIENTS DE LA RELATION LINEAIRE :
511 # ---------------------------------------------
513 __chart5=AFFE_CHAR_THER(MODELE=__nomot2,
514 LIAISON_CHAMNO=_F(CHAM_NO=__chamno,
517 # --- LE CHARGEMENT EST UN FLUX REPARTI NORMAL AU CONTOUR
518 # --- DONT LES COMPOSANTES SONT +Z (I.E. +Y) ET -Y (I.E. -X)
519 # --- SELON LA DIRECTION NORMALE AU CONTOUR :
520 # -------------------------------------
522 __chart6=AFFE_CHAR_THER_F(MODELE=__nomot2,
523 FLUX_REP=_F(GROUP_MA=GROUP_MA_BORD,
525 FLUX_Y =__fnsec3,), )
527 # --- RESOLUTION DE LAPLACIEN(OMEGA) = 0
528 # --- AVEC D(OMEGA)/D(N) = Z*NY-Y*NZ SUR LE CONTOUR DE LA SECTION
529 # --- ET SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
530 # --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
531 # --- N = 0, N ETANT L EFFORT NORMAL) :
532 # -------------------------------
534 __tempe4=THER_LINEAIRE(MODELE=__nomot2,
536 EXCIT=(_F(CHARGE=__chart5,),
537 _F(CHARGE=__chart6,),),
538 SOLVEUR=_F(METHODE='LDLT',
540 STOP_SINGULIER='NON',), )
542 # --- CALCUL DE L INERTIE DE GAUCHISSEMENT :
543 # -------------------------------------
545 nomres=POST_ELEM(reuse=nomres,
548 CARA_POUTRE=_F(CARA_GEOM=nomres,
551 OPTION='CARA_GAUCHI'), )
555 # ==================================================================
556 # --- = CALCUL DE LA CONSTANTE DE TORSION SUR CHAQUE GROUPE =
557 # --- = ET DU RAYON DE TORSION SUR CHAQUE GROUPE =
558 # --- = DU CENTRE DE TORSION/CISAILLEMENT =
559 # --- = DES COEFFICIENTS DE CISAILLEMENT =
560 # ==================================================================
566 if GROUP_MA_BORD and GROUP_MA:
568 if type(GROUP_MA_BORD)==types.StringType :
569 l_group_ma_bord=[GROUP_MA_BORD,]
571 l_group_ma_bord= GROUP_MA_BORD
572 if type(GROUP_MA)==types.StringType :
573 l_group_ma=[GROUP_MA,]
577 if args.has_key('NOEUD'):
578 if type(args['NOEUD'])==types.StringType :
579 l_noeud=[args['NOEUD'],]
581 l_noeud= args['NOEUD']
583 if len(l_group_ma)!=len(l_group_ma_bord):
585 self.cr.fatal("<F> <MACR_CARA_POUTRE> GROUP_MA et GROUP_MA_BORD incoherents")
587 if args.has_key('NOEUD') and (len(l_group_ma)!=len(l_noeud)):
589 self.cr.fatal("<F> <MACR_CARA_POUTRE> GROUP_MA et NOEUD incoherents")
592 for i in range(0,len(l_group_ma_bord)):
594 # --- TRANSFORMATION DES GROUP_MA EN GROUP_NO SUR-LESQUELS
595 # --- ON POURRA APPLIQUER DES CONDITIONS DE TEMPERATURE IMPOSEE :
596 # ---------------------------------------------------------
598 __nomlma=DEFI_GROUP(reuse=__nomlma,
600 CREA_GROUP_NO=_F(GROUP_MA=l_group_ma_bord[i],) )
603 # --- CREATION D UN MAILLAGE IDENTIQUE AU PREMIER A CECI PRES
604 # --- QUE LES COORDONNEES SONT EXPRIMEES DANS LE REPERE PRINCIPAL
605 # --- D INERTIE DONT L ORIGINE EST LE CENTRE DE GRAVITE DE LA SECTION :
606 # ---------------------------------------------------------------
608 __nomapi=CREA_MAILLAGE(MAILLAGE=__nomlma,
609 REPERE=_F(TABLE=nomres,
611 GROUP_MA=l_group_ma[i], ), )
613 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
614 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
615 # ------------------------------------------------------
617 __nomoth=AFFE_MODELE(MAILLAGE=__nomapi,
618 AFFE=_F(GROUP_MA=l_group_ma[i],
619 PHENOMENE='THERMIQUE',
620 MODELISATION='PLAN', ) )
622 # --- POUR LA CONSTRUCTION DU LAPLACIEN, ON DEFINIT UN
623 # --- PSEUDO-MATERIAU DONT LES CARACTERISTIQUES THERMIQUES SONT :
624 # --- LAMBDA = 1, RHO*CP = 0 :
625 # ----------------------
627 __nomath=DEFI_MATERIAU(THER=_F(LAMBDA=1.0,
630 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
631 # ---------------------------------------------------------
633 __chmath=AFFE_MATERIAU(MAILLAGE=__nomapi,
638 # ------------------------------------------------------------
639 # --- - CALCUL DE LA CONSTANTE DE TORSION PAR RESOLUTION -
640 # --- - D UN LAPLACIEN AVEC UN TERME SOURCE EGAL A -2 -
641 # --- - L INCONNUE ETANT NULLE SUR LE CONTOUR DE LA SECTION : -
642 # --- - LAPLACIEN(PHI) = -2 DANS LA SECTION -
643 # --- - PHI = 0 SUR LE CONTOUR : -
644 # ------------------------------------------------------------
646 # --- ON IMPOSE LA VALEUR 0 A L INCONNUE SCALAIRE SUR LE CONTOUR
648 # --- ET ON A UN TERME SOURCE EGAL A -2 DANS TOUTE LA SECTION :
649 # -------------------------------------------------------
651 __chart1=AFFE_CHAR_THER(MODELE=__nomoth,
652 TEMP_IMPO=_F(GROUP_NO=l_group_ma_bord[i],
654 SOURCE=_F(TOUT='OUI',
657 # --- RESOLUTION DE LAPLACIEN(PHI) = -2
658 # --- AVEC PHI = 0 SUR LE CONTOUR :
659 # ----------------------------------------
661 __tempe1=THER_LINEAIRE(MODELE=__nomoth,
663 EXCIT=_F(CHARGE=__chart1, ),
664 SOLVEUR=_F(STOP_SINGULIER='NON',) )
667 # ----------------------------------------------
668 # --- - CALCUL DU CENTRE DE TORSION/CISAILLEMENT -
669 # --- - ET DES COEFFICIENTS DE CISAILLEMENT : -
670 # ----------------------------------------------
672 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
673 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
674 # --- PAR UNE FONCTION EGALE A Y :
675 # --------------------------
677 __fnsec1=DEFI_FONCTION(NOM_PARA='X',
678 VALE=(0.,0.,10.,10.),
679 PROL_DROITE='LINEAIRE',
680 PROL_GAUCHE='LINEAIRE', )
682 __fnsec0=DEFI_CONSTANTE(VALE=0.,)
684 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
685 # --- DE LAPLACE EST PRIS EGAL A Y DANS TOUTE LA SECTION :
686 # --------------------------------------------------
688 __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
689 TEMP_IMPO=_F(NOEUD=l_noeud[i],
691 SOURCE=_F(TOUT='OUI',
694 # --- RESOLUTION DE LAPLACIEN(PHI) = -Y
695 # --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
696 # ------------------------------------------------
698 __tempe2=THER_LINEAIRE(MODELE=__nomoth,
700 EXCIT=_F(CHARGE=__chart2, ),
701 SOLVEUR=_F(STOP_SINGULIER='NON',) )
703 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
704 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
705 # --- PAR UNE FONCTION EGALE A Z :
706 # --------------------------
708 __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
709 VALE=(0.,0.,10.,10.),
710 PROL_DROITE='LINEAIRE',
711 PROL_GAUCHE='LINEAIRE', )
713 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
714 # --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
715 # --------------------------------------------------
717 __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
718 TEMP_IMPO=_F(NOEUD=l_noeud[i],
720 SOURCE=_F(TOUT='OUI',
723 # --- RESOLUTION DE LAPLACIEN(PHI) = -Z
724 # --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
725 # ------------------------------------------------
727 __tempe3=THER_LINEAIRE(MODELE=__nomoth,
729 EXCIT=_F(CHARGE=__chart3, ),
730 SOLVEUR=_F(STOP_SINGULIER='NON',) )
732 # --- CALCUL DU RAYON DE TORSION :
733 # --------------------------
735 # CALCUL DU RAYON DE TORSION EXTERNE : rtext
737 __tempe1=CALC_ELEM(reuse=__tempe1,
742 OPTION='FLUX_ELNO_TEMP',
745 __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
746 DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_bord[i]),
749 __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
752 NOM_CHAM='FLUX_ELNO_TEMP',
754 NOM_CMP=('FLUX','FLUY'),
755 OPERATION='MOYENNE'))
757 __m1=abs(__flun['TRAC_NOR',3])
758 __m2=abs(__flun['TRAC_NOR',4])
759 __rtext=max(__m1,__m2)
761 # CALCUL DU RAYON DE TORSION : rt
762 # rt = max ( rtext , 2*AIRE(TROU)/L(TROU) )
764 if args.has_key('GROUP_MA_INTE'):
765 if args['GROUP_MA_INTE'] != None :
766 if type(args['GROUP_MA_INTE'])==types.StringType :
767 l_group_ma_inte=[args['GROUP_MA_INTE'],]
769 l_group_ma_inte=args['GROUP_MA_INTE']
770 for j in range(0,len(l_group_ma_inte)):
771 __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
772 DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_inte[j]),
774 __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
777 NOM_CHAM='FLUX_ELNO_TEMP',
779 NOM_CMP=('FLUX','FLUY'),
780 OPERATION='MOYENNE'))
781 __m1=(abs(__flun['TRAC_NOR',3])+abs(__flun['TRAC_NOR',4]))/2.
787 # --- CALCUL DE LA CONSTANTE DE TORSION :
788 # ---------------------------------
790 nomres=POST_ELEM(reuse=nomres,
793 CARA_POUTRE=_F(CARA_GEOM=nomres,
796 GROUP_MA=l_group_ma[i],
797 OPTION='CARA_TORSION' ), )
799 # --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
800 # --- CENTRE DE CISAILLEMENT/TORSION :
801 # ------------------------------
803 nomres=POST_ELEM(reuse=nomres,
806 CARA_POUTRE=_F(CARA_GEOM=nomres,
809 GROUP_MA=l_group_ma[i],
810 LONGUEUR=args['LONGUEUR'],
811 MATERIAU=args['MATERIAU'],
812 LIAISON =args['LIAISON'],
813 OPTION='CARA_CISAILLEMENT' ), )
814 IMPR_TABLE(TABLE=nomres)