1 #@ MODIF macr_cara_poutre_ops Macro DATE 27/02/2006 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
29 from Utilitai.Utmess import UTMESS
31 # On importe les definitions des commandes a utiliser dans la macro
32 # Le nom de la variable doit etre obligatoirement le nom de la commande
33 LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
34 DEFI_GROUP =self.get_cmd('DEFI_GROUP')
35 CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
36 AFFE_MODELE =self.get_cmd('AFFE_MODELE')
37 DEFI_MATERIAU =self.get_cmd('DEFI_MATERIAU')
38 AFFE_MATERIAU =self.get_cmd('AFFE_MATERIAU')
39 DEFI_FONCTION =self.get_cmd('DEFI_FONCTION')
40 DEFI_CONSTANTE =self.get_cmd('DEFI_CONSTANTE')
41 AFFE_CHAR_THER =self.get_cmd('AFFE_CHAR_THER')
42 AFFE_CHAR_THER_F=self.get_cmd('AFFE_CHAR_THER_F')
43 THER_LINEAIRE =self.get_cmd('THER_LINEAIRE')
44 CALC_VECT_ELEM =self.get_cmd('CALC_VECT_ELEM')
45 CALC_MATR_ELEM =self.get_cmd('CALC_MATR_ELEM')
46 NUME_DDL =self.get_cmd('NUME_DDL')
47 ASSE_VECTEUR =self.get_cmd('ASSE_VECTEUR')
48 POST_ELEM =self.get_cmd('POST_ELEM')
49 CALC_ELEM =self.get_cmd('CALC_ELEM')
50 INTE_MAIL_2D =self.get_cmd('INTE_MAIL_2D')
51 POST_RELEVE_T =self.get_cmd('POST_RELEVE_T')
52 IMPR_TABLE =self.get_cmd('IMPR_TABLE')
53 CREA_TABLE =self.get_cmd('CREA_TABLE')
54 # La macro compte pour 1 dans la numerotation des commandes
57 # Le concept sortant (de type table_sdaster) est nommé 'nomres' dans
58 # le contexte de la macro
60 self.DeclareOut('nomres',self.sd)
62 # if GROUP_MA_BORD and GROUP_MA:
64 # UTMESS('F', "MACR_CARA_POUTRE", "Avec GROUP_MA, il faut obligatoirement preciser LIAISON, LONGUEUR ET MATERIAU")
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.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=__cageo,
361 OPTION='CARA_TORSION',
362 GROUP_MA_INTE=args['GROUP_MA_INTE'],)
364 motscles['CARA_POUTRE']=_F(CARA_GEOM=__cageo,
368 OPTION='CARA_TORSION', )
369 __cator=POST_ELEM(MODELE=__nomoth,
374 # --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
375 # --- CENTRE DE CISAILLEMENT/TORSION :
376 # ------------------------------
378 __cacis=POST_ELEM(MODELE=__nomoth,
380 CARA_POUTRE=_F(CARA_GEOM=__cator,
384 OPTION='CARA_CISAILLEMENT',), )
388 # ------------------------------------------------------------
389 # --- - CALCUL DE L INERTIE DE GAUCHISSEMENT PAR RESOLUTION DE -
390 # --- - LAPLACIEN(OMEGA) = 0 DANS LA SECTION -
391 # --- - AVEC D(OMEGA)/D(N) = Z*NY-Y*NZ SUR LE -
392 # --- - CONTOUR DE LA SECTION -
393 # --- - NY ET NZ SONT LES COMPOSANTES DU VECTEUR N NORMAL -
394 # --- - A CE CONTOUR -
395 # --- - ET SOMME_S(OMEGA.DS) = 0 -
396 # --- - OMEGA EST LA FONCTION DE GAUCHISSEMENT -
397 # --- - L INERTIE DE GAUCHISSEMENT EST SOMME_S(OMEGA**2.DS) -
398 # ------------------------------------------------------------
400 # --- CREATION D UN MAILLAGE DONT LES COORDONNEES SONT EXPRIMEES
401 # --- DANS LE REPERE PRINCIPAL D INERTIE MAIS AVEC COMME ORIGINE
402 # --- LE CENTRE DE TORSION DE LA SECTION, ON VA DONC UTILISER
403 # --- LE MAILLAGE DE NOM NOMAPI DONT LES COORDONNEES SONT
404 # --- EXPRIMEES DANS LE REPERE PRINCIPAL D'INERTIE, L'ORIGINE
405 # --- ETANT LE CENTRE DE GRAVITE DE LA SECTION (QUI EST DONC
409 __nomapt=CREA_MAILLAGE(MAILLAGE=__nomapi,
410 REPERE=_F(TABLE=__cacis,
411 NOM_ORIG='TORSION',) )
413 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
414 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
415 # ------------------------------------------------------
417 __nomot2=AFFE_MODELE(MAILLAGE=__nomapt,
419 PHENOMENE='THERMIQUE',
420 MODELISATION='PLAN', ) )
422 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
423 # ---------------------------------------------------------
425 __chmat2=AFFE_MATERIAU(MAILLAGE=__nomapt,
429 # --- POUR LE CALCUL DE L INERTIE DE GAUCHISSEMENT, ON VA DEFINIR
430 # --- LA COMPOSANTE SELON Y DU FLUX A IMPOSER SUR LE CONTOUR
431 # --- PAR UNE FONCTION EGALE A -X :
432 # ---------------------------
434 __fnsec3=DEFI_FONCTION(NOM_PARA='X',
435 VALE=(0.,0.,10.,-10.),
436 PROL_DROITE='LINEAIRE',
437 PROL_GAUCHE='LINEAIRE',
440 # --- POUR LE CALCUL DE L INERTIE DE GAUCHISSEMENT, ON VA DEFINIR
441 # --- LA COMPOSANTE SELON X DU FLUX A IMPOSER SUR LE CONTOUR
442 # --- PAR UNE FONCTION EGALE A Y :
443 # --------------------------
445 __fnsec4=DEFI_FONCTION(NOM_PARA='Y',
446 VALE=(0.,0.,10.,10.),
447 PROL_DROITE='LINEAIRE',
448 PROL_GAUCHE='LINEAIRE',
451 # --- DANS LE BUT D IMPOSER LA RELATION LINEAIRE ENTRE DDLS
452 # --- SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
453 # --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
454 # --- N = 0, N ETANT L EFFORT NORMAL)
455 # --- ON CALCULE LE VECTEUR DE CHARGEMENT DU A UN TERME SOURCE EGAL
456 # --- A 1., LES TERMES DE CE VECTEUR SONT EGAUX A
457 # --- SOMME_SECTION(NI.DS) ET SONT DONC LES COEFFICIENTS DE
458 # --- LA RELATION LINEAIRE A IMPOSER.
459 # --- ON DEFINIT DONC UN CHARGEMENT DU A UN TERME SOURCE EGAL A 1 :
460 # -----------------------------------------------------------
462 __chart4=AFFE_CHAR_THER(MODELE=__nomot2,
463 SOURCE=_F(TOUT='OUI',
466 # --- ON CALCULE LE VECT_ELEM DU AU CHARGEMENT PRECEDENT
467 # --- IL S AGIT DES VECTEURS ELEMENTAIRES DONT LE TERME
468 # --- AU NOEUD COURANT I EST EGAL A SOMME_SECTION(NI.DS) :
469 # --------------------------------------------------
471 __vecel=CALC_VECT_ELEM(CHARGE=__chart4,
475 # --- ON CALCULE LE MATR_ELEM DES MATRICES ELEMENTAIRES
476 # --- DE CONDUCTIVITE UNIQUEMENT POUR GENERER LE NUME_DDL
477 # --- SUR-LEQUEL S APPUIERA LE CHAMNO UTILISE POUR ECRIRE LA
478 # --- RELATION LINEAIRE ENTRE DDLS :
479 # ----------------------------
481 __matel=CALC_MATR_ELEM(MODELE=__nomot2,
486 # --- ON DEFINIT LE NUME_DDL ASSOCIE AU MATR_ELEM DEFINI
487 # --- PRECEDEMMENT POUR CONSTRUIRE LE CHAMNO UTILISE POUR ECRIRE LA
488 # --- RELATION LINEAIRE ENTRE DDLS :
489 # ----------------------------
491 __numddl=NUME_DDL(MATR_RIGI=__matel,
494 # --- ON CONSTRUIT LE CHAMNO QUI VA ETRE UTILISE POUR ECRIRE LA
495 # --- RELATION LINEAIRE ENTRE DDLS :
496 # ----------------------------
498 __chamno=ASSE_VECTEUR(VECT_ELEM=__vecel,
501 # --- ON IMPOSE LA RELATION LINEAIRE ENTRE DDLS
502 # --- SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
503 # --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
504 # --- N = 0, N ETANT L EFFORT NORMAL)
505 # --- POUR IMPOSER CETTE RELATION ON PASSE PAR LIAISON_CHAMNO,
506 # --- LES TERMES DU CHAMNO (I.E. SOMME_SECTION(NI.DS))
507 # --- SONT LES COEFFICIENTS DE LA RELATION LINEAIRE :
508 # ---------------------------------------------
510 __chart5=AFFE_CHAR_THER(MODELE=__nomot2,
511 LIAISON_CHAMNO=_F(CHAM_NO=__chamno,
514 # --- LE CHARGEMENT EST UN FLUX REPARTI NORMAL AU CONTOUR
515 # --- DONT LES COMPOSANTES SONT +Z (I.E. +Y) ET -Y (I.E. -X)
516 # --- SELON LA DIRECTION NORMALE AU CONTOUR :
517 # -------------------------------------
519 __chart6=AFFE_CHAR_THER_F(MODELE=__nomot2,
520 FLUX_REP=_F(GROUP_MA=GROUP_MA_BORD,
522 FLUX_Y =__fnsec3,), )
524 # --- RESOLUTION DE LAPLACIEN(OMEGA) = 0
525 # --- AVEC D(OMEGA)/D(N) = Z*NY-Y*NZ SUR LE CONTOUR DE LA SECTION
526 # --- ET SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
527 # --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
528 # --- N = 0, N ETANT L EFFORT NORMAL) :
529 # -------------------------------
531 __tempe4=THER_LINEAIRE(MODELE=__nomot2,
533 EXCIT=(_F(CHARGE=__chart5,),
534 _F(CHARGE=__chart6,),),
535 SOLVEUR=_F(METHODE='LDLT',
537 STOP_SINGULIER='NON',), )
539 # --- CALCUL DE L INERTIE DE GAUCHISSEMENT :
540 # -------------------------------------
542 nomres=POST_ELEM(MODELE=__nomot2,
544 CARA_POUTRE=_F(CARA_GEOM=__cacis,
547 OPTION='CARA_GAUCHI'), )
551 # ==================================================================
552 # --- = CALCUL DE LA CONSTANTE DE TORSION SUR CHAQUE GROUPE =
553 # --- = ET DU RAYON DE TORSION SUR CHAQUE GROUPE =
554 # --- = DU CENTRE DE TORSION/CISAILLEMENT =
555 # --- = DES COEFFICIENTS DE CISAILLEMENT =
556 # ==================================================================
562 if GROUP_MA_BORD and GROUP_MA:
564 # --- CALCUL DES CARACTERISTIQUES GEOMETRIQUES DE LA SECTION :
565 # ------------------------------------------------------
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):
583 UTMESS('F', "MACR_CARA_POUTRE", "GROUP_MA et GROUP_MA_BORD incoherents")
584 if args.has_key('NOEUD') and (len(l_group_ma)!=len(l_noeud)):
585 UTMESS('F', "MACR_CARA_POUTRE", "GROUP_MA et NOEUD incoherents")
588 for i in range(0,len(l_group_ma_bord)):
590 # --- TRANSFORMATION DES GROUP_MA EN GROUP_NO SUR-LESQUELS
591 # --- ON POURRA APPLIQUER DES CONDITIONS DE TEMPERATURE IMPOSEE :
592 # ---------------------------------------------------------
594 __nomlma=DEFI_GROUP(reuse=__nomlma,
596 CREA_GROUP_NO=_F(GROUP_MA=l_group_ma_bord[i],) )
599 # --- CREATION D UN MAILLAGE IDENTIQUE AU PREMIER A CECI PRES
600 # --- QUE LES COORDONNEES SONT EXPRIMEES DANS LE REPERE PRINCIPAL
601 # --- D INERTIE DONT L ORIGINE EST LE CENTRE DE GRAVITE DE LA SECTION :
602 # ---------------------------------------------------------------
604 __nomapi=CREA_MAILLAGE(MAILLAGE=__nomlma,
605 REPERE=_F(TABLE=__cageo,
607 GROUP_MA=l_group_ma[i], ), )
609 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
610 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
611 # ------------------------------------------------------
613 __nomoth=AFFE_MODELE(MAILLAGE=__nomapi,
614 AFFE=_F(GROUP_MA=l_group_ma[i],
615 PHENOMENE='THERMIQUE',
616 MODELISATION='PLAN', ) )
618 # --- POUR LA CONSTRUCTION DU LAPLACIEN, ON DEFINIT UN
619 # --- PSEUDO-MATERIAU DONT LES CARACTERISTIQUES THERMIQUES SONT :
620 # --- LAMBDA = 1, RHO*CP = 0 :
621 # ----------------------
623 __nomath=DEFI_MATERIAU(THER=_F(LAMBDA=1.0,
626 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
627 # ---------------------------------------------------------
629 __chmath=AFFE_MATERIAU(MAILLAGE=__nomapi,
634 # ------------------------------------------------------------
635 # --- - CALCUL DE LA CONSTANTE DE TORSION PAR RESOLUTION -
636 # --- - D UN LAPLACIEN AVEC UN TERME SOURCE EGAL A -2 -
637 # --- - L INCONNUE ETANT NULLE SUR LE CONTOUR DE LA SECTION : -
638 # --- - LAPLACIEN(PHI) = -2 DANS LA SECTION -
639 # --- - PHI = 0 SUR LE CONTOUR : -
640 # ------------------------------------------------------------
642 # --- ON IMPOSE LA VALEUR 0 A L INCONNUE SCALAIRE SUR LE CONTOUR
644 # --- ET ON A UN TERME SOURCE EGAL A -2 DANS TOUTE LA SECTION :
645 # -------------------------------------------------------
647 __chart1=AFFE_CHAR_THER(MODELE=__nomoth,
648 TEMP_IMPO=_F(GROUP_NO=l_group_ma_bord[i],
650 SOURCE=_F(TOUT='OUI',
653 # --- RESOLUTION DE LAPLACIEN(PHI) = -2
654 # --- AVEC PHI = 0 SUR LE CONTOUR :
655 # ----------------------------------------
657 __tempe1=THER_LINEAIRE(MODELE=__nomoth,
659 EXCIT=_F(CHARGE=__chart1, ),
660 SOLVEUR=_F(STOP_SINGULIER='NON',) )
663 # ----------------------------------------------
664 # --- - CALCUL DU CENTRE DE TORSION/CISAILLEMENT -
665 # --- - ET DES COEFFICIENTS DE CISAILLEMENT : -
666 # ----------------------------------------------
668 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
669 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
670 # --- PAR UNE FONCTION EGALE A Y :
671 # --------------------------
673 __fnsec1=DEFI_FONCTION(NOM_PARA='X',
674 VALE=(0.,0.,10.,10.),
675 PROL_DROITE='LINEAIRE',
676 PROL_GAUCHE='LINEAIRE', )
678 __fnsec0=DEFI_CONSTANTE(VALE=0.,)
680 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
681 # --- DE LAPLACE EST PRIS EGAL A Y DANS TOUTE LA SECTION :
682 # --------------------------------------------------
684 __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
685 TEMP_IMPO=_F(NOEUD=l_noeud[i],
687 SOURCE=_F(TOUT='OUI',
690 # --- RESOLUTION DE LAPLACIEN(PHI) = -Y
691 # --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
692 # ------------------------------------------------
694 __tempe2=THER_LINEAIRE(MODELE=__nomoth,
696 EXCIT=_F(CHARGE=__chart2, ),
697 SOLVEUR=_F(STOP_SINGULIER='NON',) )
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 Z :
702 # --------------------------
704 __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
705 VALE=(0.,0.,10.,10.),
706 PROL_DROITE='LINEAIRE',
707 PROL_GAUCHE='LINEAIRE', )
709 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
710 # --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
711 # --------------------------------------------------
713 __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
714 TEMP_IMPO=_F(NOEUD=l_noeud[i],
716 SOURCE=_F(TOUT='OUI',
719 # --- RESOLUTION DE LAPLACIEN(PHI) = -Z
720 # --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
721 # ------------------------------------------------
723 __tempe3=THER_LINEAIRE(MODELE=__nomoth,
725 EXCIT=_F(CHARGE=__chart3, ),
726 SOLVEUR=_F(STOP_SINGULIER='NON',) )
728 # --- CALCUL DU RAYON DE TORSION :
729 # --------------------------
731 # CALCUL DU RAYON DE TORSION EXTERNE : rtext
733 __tempe1=CALC_ELEM(reuse=__tempe1,
738 OPTION='FLUX_ELNO_TEMP',
741 __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
742 DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_bord[i]),
745 __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
748 NOM_CHAM='FLUX_ELNO_TEMP',
750 NOM_CMP=('FLUX','FLUY'),
751 OPERATION='MOYENNE'))
753 __m1=abs(__flun['TRAC_NOR',3])
754 __m2=abs(__flun['TRAC_NOR',4])
755 __rtext=max(__m1,__m2)
757 # CALCUL DU RAYON DE TORSION : rt
758 # rt = max ( rtext , 2*AIRE(TROU)/L(TROU) )
760 if args.has_key('GROUP_MA_INTE'):
761 if args['GROUP_MA_INTE'] != None :
762 if type(args['GROUP_MA_INTE'])==types.StringType :
763 l_group_ma_inte=[args['GROUP_MA_INTE'],]
765 l_group_ma_inte=args['GROUP_MA_INTE']
766 for j in range(0,len(l_group_ma_inte)):
767 __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
768 DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_inte[j]),
770 __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
773 NOM_CHAM='FLUX_ELNO_TEMP',
775 NOM_CMP=('FLUX','FLUY'),
776 OPERATION='MOYENNE'))
777 __m1=(abs(__flun['TRAC_NOR',3])+abs(__flun['TRAC_NOR',4]))/2.
783 # --- CALCUL DE LA CONSTANTE DE TORSION :
784 # ---------------------------------
786 __catp1=POST_ELEM(MODELE=__nomoth,
788 CARA_POUTRE=_F(CARA_GEOM=__catp2,
791 GROUP_MA=l_group_ma[i],
792 OPTION='CARA_TORSION' ), )
794 # --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
795 # --- CENTRE DE CISAILLEMENT/TORSION :
796 # ------------------------------
798 __catp2=POST_ELEM(MODELE=__nomoth,
800 CARA_POUTRE=_F(CARA_GEOM=__catp1,
803 GROUP_MA=l_group_ma[i],
804 LONGUEUR=args['LONGUEUR'],
805 MATERIAU=args['MATERIAU'],
806 LIAISON =args['LIAISON'],
807 OPTION='CARA_CISAILLEMENT' ), )
808 IMPR_TABLE(TABLE=__catp2)
809 dprod = __catp2.EXTR_TABLE().dict_CREA_TABLE()
810 nomres = CREA_TABLE(**dprod)
811 if not GROUP_MA_BORD :
812 nomres=POST_ELEM(MODELE=__nomamo,
815 IMPR_TABLE(TABLE=nomres)