1 #@ MODIF macr_cara_poutre_ops Macro DATE 05/07/2005 AUTEUR DURAND C.DURAND
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
56 # Le concept sortant (de type tabl_cara_geom) est nommé 'nomres' dans
57 # le contexte de la macro
59 self.DeclareOut('nomres',self.sd)
61 # if GROUP_MA_BORD and GROUP_MA:
64 # self.cr.fatal("<F> <MACR_CARA_POUTRE> Avec GROUP_MA, il faut obligatoirement preciser LIAISON, LONGUEUR ET MATERIAU")
67 __nomlma=LIRE_MAILLAGE(UNITE=UNITE_MAILLAGE,)
69 __nomamo=AFFE_MODELE(MAILLAGE=__nomlma,
71 PHENOMENE='MECANIQUE',
72 MODELISATION='D_PLAN',), )
74 __nomdma=DEFI_MATERIAU(ELAS=_F(E=1.0,NU=0.,RHO=1.0),)
77 __nomama=AFFE_MATERIAU(MAILLAGE=__nomlma,
81 # --- CALCUL DES CARACTERISTIQUES GEOMETRIQUES DE LA SECTION :
82 # ------------------------------------------------------
85 if GROUP_MA : motsimps['GROUP_MA'] = GROUP_MA
86 if SYME_X : motsimps['SYME_X'] = SYME_X
87 if SYME_Y : motsimps['SYME_Y'] = SYME_Y
88 motsimps['ORIG_INER'] = ORIG_INER
89 mfact=_F(TOUT='OUI',**motsimps)
90 nomres=POST_ELEM(MODELE=__nomamo,
94 # nb : si GROUP_MA n existe pas : le mot clé est ignoré
97 # ==================================================================
98 # --- = CALCUL DE LA CONSTANTE DE TORSION SUR TOUT LE MAILLAGE =
99 # --- = OU DU CENTRE DE TORSION/CISAILLEMENT =
100 # --- = DES COEFFICIENTS DE CISAILLEMENT =
101 # --- = ET DE L INERTIE DE GAUCHISSEMENT =
102 # --- = DU RAYON DE TORSION SUR TOUT LE MAILLAGE
103 # --- = ON CREE UN MODELE PLAN 2D THERMIQUE REPRESENTANT LA SECTION =
104 # --- = DE LA POUTRE CAR ON A A RESOUDRE DES E.D.P. AVEC DES LAPLACIENS=
105 # ==================================================================
107 if GROUP_MA_BORD and not GROUP_MA:
108 # --- TRANSFORMATION DES GROUP_MA EN GROUP_NO SUR-LESQUELS
109 # --- ON POURRA APPLIQUER DES CONDITIONS DE TEMPERATURE IMPOSEE :
110 # ---------------------------------------------------------
112 if type(GROUP_MA_BORD)==types.StringType:
113 motscles['CREA_GROUP_NO']=_F(GROUP_MA=GROUP_MA_BORD,)
115 motscles['CREA_GROUP_NO']=[]
116 for grma in GROUP_MA_BORD:
117 motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=grma,))
118 __nomlma=DEFI_GROUP(reuse=__nomlma,
124 # --- CREATION D UN MAILLAGE IDENTIQUE AU PREMIER A CECI PRES
125 # --- QUE LES COORDONNEES SONT EXPRIMEES DANS LE REPERE PRINCIPAL
126 # --- D INERTIE DONT L ORIGINE EST LE CENTRE DE GRAVITE DE LA SECTION :
127 # ---------------------------------------------------------------
129 __nomapi=CREA_MAILLAGE(MAILLAGE=__nomlma,
130 REPERE=_F(TABLE=nomres,
133 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
134 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
135 # ------------------------------------------------------
137 __nomoth=AFFE_MODELE(MAILLAGE=__nomapi,
139 PHENOMENE='THERMIQUE',
140 MODELISATION='PLAN',), )
142 # --- POUR LA CONSTRUCTION DU LAPLACIEN, ON DEFINIT UN
143 # --- PSEUDO-MATERIAU DONT LES CARACTERISTIQUES THERMIQUES SONT :
144 # --- LAMBDA = 1, RHO*CP = 0 :
145 # ----------------------
147 __nomath=DEFI_MATERIAU(THER=_F(LAMBDA=1.0,RHO_CP=0.,),)
149 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
150 # ---------------------------------------------------------
152 __chmath=AFFE_MATERIAU(MAILLAGE=__nomapi,
157 # ------------------------------------------------------------
158 # --- - CALCUL DE LA CONSTANTE DE TORSION PAR RESOLUTION -
159 # --- - D UN LAPLACIEN AVEC UN TERME SOURCE EGAL A -2 -
160 # --- - L INCONNUE ETANT NULLE SUR LE CONTOUR DE LA SECTION : -
161 # --- - LAPLACIEN(PHI) = -2 DANS LA SECTION -
162 # --- - PHI = 0 SUR LE CONTOUR : -
163 # ------------------------------------------------------------
165 # --- ON IMPOSE LA VALEUR 0 A L INCONNUE SCALAIRE SUR LE CONTOUR
167 # --- ET ON A UN TERME SOURCE EGAL A -2 DANS TOUTE LA SECTION :
168 # -------------------------------------------------------
171 if args.has_key('GROUP_MA_INTE'):
172 if args['GROUP_MA_INTE'] != None :
173 motscles['LIAISON_UNIF']=_F(GROUP_MA=args['GROUP_MA_INTE'],DDL='TEMP'),
174 __chart1=AFFE_CHAR_THER(MODELE=__nomoth,
175 TEMP_IMPO =_F(GROUP_NO=GROUP_MA_BORD,
177 SOURCE =_F(TOUT='OUI',
181 # --- POUR CHAQUE TROU DE LA SECTION :
182 # --- .ON A IMPOSE QUE PHI EST CONSTANT SUR LE CONTOUR INTERIEUR
183 # --- EN FAISANT LE LIAISON_UNIF DANS LE AFFE_CHAR_THER PRECEDENT
184 # --- .ON IMPOSE EN PLUS D(PHI)/DN = 2*AIRE(TROU)/L(TROU)
185 # --- OU D/DN DESIGNE LA DERIVEE PAR RAPPORT A LA
186 # --- NORMALE ET L DESIGNE LA LONGUEUR DU BORD DU TROU :
187 # -------------------------------------------------------
189 if args.has_key('GROUP_MA_INTE'):
190 lgmaint=args['GROUP_MA_INTE']
192 __tbaire=POST_ELEM(MODELE=__nomoth,
193 AIRE_INTERNE=_F(GROUP_MA_BORD=args['GROUP_MA_INTE'],), )
196 motscles['FLUX_REP']=[]
198 if type(lgmaint)==types.StringType:
199 motscles['FLUX_REP']=_F(GROUP_MA=args['GROUP_MA_INTE'],CARA_TORSION=__tbaire)
201 motscles['FLUX_REP']=[]
203 motscles['FLUX_REP'].append(_F(GROUP_MA=grma,CARA_TORSION=__tbaire),)
204 __chart2=AFFE_CHAR_THER(MODELE=__nomoth,**motscles)
206 # --- RESOLUTION DE LAPLACIEN(PHI) = -2
207 # --- AVEC PHI = 0 SUR LE CONTOUR :
208 # ----------------------------------------
211 motscles['EXCIT']=[_F(CHARGE=__chart1,),]
212 if args.has_key('GROUP_MA_INTE'):
214 motscles['EXCIT'].append(_F(CHARGE=__chart2,))
215 __tempe1=THER_LINEAIRE(MODELE=__nomoth,
217 SOLVEUR=_F(STOP_SINGULIER='NON',),
221 # ----------------------------------------------
222 # --- - CALCUL DU CENTRE DE TORSION/CISAILLEMENT -
223 # --- - ET DES COEFFICIENTS DE CISAILLEMENT : -
224 # ----------------------------------------------
226 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
227 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
228 # --- PAR UNE FONCTION EGALE A Y :
229 # --------------------------
231 __fnsec1=DEFI_FONCTION(NOM_PARA='X',
232 VALE=(0.,0.,10.,10.),
233 PROL_DROITE='LINEAIRE',
234 PROL_GAUCHE='LINEAIRE',
237 __fnsec0=DEFI_CONSTANTE(VALE=0.,)
239 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
240 # --- DE LAPLACE EST PRIS EGAL A Y DANS TOUTE LA SECTION :
241 # --------------------------------------------------
245 if args.has_key('NOEUD'):
246 motscles['TEMP_IMPO']=(_F(NOEUD=args['NOEUD'],TEMP=__fnsec0))
247 __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
248 SOURCE=_F(TOUT='OUI',
252 # --- RESOLUTION DE LAPLACIEN(PHI) = -Y
253 # --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
254 # ------------------------------------------------
256 __tempe2=THER_LINEAIRE(MODELE=__nomoth,
258 EXCIT=_F(CHARGE=__chart2,),
259 SOLVEUR=_F(STOP_SINGULIER='NON',),
262 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
263 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
264 # --- PAR UNE FONCTION EGALE A Z :
265 # --------------------------
267 __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
268 VALE=(0.,0.,10.,10.),
269 PROL_DROITE='LINEAIRE',
270 PROL_GAUCHE='LINEAIRE',
273 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
274 # --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
275 # --------------------------------------------------
278 if args.has_key('NOEUD'):
279 motscles['TEMP_IMPO']=_F(NOEUD=args['NOEUD'],TEMP=__fnsec0)
280 __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
281 SOURCE=_F(TOUT='OUI',
285 # --- RESOLUTION DE LAPLACIEN(PHI) = -Z
286 # --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
287 # ------------------------------------------------
289 __tempe3=THER_LINEAIRE(MODELE=__nomoth,
291 EXCIT=_F(CHARGE=__chart3,),
292 SOLVEUR=_F(STOP_SINGULIER='NON',),
295 # --- CALCUL DU RAYON DE TORSION :
296 # --------------------------
298 # CALCUL DU RAYON DE TORSION EXTERNE : rtext
300 __tempe1=CALC_ELEM(reuse=__tempe1,
305 OPTION='FLUX_ELNO_TEMP',
308 __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
309 DEFI_CHEMIN=_F(GROUP_MA=GROUP_MA_BORD),
312 __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
315 NOM_CHAM='FLUX_ELNO_TEMP',
317 NOM_CMP=('FLUX','FLUY'),
318 OPERATION='MOYENNE'))
320 __m1=abs(__flun['TRAC_NOR',3])
321 __m2=abs(__flun['TRAC_NOR',4])
322 __rtext=max(__m1,__m2)
324 # CALCUL DU RAYON DE TORSION : rt
325 # rt = max ( rtext , 2*AIRE(TROU)/L(TROU) )
327 if args.has_key('GROUP_MA_INTE'):
328 if args['GROUP_MA_INTE'] != None :
329 if type(args['GROUP_MA_INTE'])==types.StringType :
330 l_group_ma_inte=[args['GROUP_MA_INTE'],]
332 l_group_ma_inte=args['GROUP_MA_INTE']
333 for i in range(0,len(l_group_ma_inte)):
334 __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
335 DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_inte[i]),
337 __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
340 NOM_CHAM='FLUX_ELNO_TEMP',
342 NOM_CMP=('FLUX','FLUY'),
343 OPERATION='MOYENNE'))
344 __m1=(abs(__flun['TRAC_NOR',3])+abs(__flun['TRAC_NOR',4]))/2.
350 # --- CALCUL DE LA CONSTANTE DE TORSION :
351 # ---------------------------------
354 if args.has_key('GROUP_MA_INTE'):
355 lgmaint=args['GROUP_MA_INTE']
357 motscles['CARA_POUTRE']=_F(CARA_GEOM=nomres,
361 OPTION='CARA_TORSION',
362 GROUP_MA_INTE=args['GROUP_MA_INTE'],)
364 motscles['CARA_POUTRE']=_F(CARA_GEOM=nomres,
368 OPTION='CARA_TORSION', )
369 nomres=POST_ELEM(reuse=nomres,
375 # --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
376 # --- CENTRE DE CISAILLEMENT/TORSION :
377 # ------------------------------
379 nomres=POST_ELEM(reuse=nomres,
382 CARA_POUTRE=_F(CARA_GEOM=nomres,
386 OPTION='CARA_CISAILLEMENT',), )
390 # ------------------------------------------------------------
391 # --- - CALCUL DE L INERTIE DE GAUCHISSEMENT PAR RESOLUTION DE -
392 # --- - LAPLACIEN(OMEGA) = 0 DANS LA SECTION -
393 # --- - AVEC D(OMEGA)/D(N) = Z*NY-Y*NZ SUR LE -
394 # --- - CONTOUR DE LA SECTION -
395 # --- - NY ET NZ SONT LES COMPOSANTES DU VECTEUR N NORMAL -
396 # --- - A CE CONTOUR -
397 # --- - ET SOMME_S(OMEGA.DS) = 0 -
398 # --- - OMEGA EST LA FONCTION DE GAUCHISSEMENT -
399 # --- - L INERTIE DE GAUCHISSEMENT EST SOMME_S(OMEGA**2.DS) -
400 # ------------------------------------------------------------
402 # --- CREATION D UN MAILLAGE DONT LES COORDONNEES SONT EXPRIMEES
403 # --- DANS LE REPERE PRINCIPAL D INERTIE MAIS AVEC COMME ORIGINE
404 # --- LE CENTRE DE TORSION DE LA SECTION, ON VA DONC UTILISER
405 # --- LE MAILLAGE DE NOM NOMAPI DONT LES COORDONNEES SONT
406 # --- EXPRIMEES DANS LE REPERE PRINCIPAL D'INERTIE, L'ORIGINE
407 # --- ETANT LE CENTRE DE GRAVITE DE LA SECTION (QUI EST DONC
411 __nomapt=CREA_MAILLAGE(MAILLAGE=__nomapi,
412 REPERE=_F(TABLE=nomres,
413 NOM_ORIG='TORSION',) )
415 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
416 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
417 # ------------------------------------------------------
419 __nomot2=AFFE_MODELE(MAILLAGE=__nomapt,
421 PHENOMENE='THERMIQUE',
422 MODELISATION='PLAN', ) )
424 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
425 # ---------------------------------------------------------
427 __chmat2=AFFE_MATERIAU(MAILLAGE=__nomapt,
431 # --- POUR LE CALCUL DE L INERTIE DE GAUCHISSEMENT, ON VA DEFINIR
432 # --- LA COMPOSANTE SELON Y DU FLUX A IMPOSER SUR LE CONTOUR
433 # --- PAR UNE FONCTION EGALE A -X :
434 # ---------------------------
436 __fnsec3=DEFI_FONCTION(NOM_PARA='X',
437 VALE=(0.,0.,10.,-10.),
438 PROL_DROITE='LINEAIRE',
439 PROL_GAUCHE='LINEAIRE',
442 # --- POUR LE CALCUL DE L INERTIE DE GAUCHISSEMENT, ON VA DEFINIR
443 # --- LA COMPOSANTE SELON X DU FLUX A IMPOSER SUR LE CONTOUR
444 # --- PAR UNE FONCTION EGALE A Y :
445 # --------------------------
447 __fnsec4=DEFI_FONCTION(NOM_PARA='Y',
448 VALE=(0.,0.,10.,10.),
449 PROL_DROITE='LINEAIRE',
450 PROL_GAUCHE='LINEAIRE',
453 # --- DANS LE BUT D IMPOSER LA RELATION LINEAIRE ENTRE DDLS
454 # --- SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
455 # --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
456 # --- N = 0, N ETANT L EFFORT NORMAL)
457 # --- ON CALCULE LE VECTEUR DE CHARGEMENT DU A UN TERME SOURCE EGAL
458 # --- A 1., LES TERMES DE CE VECTEUR SONT EGAUX A
459 # --- SOMME_SECTION(NI.DS) ET SONT DONC LES COEFFICIENTS DE
460 # --- LA RELATION LINEAIRE A IMPOSER.
461 # --- ON DEFINIT DONC UN CHARGEMENT DU A UN TERME SOURCE EGAL A 1 :
462 # -----------------------------------------------------------
464 __chart4=AFFE_CHAR_THER(MODELE=__nomot2,
465 SOURCE=_F(TOUT='OUI',
468 # --- ON CALCULE LE VECT_ELEM DU AU CHARGEMENT PRECEDENT
469 # --- IL S AGIT DES VECTEURS ELEMENTAIRES DONT LE TERME
470 # --- AU NOEUD COURANT I EST EGAL A SOMME_SECTION(NI.DS) :
471 # --------------------------------------------------
473 __vecel=CALC_VECT_ELEM(CHARGE=__chart4,
477 # --- ON CALCULE LE MATR_ELEM DES MATRICES ELEMENTAIRES
478 # --- DE CONDUCTIVITE UNIQUEMENT POUR GENERER LE NUME_DDL
479 # --- SUR-LEQUEL S APPUIERA LE CHAMNO UTILISE POUR ECRIRE LA
480 # --- RELATION LINEAIRE ENTRE DDLS :
481 # ----------------------------
483 __matel=CALC_MATR_ELEM(MODELE=__nomot2,
488 # --- ON DEFINIT LE NUME_DDL ASSOCIE AU MATR_ELEM DEFINI
489 # --- PRECEDEMMENT POUR CONSTRUIRE LE CHAMNO UTILISE POUR ECRIRE LA
490 # --- RELATION LINEAIRE ENTRE DDLS :
491 # ----------------------------
493 __numddl=NUME_DDL(MATR_RIGI=__matel,
496 # --- ON CONSTRUIT LE CHAMNO QUI VA ETRE UTILISE POUR ECRIRE LA
497 # --- RELATION LINEAIRE ENTRE DDLS :
498 # ----------------------------
500 __chamno=ASSE_VECTEUR(VECT_ELEM=__vecel,
503 # --- ON IMPOSE LA RELATION LINEAIRE ENTRE DDLS
504 # --- SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
505 # --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
506 # --- N = 0, N ETANT L EFFORT NORMAL)
507 # --- POUR IMPOSER CETTE RELATION ON PASSE PAR LIAISON_CHAMNO,
508 # --- LES TERMES DU CHAMNO (I.E. SOMME_SECTION(NI.DS))
509 # --- SONT LES COEFFICIENTS DE LA RELATION LINEAIRE :
510 # ---------------------------------------------
512 __chart5=AFFE_CHAR_THER(MODELE=__nomot2,
513 LIAISON_CHAMNO=_F(CHAM_NO=__chamno,
516 # --- LE CHARGEMENT EST UN FLUX REPARTI NORMAL AU CONTOUR
517 # --- DONT LES COMPOSANTES SONT +Z (I.E. +Y) ET -Y (I.E. -X)
518 # --- SELON LA DIRECTION NORMALE AU CONTOUR :
519 # -------------------------------------
521 __chart6=AFFE_CHAR_THER_F(MODELE=__nomot2,
522 FLUX_REP=_F(GROUP_MA=GROUP_MA_BORD,
524 FLUX_Y =__fnsec3,), )
526 # --- RESOLUTION DE LAPLACIEN(OMEGA) = 0
527 # --- AVEC D(OMEGA)/D(N) = Z*NY-Y*NZ SUR LE CONTOUR DE LA SECTION
528 # --- ET SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
529 # --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
530 # --- N = 0, N ETANT L EFFORT NORMAL) :
531 # -------------------------------
533 __tempe4=THER_LINEAIRE(MODELE=__nomot2,
535 EXCIT=(_F(CHARGE=__chart5,),
536 _F(CHARGE=__chart6,),),
537 SOLVEUR=_F(METHODE='LDLT',
539 STOP_SINGULIER='NON',), )
541 # --- CALCUL DE L INERTIE DE GAUCHISSEMENT :
542 # -------------------------------------
544 nomres=POST_ELEM(reuse=nomres,
547 CARA_POUTRE=_F(CARA_GEOM=nomres,
550 OPTION='CARA_GAUCHI'), )
554 # ==================================================================
555 # --- = CALCUL DE LA CONSTANTE DE TORSION SUR CHAQUE GROUPE =
556 # --- = ET DU RAYON DE TORSION SUR CHAQUE GROUPE =
557 # --- = DU CENTRE DE TORSION/CISAILLEMENT =
558 # --- = DES COEFFICIENTS DE CISAILLEMENT =
559 # ==================================================================
565 if GROUP_MA_BORD and GROUP_MA:
567 if type(GROUP_MA_BORD)==types.StringType :
568 l_group_ma_bord=[GROUP_MA_BORD,]
570 l_group_ma_bord= GROUP_MA_BORD
571 if type(GROUP_MA)==types.StringType :
572 l_group_ma=[GROUP_MA,]
576 if args.has_key('NOEUD'):
577 if type(args['NOEUD'])==types.StringType :
578 l_noeud=[args['NOEUD'],]
580 l_noeud= args['NOEUD']
582 if len(l_group_ma)!=len(l_group_ma_bord):
584 self.cr.fatal("<F> <MACR_CARA_POUTRE> GROUP_MA et GROUP_MA_BORD incoherents")
586 if args.has_key('NOEUD') and (len(l_group_ma)!=len(l_noeud)):
588 self.cr.fatal("<F> <MACR_CARA_POUTRE> GROUP_MA et NOEUD incoherents")
591 for i in range(0,len(l_group_ma_bord)):
593 # --- TRANSFORMATION DES GROUP_MA EN GROUP_NO SUR-LESQUELS
594 # --- ON POURRA APPLIQUER DES CONDITIONS DE TEMPERATURE IMPOSEE :
595 # ---------------------------------------------------------
597 __nomlma=DEFI_GROUP(reuse=__nomlma,
599 CREA_GROUP_NO=_F(GROUP_MA=l_group_ma_bord[i],) )
602 # --- CREATION D UN MAILLAGE IDENTIQUE AU PREMIER A CECI PRES
603 # --- QUE LES COORDONNEES SONT EXPRIMEES DANS LE REPERE PRINCIPAL
604 # --- D INERTIE DONT L ORIGINE EST LE CENTRE DE GRAVITE DE LA SECTION :
605 # ---------------------------------------------------------------
607 __nomapi=CREA_MAILLAGE(MAILLAGE=__nomlma,
608 REPERE=_F(TABLE=nomres,
610 GROUP_MA=l_group_ma[i], ), )
612 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
613 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
614 # ------------------------------------------------------
616 __nomoth=AFFE_MODELE(MAILLAGE=__nomapi,
617 AFFE=_F(GROUP_MA=l_group_ma[i],
618 PHENOMENE='THERMIQUE',
619 MODELISATION='PLAN', ) )
621 # --- POUR LA CONSTRUCTION DU LAPLACIEN, ON DEFINIT UN
622 # --- PSEUDO-MATERIAU DONT LES CARACTERISTIQUES THERMIQUES SONT :
623 # --- LAMBDA = 1, RHO*CP = 0 :
624 # ----------------------
626 __nomath=DEFI_MATERIAU(THER=_F(LAMBDA=1.0,
629 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
630 # ---------------------------------------------------------
632 __chmath=AFFE_MATERIAU(MAILLAGE=__nomapi,
637 # ------------------------------------------------------------
638 # --- - CALCUL DE LA CONSTANTE DE TORSION PAR RESOLUTION -
639 # --- - D UN LAPLACIEN AVEC UN TERME SOURCE EGAL A -2 -
640 # --- - L INCONNUE ETANT NULLE SUR LE CONTOUR DE LA SECTION : -
641 # --- - LAPLACIEN(PHI) = -2 DANS LA SECTION -
642 # --- - PHI = 0 SUR LE CONTOUR : -
643 # ------------------------------------------------------------
645 # --- ON IMPOSE LA VALEUR 0 A L INCONNUE SCALAIRE SUR LE CONTOUR
647 # --- ET ON A UN TERME SOURCE EGAL A -2 DANS TOUTE LA SECTION :
648 # -------------------------------------------------------
650 __chart1=AFFE_CHAR_THER(MODELE=__nomoth,
651 TEMP_IMPO=_F(GROUP_NO=l_group_ma_bord[i],
653 SOURCE=_F(TOUT='OUI',
656 # --- RESOLUTION DE LAPLACIEN(PHI) = -2
657 # --- AVEC PHI = 0 SUR LE CONTOUR :
658 # ----------------------------------------
660 __tempe1=THER_LINEAIRE(MODELE=__nomoth,
662 EXCIT=_F(CHARGE=__chart1, ),
663 SOLVEUR=_F(STOP_SINGULIER='NON',) )
666 # ----------------------------------------------
667 # --- - CALCUL DU CENTRE DE TORSION/CISAILLEMENT -
668 # --- - ET DES COEFFICIENTS DE CISAILLEMENT : -
669 # ----------------------------------------------
671 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
672 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
673 # --- PAR UNE FONCTION EGALE A Y :
674 # --------------------------
676 __fnsec1=DEFI_FONCTION(NOM_PARA='X',
677 VALE=(0.,0.,10.,10.),
678 PROL_DROITE='LINEAIRE',
679 PROL_GAUCHE='LINEAIRE', )
681 __fnsec0=DEFI_CONSTANTE(VALE=0.,)
683 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
684 # --- DE LAPLACE EST PRIS EGAL A Y DANS TOUTE LA SECTION :
685 # --------------------------------------------------
687 __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
688 TEMP_IMPO=_F(NOEUD=l_noeud[i],
690 SOURCE=_F(TOUT='OUI',
693 # --- RESOLUTION DE LAPLACIEN(PHI) = -Y
694 # --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
695 # ------------------------------------------------
697 __tempe2=THER_LINEAIRE(MODELE=__nomoth,
699 EXCIT=_F(CHARGE=__chart2, ),
700 SOLVEUR=_F(STOP_SINGULIER='NON',) )
702 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
703 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
704 # --- PAR UNE FONCTION EGALE A Z :
705 # --------------------------
707 __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
708 VALE=(0.,0.,10.,10.),
709 PROL_DROITE='LINEAIRE',
710 PROL_GAUCHE='LINEAIRE', )
712 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
713 # --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
714 # --------------------------------------------------
716 __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
717 TEMP_IMPO=_F(NOEUD=l_noeud[i],
719 SOURCE=_F(TOUT='OUI',
722 # --- RESOLUTION DE LAPLACIEN(PHI) = -Z
723 # --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
724 # ------------------------------------------------
726 __tempe3=THER_LINEAIRE(MODELE=__nomoth,
728 EXCIT=_F(CHARGE=__chart3, ),
729 SOLVEUR=_F(STOP_SINGULIER='NON',) )
731 # --- CALCUL DU RAYON DE TORSION :
732 # --------------------------
734 # CALCUL DU RAYON DE TORSION EXTERNE : rtext
736 __tempe1=CALC_ELEM(reuse=__tempe1,
741 OPTION='FLUX_ELNO_TEMP',
744 __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
745 DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_bord[i]),
748 __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
751 NOM_CHAM='FLUX_ELNO_TEMP',
753 NOM_CMP=('FLUX','FLUY'),
754 OPERATION='MOYENNE'))
756 __m1=abs(__flun['TRAC_NOR',3])
757 __m2=abs(__flun['TRAC_NOR',4])
758 __rtext=max(__m1,__m2)
760 # CALCUL DU RAYON DE TORSION : rt
761 # rt = max ( rtext , 2*AIRE(TROU)/L(TROU) )
763 if args.has_key('GROUP_MA_INTE'):
764 if args['GROUP_MA_INTE'] != None :
765 if type(args['GROUP_MA_INTE'])==types.StringType :
766 l_group_ma_inte=[args['GROUP_MA_INTE'],]
768 l_group_ma_inte=args['GROUP_MA_INTE']
769 for j in range(0,len(l_group_ma_inte)):
770 __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
771 DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_inte[j]),
773 __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
776 NOM_CHAM='FLUX_ELNO_TEMP',
778 NOM_CMP=('FLUX','FLUY'),
779 OPERATION='MOYENNE'))
780 __m1=(abs(__flun['TRAC_NOR',3])+abs(__flun['TRAC_NOR',4]))/2.
786 # --- CALCUL DE LA CONSTANTE DE TORSION :
787 # ---------------------------------
789 nomres=POST_ELEM(reuse=nomres,
792 CARA_POUTRE=_F(CARA_GEOM=nomres,
795 GROUP_MA=l_group_ma[i],
796 OPTION='CARA_TORSION' ), )
798 # --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
799 # --- CENTRE DE CISAILLEMENT/TORSION :
800 # ------------------------------
802 nomres=POST_ELEM(reuse=nomres,
805 CARA_POUTRE=_F(CARA_GEOM=nomres,
808 GROUP_MA=l_group_ma[i],
809 LONGUEUR=args['LONGUEUR'],
810 MATERIAU=args['MATERIAU'],
811 LIAISON =args['LIAISON'],
812 OPTION='CARA_CISAILLEMENT' ), )
813 IMPR_TABLE(TABLE=nomres)