1 #@ MODIF macr_cara_poutre_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE
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 from Utilitai.Utmess import UTMESS
32 # On importe les definitions des commandes a utiliser dans la macro
33 # Le nom de la variable doit etre obligatoirement le nom de la commande
34 LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
35 DEFI_GROUP =self.get_cmd('DEFI_GROUP')
36 CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
37 AFFE_MODELE =self.get_cmd('AFFE_MODELE')
38 DEFI_MATERIAU =self.get_cmd('DEFI_MATERIAU')
39 AFFE_MATERIAU =self.get_cmd('AFFE_MATERIAU')
40 DEFI_FONCTION =self.get_cmd('DEFI_FONCTION')
41 DEFI_CONSTANTE =self.get_cmd('DEFI_CONSTANTE')
42 AFFE_CHAR_THER =self.get_cmd('AFFE_CHAR_THER')
43 AFFE_CHAR_THER_F=self.get_cmd('AFFE_CHAR_THER_F')
44 THER_LINEAIRE =self.get_cmd('THER_LINEAIRE')
45 CALC_VECT_ELEM =self.get_cmd('CALC_VECT_ELEM')
46 CALC_MATR_ELEM =self.get_cmd('CALC_MATR_ELEM')
47 NUME_DDL =self.get_cmd('NUME_DDL')
48 ASSE_VECTEUR =self.get_cmd('ASSE_VECTEUR')
49 POST_ELEM =self.get_cmd('POST_ELEM')
50 CALC_ELEM =self.get_cmd('CALC_ELEM')
51 INTE_MAIL_2D =self.get_cmd('INTE_MAIL_2D')
52 POST_RELEVE_T =self.get_cmd('POST_RELEVE_T')
53 IMPR_TABLE =self.get_cmd('IMPR_TABLE')
54 CREA_TABLE =self.get_cmd('CREA_TABLE')
55 # La macro compte pour 1 dans la numerotation des commandes
58 # Le concept sortant (de type table_sdaster) est nommé 'nomres' dans
59 # le contexte de la macro
61 self.DeclareOut('nomres',self.sd)
63 # if GROUP_MA_BORD and GROUP_MA:
66 __nomlma=LIRE_MAILLAGE(UNITE=UNITE_MAILLAGE,)
68 __nomamo=AFFE_MODELE(MAILLAGE=__nomlma,
70 PHENOMENE='MECANIQUE',
71 MODELISATION='D_PLAN',), )
73 __nomdma=DEFI_MATERIAU(ELAS=_F(E=1.0,NU=0.,RHO=1.0),)
76 __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 __cageo=POST_ELEM(MODELE=__nomamo,
93 # nb : si GROUP_MA n existe pas : le mot clé est ignoré
96 # ==================================================================
97 # --- = CALCUL DE LA CONSTANTE DE TORSION SUR TOUT LE MAILLAGE =
98 # --- = OU DU CENTRE DE TORSION/CISAILLEMENT =
99 # --- = DES COEFFICIENTS DE CISAILLEMENT =
100 # --- = ET DE L INERTIE DE GAUCHISSEMENT =
101 # --- = DU RAYON DE TORSION SUR TOUT LE MAILLAGE
102 # --- = ON CREE UN MODELE PLAN 2D THERMIQUE REPRESENTANT LA SECTION =
103 # --- = DE LA POUTRE CAR ON A A RESOUDRE DES E.D.P. AVEC DES LAPLACIENS=
104 # ==================================================================
106 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=__cageo,
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['NOEUD']!=None:
246 nthno = args['NOEUD']
247 if type(nthno)!=types.StringType : UTMESS('F','POUTRE0_3')
248 motscles['TEMP_IMPO']=(_F(NOEUD=nthno,TEMP=__fnsec0))
249 if args['GROUP_NO']!=None:
250 collgrno=aster.getcolljev(string.ljust(__nomapi.nom,8)+'.GROUPENO')
251 nomnoe =aster.getvectjev(string.ljust(__nomapi.nom,8)+'.NOMNOE')
252 l_no=collgrno[string.ljust(args['GROUP_NO'],8)]
253 if len(l_no)!=1 : UTMESS('F','POUTRE0_3')
254 nthno=nomnoe[l_no[0]-1]
255 motscles['TEMP_IMPO']=(_F(NOEUD=nthno,TEMP=__fnsec0))
256 __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
257 SOURCE=_F(TOUT='OUI',
261 # --- RESOLUTION DE LAPLACIEN(PHI) = -Y
262 # --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
263 # ------------------------------------------------
265 __tempe2=THER_LINEAIRE(MODELE=__nomoth,
267 EXCIT=_F(CHARGE=__chart2,),
268 SOLVEUR=_F(STOP_SINGULIER='NON',),
271 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
272 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
273 # --- PAR UNE FONCTION EGALE A Z :
274 # --------------------------
276 __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
277 VALE=(0.,0.,10.,10.),
278 PROL_DROITE='LINEAIRE',
279 PROL_GAUCHE='LINEAIRE',
282 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
283 # --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
284 # --------------------------------------------------
287 if args['NOEUD']!=None:
288 nthno = args['NOEUD']
289 motscles['TEMP_IMPO']=_F(NOEUD=nthno,TEMP=__fnsec0)
290 if args['GROUP_NO']!=None:
291 collgrno=aster.getcolljev(string.ljust(__nomapi.nom,8)+'.GROUPENO')
292 nomnoe =aster.getvectjev(string.ljust(__nomapi.nom,8)+'.NOMNOE')
293 l_no=collgrno[string.ljust(args['GROUP_NO'],8)]
294 if len(l_no)!=1 : UTMESS('F','POUTRE0_3')
295 nthno=nomnoe[l_no[0]-1]
296 motscles['TEMP_IMPO']=_F(NOEUD=nthno,TEMP=__fnsec0)
297 __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
298 SOURCE=_F(TOUT='OUI',
302 # --- RESOLUTION DE LAPLACIEN(PHI) = -Z
303 # --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
304 # ------------------------------------------------
306 __tempe3=THER_LINEAIRE(MODELE=__nomoth,
308 EXCIT=_F(CHARGE=__chart3,),
309 SOLVEUR=_F(STOP_SINGULIER='NON',),
312 # --- CALCUL DU RAYON DE TORSION :
313 # --------------------------
315 # CALCUL DU RAYON DE TORSION EXTERNE : rtext
317 __tempe1=CALC_ELEM(reuse=__tempe1,
322 OPTION='FLUX_ELNO_TEMP',
325 __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
326 DEFI_CHEMIN=_F(GROUP_MA=GROUP_MA_BORD),
329 __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
332 NOM_CHAM='FLUX_ELNO_TEMP',
334 NOM_CMP=('FLUX','FLUY'),
335 OPERATION='MOYENNE'))
337 __m1=abs(__flun['TRAC_NOR',3])
338 __m2=abs(__flun['TRAC_NOR',4])
339 __rtext=max(__m1,__m2)
341 # CALCUL DU RAYON DE TORSION : rt
342 # rt = max ( rtext , 2*AIRE(TROU)/L(TROU) )
344 if args.has_key('GROUP_MA_INTE'):
345 if args['GROUP_MA_INTE'] != None :
346 if type(args['GROUP_MA_INTE'])==types.StringType :
347 l_group_ma_inte=[args['GROUP_MA_INTE'],]
349 l_group_ma_inte=args['GROUP_MA_INTE']
350 for i in range(0,len(l_group_ma_inte)):
351 __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
352 DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_inte[i]),
354 __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
357 NOM_CHAM='FLUX_ELNO_TEMP',
359 NOM_CMP=('FLUX','FLUY'),
360 OPERATION='MOYENNE'))
361 __m1=(abs(__flun['TRAC_NOR',3])+abs(__flun['TRAC_NOR',4]))/2.
367 # --- CALCUL DE LA CONSTANTE DE TORSION :
368 # ---------------------------------
371 if args.has_key('GROUP_MA_INTE'):
372 lgmaint=args['GROUP_MA_INTE']
374 motscles['CARA_POUTRE']=_F(CARA_GEOM=__cageo,
378 OPTION='CARA_TORSION',
379 GROUP_MA_INTE=args['GROUP_MA_INTE'],)
381 motscles['CARA_POUTRE']=_F(CARA_GEOM=__cageo,
385 OPTION='CARA_TORSION', )
386 __cator=POST_ELEM(MODELE=__nomoth,
391 # --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
392 # --- CENTRE DE CISAILLEMENT/TORSION :
393 # ------------------------------
395 __cacis=POST_ELEM(MODELE=__nomoth,
397 CARA_POUTRE=_F(CARA_GEOM=__cator,
401 OPTION='CARA_CISAILLEMENT',), )
405 # ------------------------------------------------------------
406 # --- - CALCUL DE L INERTIE DE GAUCHISSEMENT PAR RESOLUTION DE -
407 # --- - LAPLACIEN(OMEGA) = 0 DANS LA SECTION -
408 # --- - AVEC D(OMEGA)/D(N) = Z*NY-Y*NZ SUR LE -
409 # --- - CONTOUR DE LA SECTION -
410 # --- - NY ET NZ SONT LES COMPOSANTES DU VECTEUR N NORMAL -
411 # --- - A CE CONTOUR -
412 # --- - ET SOMME_S(OMEGA.DS) = 0 -
413 # --- - OMEGA EST LA FONCTION DE GAUCHISSEMENT -
414 # --- - L INERTIE DE GAUCHISSEMENT EST SOMME_S(OMEGA**2.DS) -
415 # ------------------------------------------------------------
417 # --- CREATION D UN MAILLAGE DONT LES COORDONNEES SONT EXPRIMEES
418 # --- DANS LE REPERE PRINCIPAL D INERTIE MAIS AVEC COMME ORIGINE
419 # --- LE CENTRE DE TORSION DE LA SECTION, ON VA DONC UTILISER
420 # --- LE MAILLAGE DE NOM NOMAPI DONT LES COORDONNEES SONT
421 # --- EXPRIMEES DANS LE REPERE PRINCIPAL D'INERTIE, L'ORIGINE
422 # --- ETANT LE CENTRE DE GRAVITE DE LA SECTION (QUI EST DONC
426 __nomapt=CREA_MAILLAGE(MAILLAGE=__nomapi,
427 REPERE=_F(TABLE=__cacis,
428 NOM_ORIG='TORSION',) )
430 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
431 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
432 # ------------------------------------------------------
434 __nomot2=AFFE_MODELE(MAILLAGE=__nomapt,
436 PHENOMENE='THERMIQUE',
437 MODELISATION='PLAN', ) )
439 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
440 # ---------------------------------------------------------
442 __chmat2=AFFE_MATERIAU(MAILLAGE=__nomapt,
446 # --- POUR LE CALCUL DE L INERTIE DE GAUCHISSEMENT, ON VA DEFINIR
447 # --- LA COMPOSANTE SELON Y DU FLUX A IMPOSER SUR LE CONTOUR
448 # --- PAR UNE FONCTION EGALE A -X :
449 # ---------------------------
451 __fnsec3=DEFI_FONCTION(NOM_PARA='X',
452 VALE=(0.,0.,10.,-10.),
453 PROL_DROITE='LINEAIRE',
454 PROL_GAUCHE='LINEAIRE',
457 # --- POUR LE CALCUL DE L INERTIE DE GAUCHISSEMENT, ON VA DEFINIR
458 # --- LA COMPOSANTE SELON X DU FLUX A IMPOSER SUR LE CONTOUR
459 # --- PAR UNE FONCTION EGALE A Y :
460 # --------------------------
462 __fnsec4=DEFI_FONCTION(NOM_PARA='Y',
463 VALE=(0.,0.,10.,10.),
464 PROL_DROITE='LINEAIRE',
465 PROL_GAUCHE='LINEAIRE',
468 # --- DANS LE BUT D IMPOSER LA RELATION LINEAIRE ENTRE DDLS
469 # --- SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
470 # --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
471 # --- N = 0, N ETANT L EFFORT NORMAL)
472 # --- ON CALCULE LE VECTEUR DE CHARGEMENT DU A UN TERME SOURCE EGAL
473 # --- A 1., LES TERMES DE CE VECTEUR SONT EGAUX A
474 # --- SOMME_SECTION(NI.DS) ET SONT DONC LES COEFFICIENTS DE
475 # --- LA RELATION LINEAIRE A IMPOSER.
476 # --- ON DEFINIT DONC UN CHARGEMENT DU A UN TERME SOURCE EGAL A 1 :
477 # -----------------------------------------------------------
479 __chart4=AFFE_CHAR_THER(MODELE=__nomot2,
480 SOURCE=_F(TOUT='OUI',
483 # --- ON CALCULE LE VECT_ELEM DU AU CHARGEMENT PRECEDENT
484 # --- IL S AGIT DES VECTEURS ELEMENTAIRES DONT LE TERME
485 # --- AU NOEUD COURANT I EST EGAL A SOMME_SECTION(NI.DS) :
486 # --------------------------------------------------
488 __vecel=CALC_VECT_ELEM(CHARGE=__chart4,
492 # --- ON CALCULE LE MATR_ELEM DES MATRICES ELEMENTAIRES
493 # --- DE CONDUCTIVITE UNIQUEMENT POUR GENERER LE NUME_DDL
494 # --- SUR-LEQUEL S APPUIERA LE CHAMNO UTILISE POUR ECRIRE LA
495 # --- RELATION LINEAIRE ENTRE DDLS :
496 # ----------------------------
498 __matel=CALC_MATR_ELEM(MODELE=__nomot2,
503 # --- ON DEFINIT LE NUME_DDL ASSOCIE AU MATR_ELEM DEFINI
504 # --- PRECEDEMMENT POUR CONSTRUIRE LE CHAMNO UTILISE POUR ECRIRE LA
505 # --- RELATION LINEAIRE ENTRE DDLS :
506 # ----------------------------
508 __numddl=NUME_DDL(MATR_RIGI=__matel,
511 # --- ON CONSTRUIT LE CHAMNO QUI VA ETRE UTILISE POUR ECRIRE LA
512 # --- RELATION LINEAIRE ENTRE DDLS :
513 # ----------------------------
515 __chamno=ASSE_VECTEUR(VECT_ELEM=__vecel,
518 # --- ON IMPOSE LA RELATION LINEAIRE ENTRE DDLS
519 # --- SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
520 # --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
521 # --- N = 0, N ETANT L EFFORT NORMAL)
522 # --- POUR IMPOSER CETTE RELATION ON PASSE PAR LIAISON_CHAMNO,
523 # --- LES TERMES DU CHAMNO (I.E. SOMME_SECTION(NI.DS))
524 # --- SONT LES COEFFICIENTS DE LA RELATION LINEAIRE :
525 # ---------------------------------------------
527 __chart5=AFFE_CHAR_THER(MODELE=__nomot2,
528 LIAISON_CHAMNO=_F(CHAM_NO=__chamno,
531 # --- LE CHARGEMENT EST UN FLUX REPARTI NORMAL AU CONTOUR
532 # --- DONT LES COMPOSANTES SONT +Z (I.E. +Y) ET -Y (I.E. -X)
533 # --- SELON LA DIRECTION NORMALE AU CONTOUR :
534 # -------------------------------------
536 __chart6=AFFE_CHAR_THER_F(MODELE=__nomot2,
537 FLUX_REP=_F(GROUP_MA=GROUP_MA_BORD,
539 FLUX_Y =__fnsec3,), )
541 # --- RESOLUTION DE LAPLACIEN(OMEGA) = 0
542 # --- AVEC D(OMEGA)/D(N) = Z*NY-Y*NZ SUR LE CONTOUR DE LA SECTION
543 # --- ET SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
544 # --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
545 # --- N = 0, N ETANT L EFFORT NORMAL) :
546 # -------------------------------
548 __tempe4=THER_LINEAIRE(MODELE=__nomot2,
550 EXCIT=(_F(CHARGE=__chart5,),
551 _F(CHARGE=__chart6,),),
552 SOLVEUR=_F(METHODE='LDLT',
554 STOP_SINGULIER='NON',), )
556 # --- CALCUL DE L INERTIE DE GAUCHISSEMENT :
557 # -------------------------------------
559 nomres=POST_ELEM(MODELE=__nomot2,
561 CARA_POUTRE=_F(CARA_GEOM=__cacis,
564 OPTION='CARA_GAUCHI'), )
568 # ==================================================================
569 # --- = CALCUL DE LA CONSTANTE DE TORSION SUR CHAQUE GROUPE =
570 # --- = ET DU RAYON DE TORSION SUR CHAQUE GROUPE =
571 # --- = DU CENTRE DE TORSION/CISAILLEMENT =
572 # --- = DES COEFFICIENTS DE CISAILLEMENT =
573 # ==================================================================
579 if GROUP_MA_BORD and GROUP_MA:
581 # --- CALCUL DES CARACTERISTIQUES GEOMETRIQUES DE LA SECTION :
582 # ------------------------------------------------------
584 if type(GROUP_MA_BORD)==types.StringType :
585 l_group_ma_bord=[GROUP_MA_BORD,]
587 l_group_ma_bord= GROUP_MA_BORD
588 if type(GROUP_MA)==types.StringType :
589 l_group_ma=[GROUP_MA,]
595 if args['NOEUD']!=None:
596 if type(args['NOEUD'])==types.StringType :
597 l_noeud=[args['NOEUD'],]
599 l_noeud= args['NOEUD']
601 if args['GROUP_NO']!=None:
602 collgrno=aster.getcolljev(string.ljust(__nomlma.nom,8)+'.GROUPENO')
603 nomnoe =aster.getvectjev(string.ljust(__nomlma.nom,8)+'.NOMNOE')
605 if type(args['GROUP_NO'])==types.StringType :
606 l_gr_no=[args['GROUP_NO'],]
608 l_gr_no= args['GROUP_NO']
610 l_nu_no =l_nu_no+list(collgrno[string.ljust(grno,8)])
611 l_noeud =[nomnoe[no_i-1] for no_i in l_nu_no]
613 if len(l_group_ma)!=len(l_group_ma_bord):
614 UTMESS('F','POUTRE0_1')
615 if l_noeud!=None and (len(l_group_ma)!=len(l_noeud)):
616 UTMESS('F','POUTRE0_2')
619 for i in range(0,len(l_group_ma_bord)):
621 # --- TRANSFORMATION DES GROUP_MA EN GROUP_NO SUR-LESQUELS
622 # --- ON POURRA APPLIQUER DES CONDITIONS DE TEMPERATURE IMPOSEE :
623 # ---------------------------------------------------------
625 __nomlma=DEFI_GROUP(reuse=__nomlma,
627 CREA_GROUP_NO=_F(GROUP_MA=l_group_ma_bord[i],) )
630 # --- CREATION D UN MAILLAGE IDENTIQUE AU PREMIER A CECI PRES
631 # --- QUE LES COORDONNEES SONT EXPRIMEES DANS LE REPERE PRINCIPAL
632 # --- D INERTIE DONT L ORIGINE EST LE CENTRE DE GRAVITE DE LA SECTION :
633 # ---------------------------------------------------------------
635 __nomapi=CREA_MAILLAGE(MAILLAGE=__nomlma,
636 REPERE=_F(TABLE=__cageo,
638 GROUP_MA=l_group_ma[i], ), )
640 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
641 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
642 # ------------------------------------------------------
644 __nomoth=AFFE_MODELE(MAILLAGE=__nomapi,
645 AFFE=_F(GROUP_MA=l_group_ma[i],
646 PHENOMENE='THERMIQUE',
647 MODELISATION='PLAN', ) )
649 # --- POUR LA CONSTRUCTION DU LAPLACIEN, ON DEFINIT UN
650 # --- PSEUDO-MATERIAU DONT LES CARACTERISTIQUES THERMIQUES SONT :
651 # --- LAMBDA = 1, RHO*CP = 0 :
652 # ----------------------
654 __nomath=DEFI_MATERIAU(THER=_F(LAMBDA=1.0,
657 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
658 # ---------------------------------------------------------
660 __chmath=AFFE_MATERIAU(MAILLAGE=__nomapi,
665 # ------------------------------------------------------------
666 # --- - CALCUL DE LA CONSTANTE DE TORSION PAR RESOLUTION -
667 # --- - D UN LAPLACIEN AVEC UN TERME SOURCE EGAL A -2 -
668 # --- - L INCONNUE ETANT NULLE SUR LE CONTOUR DE LA SECTION : -
669 # --- - LAPLACIEN(PHI) = -2 DANS LA SECTION -
670 # --- - PHI = 0 SUR LE CONTOUR : -
671 # ------------------------------------------------------------
673 # --- ON IMPOSE LA VALEUR 0 A L INCONNUE SCALAIRE SUR LE CONTOUR
675 # --- ET ON A UN TERME SOURCE EGAL A -2 DANS TOUTE LA SECTION :
676 # -------------------------------------------------------
678 __chart1=AFFE_CHAR_THER(MODELE=__nomoth,
679 TEMP_IMPO=_F(GROUP_NO=l_group_ma_bord[i],
681 SOURCE=_F(TOUT='OUI',
684 # --- RESOLUTION DE LAPLACIEN(PHI) = -2
685 # --- AVEC PHI = 0 SUR LE CONTOUR :
686 # ----------------------------------------
688 __tempe1=THER_LINEAIRE(MODELE=__nomoth,
690 EXCIT=_F(CHARGE=__chart1, ),
691 SOLVEUR=_F(STOP_SINGULIER='NON',) )
694 # ----------------------------------------------
695 # --- - CALCUL DU CENTRE DE TORSION/CISAILLEMENT -
696 # --- - ET DES COEFFICIENTS DE CISAILLEMENT : -
697 # ----------------------------------------------
699 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
700 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
701 # --- PAR UNE FONCTION EGALE A Y :
702 # --------------------------
704 __fnsec1=DEFI_FONCTION(NOM_PARA='X',
705 VALE=(0.,0.,10.,10.),
706 PROL_DROITE='LINEAIRE',
707 PROL_GAUCHE='LINEAIRE', )
709 __fnsec0=DEFI_CONSTANTE(VALE=0.,)
711 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
712 # --- DE LAPLACE EST PRIS EGAL A Y DANS TOUTE LA SECTION :
713 # --------------------------------------------------
715 __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
716 TEMP_IMPO=_F(NOEUD=l_noeud[i],
718 SOURCE=_F(TOUT='OUI',
721 # --- RESOLUTION DE LAPLACIEN(PHI) = -Y
722 # --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
723 # ------------------------------------------------
725 __tempe2=THER_LINEAIRE(MODELE=__nomoth,
727 EXCIT=_F(CHARGE=__chart2, ),
728 SOLVEUR=_F(STOP_SINGULIER='NON',) )
730 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
731 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
732 # --- PAR UNE FONCTION EGALE A Z :
733 # --------------------------
735 __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
736 VALE=(0.,0.,10.,10.),
737 PROL_DROITE='LINEAIRE',
738 PROL_GAUCHE='LINEAIRE', )
740 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
741 # --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
742 # --------------------------------------------------
744 __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
745 TEMP_IMPO=_F(NOEUD=l_noeud[i],
747 SOURCE=_F(TOUT='OUI',
750 # --- RESOLUTION DE LAPLACIEN(PHI) = -Z
751 # --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
752 # ------------------------------------------------
754 __tempe3=THER_LINEAIRE(MODELE=__nomoth,
756 EXCIT=_F(CHARGE=__chart3, ),
757 SOLVEUR=_F(STOP_SINGULIER='NON',) )
759 # --- CALCUL DU RAYON DE TORSION :
760 # --------------------------
762 # CALCUL DU RAYON DE TORSION EXTERNE : rtext
764 __tempe1=CALC_ELEM(reuse=__tempe1,
769 OPTION='FLUX_ELNO_TEMP',
772 __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
773 DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_bord[i]),
776 __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
779 NOM_CHAM='FLUX_ELNO_TEMP',
781 NOM_CMP=('FLUX','FLUY'),
782 OPERATION='MOYENNE'))
784 __m1=abs(__flun['TRAC_NOR',3])
785 __m2=abs(__flun['TRAC_NOR',4])
786 __rtext=max(__m1,__m2)
788 # CALCUL DU RAYON DE TORSION : rt
789 # rt = max ( rtext , 2*AIRE(TROU)/L(TROU) )
791 if args.has_key('GROUP_MA_INTE'):
792 if args['GROUP_MA_INTE'] != None :
793 if type(args['GROUP_MA_INTE'])==types.StringType :
794 l_group_ma_inte=[args['GROUP_MA_INTE'],]
796 l_group_ma_inte=args['GROUP_MA_INTE']
797 for j in range(0,len(l_group_ma_inte)):
798 __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
799 DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_inte[j]),
801 __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
804 NOM_CHAM='FLUX_ELNO_TEMP',
806 NOM_CMP=('FLUX','FLUY'),
807 OPERATION='MOYENNE'))
808 __m1=(abs(__flun['TRAC_NOR',3])+abs(__flun['TRAC_NOR',4]))/2.
814 # --- CALCUL DE LA CONSTANTE DE TORSION :
815 # ---------------------------------
817 __catp1=POST_ELEM(MODELE=__nomoth,
819 CARA_POUTRE=_F(CARA_GEOM=__catp2,
822 GROUP_MA=l_group_ma[i],
823 OPTION='CARA_TORSION' ), )
825 # --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
826 # --- CENTRE DE CISAILLEMENT/TORSION :
827 # ------------------------------
829 __catp2=POST_ELEM(MODELE=__nomoth,
831 CARA_POUTRE=_F(CARA_GEOM=__catp1,
834 GROUP_MA=l_group_ma[i],
835 LONGUEUR=args['LONGUEUR'],
836 MATERIAU=args['MATERIAU'],
837 LIAISON =args['LIAISON'],
838 OPTION='CARA_CISAILLEMENT' ), )
839 IMPR_TABLE(TABLE=__catp2)
840 dprod = __catp2.EXTR_TABLE().dict_CREA_TABLE()
841 nomres = CREA_TABLE(**dprod)
842 if not GROUP_MA_BORD :
843 nomres=POST_ELEM(MODELE=__nomamo,
846 IMPR_TABLE(TABLE=nomres)