]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA9/Macro/macr_cara_poutre_ops.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA9 / Macro / macr_cara_poutre_ops.py
1 #@ MODIF macr_cara_poutre_ops Macro  DATE 30/06/2008   AUTEUR FLEJOU J-L.FLEJOU 
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.
10 #
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.
15 #
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
21
22 def macr_cara_poutre_ops(self,MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
23                               GROUP_MA,ORIG_INER,**args):
24   """
25      Ecriture de la macro MACR_CARA_POUTRE
26   """
27   import types,string
28   from Accas import _F
29   import aster
30   from Utilitai.Utmess     import  UTMESS
31   ier=0
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
56   self.set_icmd(1)
57
58   # Le concept sortant (de type table_sdaster) est nommé 'nomres' dans le contexte de la macro
59   self.DeclareOut('nomres',self.sd)
60   #
61   if ( MAILLAGE != None ):
62       __nomlma=CREA_MAILLAGE(MAILLAGE=MAILLAGE)
63   elif ( args.has_key('UNITE') and args.has_key('FORMAT') ):
64       __nomlma=LIRE_MAILLAGE(UNITE=args['UNITE'],FORMAT=args['FORMAT'])
65   else:
66       assert False, "Erreur dans les options UNITE, FORMAT, MAILLAGE"
67
68   __nomamo=AFFE_MODELE(MAILLAGE=__nomlma,
69                        AFFE=_F(TOUT='OUI',
70                                PHENOMENE='MECANIQUE',
71                                MODELISATION='D_PLAN',),   )
72
73   __nomdma=DEFI_MATERIAU(ELAS=_F(E=1.0,NU=0.,RHO=1.0),)
74
75
76   __nomama=AFFE_MATERIAU(MAILLAGE=__nomlma,
77                          AFFE=_F(TOUT='OUI',
78                                  MATER=__nomdma,),  )
79
80
81 # --- CALCUL DES CARACTERISTIQUES GEOMETRIQUES DE LA SECTION :
82 #     ------------------------------------------------------
83
84   motsimps={}
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,
91                     CHAM_MATER=__nomama,
92                     CARA_GEOM=mfact    )
93 # nb  :  si GROUP_MA n existe pas : le mot clé est ignoré
94
95 #
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 #     ==================================================================
105
106   if GROUP_MA_BORD and not GROUP_MA:
107
108 # --- TRANSFORMATION DES GROUP_MA EN GROUP_NO SUR-LESQUELS
109 # --- ON POURRA APPLIQUER DES CONDITIONS DE TEMPERATURE IMPOSEE :
110 #     ---------------------------------------------------------
111      motscles={}
112      if type(GROUP_MA_BORD)==types.StringType:
113         motscles['CREA_GROUP_NO']=_F(GROUP_MA=GROUP_MA_BORD,)
114      else:
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,
119                          MAILLAGE=__nomlma,
120                          **motscles)
121
122
123
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 #     ---------------------------------------------------------------
128
129      __nomapi=CREA_MAILLAGE(MAILLAGE=__nomlma,
130                             REPERE=_F(TABLE=__cageo,
131                                       NOM_ORIG='CDG',  ),  )
132
133 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
134 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
135 #     ------------------------------------------------------
136
137      __nomoth=AFFE_MODELE(MAILLAGE=__nomapi,
138                           AFFE=_F(TOUT='OUI',
139                                   PHENOMENE='THERMIQUE',
140                                   MODELISATION='PLAN',), )
141
142 # --- POUR LA CONSTRUCTION DU LAPLACIEN, ON  DEFINIT UN
143 # --- PSEUDO-MATERIAU DONT LES CARACTERISTIQUES THERMIQUES SONT :
144 # --- LAMBDA = 1, RHO*CP = 0 :
145 #     ----------------------
146
147      __nomath=DEFI_MATERIAU(THER=_F(LAMBDA=1.0,RHO_CP=0.,),)
148
149 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
150 #     ---------------------------------------------------------
151
152      __chmath=AFFE_MATERIAU(MAILLAGE=__nomapi,
153                             AFFE=_F(TOUT='OUI',
154                                     MATER=__nomath,),   )
155
156 #
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 #     ------------------------------------------------------------
164 #
165 # --- ON IMPOSE LA VALEUR 0 A L INCONNUE SCALAIRE SUR LE CONTOUR
166 # --- DE LA SECTION
167 # --- ET ON A UN TERME SOURCE EGAL A -2 DANS TOUTE LA SECTION :
168 #     -------------------------------------------------------
169
170      motscles={}
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,
176                                              TEMP=0. ),
177                              SOURCE      =_F(TOUT='OUI',
178                                              SOUR=2.0),
179                              **motscles  )
180
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 #     -------------------------------------------------------
188
189      if args.has_key('GROUP_MA_INTE'):
190         lgmaint=args['GROUP_MA_INTE']
191         if lgmaint != None :
192            __tbaire=POST_ELEM(MODELE=__nomoth,
193                            AIRE_INTERNE=_F(GROUP_MA_BORD=args['GROUP_MA_INTE'],),  )
194
195            motscles={}
196            motscles['FLUX_REP']=[]
197
198            if type(lgmaint)==types.StringType:
199               motscles['FLUX_REP']=_F(GROUP_MA=args['GROUP_MA_INTE'],CARA_TORSION=__tbaire)
200            else:
201               motscles['FLUX_REP']=[]
202               for grma in lgmaint:
203                  motscles['FLUX_REP'].append(_F(GROUP_MA=grma,CARA_TORSION=__tbaire),)
204            __chart2=AFFE_CHAR_THER(MODELE=__nomoth,**motscles)
205
206 # --- RESOLUTION DE LAPLACIEN(PHI) = -2
207 # --- AVEC PHI = 0 SUR LE CONTOUR :
208 #     ----------------------------------------
209
210      motscles={}
211      motscles['EXCIT']=[_F(CHARGE=__chart1,),]
212      if args.has_key('GROUP_MA_INTE'):
213         if lgmaint != None :
214            motscles['EXCIT'].append(_F(CHARGE=__chart2,))
215      __tempe1=THER_LINEAIRE(MODELE=__nomoth,
216                             CHAM_MATER=__chmath,
217                             SOLVEUR=_F(STOP_SINGULIER='NON',),
218                             **motscles   )
219
220 #
221 #     ----------------------------------------------
222 # --- - CALCUL DU  CENTRE DE TORSION/CISAILLEMENT  -
223 # --- - ET DES COEFFICIENTS DE CISAILLEMENT :      -
224 #     ----------------------------------------------
225 #
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 #     --------------------------
230
231      __fnsec1=DEFI_FONCTION(NOM_PARA='X',
232                             VALE=(0.,0.,10.,10.),
233                             PROL_DROITE='LINEAIRE',
234                             PROL_GAUCHE='LINEAIRE',
235                            )
236
237      __fnsec0=DEFI_CONSTANTE(VALE=0.,)
238
239 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
240 # --- DE LAPLACE EST PRIS EGAL A Y DANS TOUTE LA SECTION :
241 #     --------------------------------------------------
242
243
244      motscles={}
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',
258                                          SOUR=__fnsec1,),
259                                **motscles   )
260
261 # --- RESOLUTION DE     LAPLACIEN(PHI) = -Y
262 # ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
263 #     ------------------------------------------------
264
265      __tempe2=THER_LINEAIRE(MODELE=__nomoth,
266                             CHAM_MATER=__chmath,
267                             EXCIT=_F(CHARGE=__chart2,),
268                             SOLVEUR=_F(STOP_SINGULIER='NON',),
269                            )
270
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 #     --------------------------
275
276      __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
277                             VALE=(0.,0.,10.,10.),
278                             PROL_DROITE='LINEAIRE',
279                             PROL_GAUCHE='LINEAIRE',
280                            )
281
282 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
283 # --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
284 #     --------------------------------------------------
285
286      motscles={}
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',
299                                          SOUR=__fnsec2,),
300                                **motscles)
301
302 # --- RESOLUTION DE     LAPLACIEN(PHI) = -Z
303 # ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
304 #     ------------------------------------------------
305
306      __tempe3=THER_LINEAIRE(MODELE=__nomoth,
307                             CHAM_MATER=__chmath,
308                             EXCIT=_F(CHARGE=__chart3,),
309                             SOLVEUR=_F(STOP_SINGULIER='NON',),
310                            )
311
312 # --- CALCUL DU RAYON DE TORSION :
313 #     --------------------------
314
315 #    CALCUL DU RAYON DE TORSION EXTERNE : rtext
316
317      __tempe1=CALC_ELEM(reuse=__tempe1,
318                        RESULTAT=__tempe1,
319                        MODELE=__nomoth,
320                        CHAM_MATER=__chmath,
321                        TOUT_ORDRE='OUI',
322                        OPTION='FLUX_ELNO_TEMP',
323                       )
324
325      __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
326                          DEFI_CHEMIN=_F(GROUP_MA=GROUP_MA_BORD),
327                          INFO=2,)
328
329      __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
330                              CHEMIN=__chem,
331                              RESULTAT=__tempe1,
332                              NOM_CHAM='FLUX_ELNO_TEMP',
333                              TRAC_NOR='OUI',
334                              NOM_CMP=('FLUX','FLUY'),
335                              OPERATION='MOYENNE'))
336
337      __m1=abs(__flun['TRAC_NOR',3])
338      __m2=abs(__flun['TRAC_NOR',4])
339      __rtext=max(__m1,__m2)
340
341  #    CALCUL DU RAYON DE TORSION : rt
342  #    rt = max ( rtext , 2*AIRE(TROU)/L(TROU) )
343
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'],]
348          else:
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]),
353                                INFO=2,)
354            __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
355                                           CHEMIN=__chem,
356                                           RESULTAT=__tempe1,
357                                           NOM_CHAM='FLUX_ELNO_TEMP',
358                                           TRAC_NOR='OUI',
359                                           NOM_CMP=('FLUX','FLUY'),
360                                           OPERATION='MOYENNE'))
361            __m1=(abs(__flun['TRAC_NOR',3])+abs(__flun['TRAC_NOR',4]))/2.
362            if __m1 > __rtext :
363              __rtext=__m1
364
365      __rt=__rtext
366
367 # --- CALCUL DE LA CONSTANTE DE TORSION :
368 #     ---------------------------------
369
370      motscles={}
371      if args.has_key('GROUP_MA_INTE'):
372         lgmaint=args['GROUP_MA_INTE']
373         if lgmaint != None :
374            motscles['CARA_POUTRE']=_F(CARA_GEOM=__cageo,
375                                    LAPL_PHI=__tempe1,
376                                    RT=__rt,
377                                    TOUT='OUI',
378                                    OPTION='CARA_TORSION',
379                                    GROUP_MA_INTE=args['GROUP_MA_INTE'],)
380         else:
381            motscles['CARA_POUTRE']=_F(CARA_GEOM=__cageo,
382                                     LAPL_PHI=__tempe1,
383                                     RT=__rt,
384                                     TOUT='OUI',
385                                     OPTION='CARA_TORSION',      )
386      __cator=POST_ELEM(MODELE=__nomoth,
387                        CHAM_MATER=__chmath,
388                        **motscles  )
389
390
391 # --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
392 # --- CENTRE DE CISAILLEMENT/TORSION :
393 #     ------------------------------
394
395      __cacis=POST_ELEM(MODELE=__nomoth,
396                        CHAM_MATER=__chmath,
397                        CARA_POUTRE=_F(CARA_GEOM=__cator,
398                                       LAPL_PHI_Y=__tempe2,
399                                       LAPL_PHI_Z=__tempe3,
400                                       TOUT='OUI',
401                                       OPTION='CARA_CISAILLEMENT',),  )
402
403
404 #
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 #     ------------------------------------------------------------
416 #
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
423 # --- A CHANGER)  :
424 #     ----------
425
426      __nomapt=CREA_MAILLAGE(MAILLAGE=__nomapi,
427                             REPERE=_F(TABLE=__cacis,
428                                       NOM_ORIG='TORSION',)  )
429
430 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
431 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
432 #     ------------------------------------------------------
433
434      __nomot2=AFFE_MODELE(MAILLAGE=__nomapt,
435                           AFFE=_F(TOUT='OUI',
436                                   PHENOMENE='THERMIQUE',
437                                   MODELISATION='PLAN', )  )
438
439 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
440 #     ---------------------------------------------------------
441
442      __chmat2=AFFE_MATERIAU(MAILLAGE=__nomapt,
443                             AFFE=_F(TOUT='OUI',
444                                     MATER=__nomath, ), )
445
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 #     ---------------------------
450
451      __fnsec3=DEFI_FONCTION(NOM_PARA='X',
452                             VALE=(0.,0.,10.,-10.),
453                             PROL_DROITE='LINEAIRE',
454                             PROL_GAUCHE='LINEAIRE',
455                            )
456
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 #     --------------------------
461
462      __fnsec4=DEFI_FONCTION(NOM_PARA='Y',
463                             VALE=(0.,0.,10.,10.),
464                             PROL_DROITE='LINEAIRE',
465                             PROL_GAUCHE='LINEAIRE',
466                            )
467
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 #     -----------------------------------------------------------
478
479      __chart4=AFFE_CHAR_THER(MODELE=__nomot2,
480                              SOURCE=_F(TOUT='OUI',
481                                        SOUR=1.0),  )
482
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 #     --------------------------------------------------
487
488      __vecel=CALC_VECT_ELEM(CHARGE=__chart4,
489                             OPTION='CHAR_THER'
490                             )
491
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 #     ----------------------------
497
498      __matel=CALC_MATR_ELEM(MODELE=__nomot2,
499                             CHAM_MATER=__chmat2,
500                             CHARGE=__chart4,
501                             OPTION='RIGI_THER',)
502
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 #     ----------------------------
507
508      __numddl=NUME_DDL(MATR_RIGI=__matel,
509                        METHODE='LDLT',    )
510
511 # --- ON CONSTRUIT LE CHAMNO QUI VA ETRE UTILISE POUR ECRIRE LA
512 # --- RELATION LINEAIRE ENTRE DDLS :
513 #     ----------------------------
514
515      __chamno=ASSE_VECTEUR(VECT_ELEM=__vecel,
516                            NUME_DDL=__numddl,    )
517
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 #     ---------------------------------------------
526
527      __chart5=AFFE_CHAR_THER(MODELE=__nomot2,
528                              LIAISON_CHAMNO=_F(CHAM_NO=__chamno,
529                                                COEF_IMPO=0.),    )
530
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 #     -------------------------------------
535
536      __chart6=AFFE_CHAR_THER_F(MODELE=__nomot2,
537                                FLUX_REP=_F(GROUP_MA=GROUP_MA_BORD,
538                                            FLUX_X  =__fnsec4,
539                                            FLUX_Y  =__fnsec3,),    )
540
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 #     -------------------------------
547
548      __tempe4=THER_LINEAIRE(MODELE=__nomot2,
549                             CHAM_MATER=__chmat2,
550                             EXCIT=(_F(CHARGE=__chart5,),
551                                    _F(CHARGE=__chart6,),),
552                             SOLVEUR=_F(METHODE='LDLT',
553                                        RENUM='SANS',
554                                        STOP_SINGULIER='NON',),   )
555
556 # --- CALCUL DE L INERTIE DE GAUCHISSEMENT :
557 #     -------------------------------------
558
559      nomres=POST_ELEM(MODELE=__nomot2,
560                       CHAM_MATER=__chmat2,
561                       CARA_POUTRE=_F(CARA_GEOM=__cacis,
562                                      LAPL_PHI=__tempe4,
563                                      TOUT='OUI',
564                                      OPTION='CARA_GAUCHI'),  )
565
566
567 #
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 #     ==================================================================
574
575
576 #
577
578
579   if GROUP_MA_BORD and GROUP_MA:
580
581 # --- CALCUL DES CARACTERISTIQUES GEOMETRIQUES DE LA SECTION :
582 #     ------------------------------------------------------
583
584      if type(GROUP_MA_BORD)==types.StringType :
585         l_group_ma_bord=[GROUP_MA_BORD,]
586      else:
587         l_group_ma_bord= GROUP_MA_BORD
588      if type(GROUP_MA)==types.StringType :
589         l_group_ma=[GROUP_MA,]
590      else:
591         l_group_ma= GROUP_MA
592
593      l_noeud=None
594
595      if args['NOEUD']!=None:
596        if type(args['NOEUD'])==types.StringType :
597           l_noeud=[args['NOEUD'],]
598        else:
599           l_noeud= args['NOEUD']
600
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')
604        l_nu_no =[]
605        if type(args['GROUP_NO'])==types.StringType :
606           l_gr_no=[args['GROUP_NO'],]
607        else:
608           l_gr_no= args['GROUP_NO']
609        for grno in l_gr_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]
612
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')
617
618      __catp2=__cageo
619      for i in range(0,len(l_group_ma_bord)):
620
621 # --- TRANSFORMATION DES GROUP_MA EN GROUP_NO SUR-LESQUELS
622 # --- ON POURRA APPLIQUER DES CONDITIONS DE TEMPERATURE IMPOSEE :
623 #     ---------------------------------------------------------
624
625         __nomlma=DEFI_GROUP(reuse=__nomlma,
626                             MAILLAGE=__nomlma,
627                             CREA_GROUP_NO=_F(GROUP_MA=l_group_ma_bord[i],)  )
628
629
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 #     ---------------------------------------------------------------
634
635         __nomapi=CREA_MAILLAGE(MAILLAGE=__nomlma,
636                                REPERE=_F(TABLE=__cageo,
637                                          NOM_ORIG='CDG',
638                                          GROUP_MA=l_group_ma[i],  ),  )
639
640 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
641 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
642 #     ------------------------------------------------------
643
644         __nomoth=AFFE_MODELE(MAILLAGE=__nomapi,
645                              AFFE=_F(GROUP_MA=l_group_ma[i],
646                                      PHENOMENE='THERMIQUE',
647                                      MODELISATION='PLAN',  )  )
648
649 # --- POUR LA CONSTRUCTION DU LAPLACIEN, ON  DEFINIT UN
650 # --- PSEUDO-MATERIAU DONT LES CARACTERISTIQUES THERMIQUES SONT :
651 # --- LAMBDA = 1, RHO*CP = 0 :
652 #     ----------------------
653
654         __nomath=DEFI_MATERIAU(THER=_F(LAMBDA=1.0,
655                                        RHO_CP=0.0,  ),  )
656
657 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
658 #     ---------------------------------------------------------
659
660         __chmath=AFFE_MATERIAU(MAILLAGE=__nomapi,
661                                AFFE=_F(TOUT='OUI',
662                                        MATER=__nomath ),  )
663
664 #
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 #     ------------------------------------------------------------
672 #
673 # --- ON IMPOSE LA VALEUR 0 A L INCONNUE SCALAIRE SUR LE CONTOUR
674 # --- DE LA SECTION
675 # --- ET ON A UN TERME SOURCE EGAL A -2 DANS TOUTE LA SECTION :
676 #     -------------------------------------------------------
677
678         __chart1=AFFE_CHAR_THER(MODELE=__nomoth,
679                                 TEMP_IMPO=_F(GROUP_NO=l_group_ma_bord[i],
680                                              TEMP=0.0       ),
681                                 SOURCE=_F(TOUT='OUI',
682                                           SOUR=2.0       )          )
683
684 # --- RESOLUTION DE     LAPLACIEN(PHI) = -2
685 # ---              AVEC PHI = 0 SUR LE CONTOUR :
686 #     ----------------------------------------
687
688         __tempe1=THER_LINEAIRE(MODELE=__nomoth,
689                                CHAM_MATER=__chmath,
690                                EXCIT=_F(CHARGE=__chart1, ),
691                                SOLVEUR=_F(STOP_SINGULIER='NON',)    )
692
693 #
694 #     ----------------------------------------------
695 # --- - CALCUL DU  CENTRE DE TORSION/CISAILLEMENT  -
696 # --- - ET DES COEFFICIENTS DE CISAILLEMENT :      -
697 #     ----------------------------------------------
698 #
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 #     --------------------------
703
704         __fnsec1=DEFI_FONCTION(NOM_PARA='X',
705                                VALE=(0.,0.,10.,10.),
706                                PROL_DROITE='LINEAIRE',
707                                PROL_GAUCHE='LINEAIRE',        )
708
709         __fnsec0=DEFI_CONSTANTE(VALE=0.,)
710
711 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
712 # --- DE LAPLACE EST PRIS EGAL A Y DANS TOUTE LA SECTION :
713 #     --------------------------------------------------
714
715         __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
716                                   TEMP_IMPO=_F(NOEUD=l_noeud[i],
717                                                TEMP=__fnsec0),
718                                   SOURCE=_F(TOUT='OUI',
719                                             SOUR=__fnsec1)       )
720
721 # --- RESOLUTION DE     LAPLACIEN(PHI) = -Y
722 # ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
723 #     ------------------------------------------------
724
725         __tempe2=THER_LINEAIRE(MODELE=__nomoth,
726                                CHAM_MATER=__chmath,
727                                EXCIT=_F(CHARGE=__chart2, ),
728                                SOLVEUR=_F(STOP_SINGULIER='NON',)         )
729
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 #     --------------------------
734
735         __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
736                                VALE=(0.,0.,10.,10.),
737                                PROL_DROITE='LINEAIRE',
738                                PROL_GAUCHE='LINEAIRE',        )
739
740 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
741 # --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
742 #     --------------------------------------------------
743
744         __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
745                                   TEMP_IMPO=_F(NOEUD=l_noeud[i],
746                                                TEMP=__fnsec0),
747                                   SOURCE=_F(TOUT='OUI',
748                                             SOUR=__fnsec2)       )
749
750 # --- RESOLUTION DE     LAPLACIEN(PHI) = -Z
751 # ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
752 #     ------------------------------------------------
753
754         __tempe3=THER_LINEAIRE(MODELE=__nomoth,
755                                CHAM_MATER=__chmath,
756                                EXCIT=_F(CHARGE=__chart3, ),
757                                SOLVEUR=_F(STOP_SINGULIER='NON',)         )
758
759 # --- CALCUL DU RAYON DE TORSION :
760 #     --------------------------
761
762 #    CALCUL DU RAYON DE TORSION EXTERNE : rtext
763
764         __tempe1=CALC_ELEM(reuse=__tempe1,
765                             RESULTAT=__tempe1,
766                             MODELE=__nomoth,
767                             CHAM_MATER=__chmath,
768                             TOUT_ORDRE='OUI',
769                             OPTION='FLUX_ELNO_TEMP',
770                            )
771
772         __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
773                             DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_bord[i]),
774                             INFO=2,)
775
776         __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
777                                        CHEMIN=__chem,
778                                        RESULTAT=__tempe1,
779                                        NOM_CHAM='FLUX_ELNO_TEMP',
780                                        TRAC_NOR='OUI',
781                                        NOM_CMP=('FLUX','FLUY'),
782                                        OPERATION='MOYENNE'))
783
784         __m1=abs(__flun['TRAC_NOR',3])
785         __m2=abs(__flun['TRAC_NOR',4])
786         __rtext=max(__m1,__m2)
787
788 #    CALCUL DU RAYON DE TORSION : rt
789 #    rt = max ( rtext , 2*AIRE(TROU)/L(TROU) )
790
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'],]
795             else:
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]),
800                                   INFO=2,)
801               __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
802                                              CHEMIN=__chem,
803                                              RESULTAT=__tempe1,
804                                              NOM_CHAM='FLUX_ELNO_TEMP',
805                                              TRAC_NOR='OUI',
806                                              NOM_CMP=('FLUX','FLUY'),
807                                              OPERATION='MOYENNE'))
808               __m1=(abs(__flun['TRAC_NOR',3])+abs(__flun['TRAC_NOR',4]))/2.
809               if __m1 > __rtext :
810                 __rtext=__m1
811
812         __rt=__rtext
813
814 # --- CALCUL DE LA CONSTANTE DE TORSION :
815 #     ---------------------------------
816
817         __catp1=POST_ELEM(MODELE=__nomoth,
818                           CHAM_MATER=__chmath,
819                           CARA_POUTRE=_F(CARA_GEOM=__catp2,
820                                          LAPL_PHI=__tempe1,
821                                          RT=__rt,
822                                          GROUP_MA=l_group_ma[i],
823                                          OPTION='CARA_TORSION' ),     )
824
825 # --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
826 # --- CENTRE DE CISAILLEMENT/TORSION :
827 #     ------------------------------
828
829         __catp2=POST_ELEM(MODELE=__nomoth,
830                           CHAM_MATER=__chmath,
831                           CARA_POUTRE=_F(CARA_GEOM=__catp1,
832                                          LAPL_PHI_Y=__tempe2,
833                                          LAPL_PHI_Z=__tempe3,
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,
844                       CHAM_MATER=__nomama,
845                       CARA_GEOM=mfact    )
846   IMPR_TABLE(TABLE=nomres)
847
848   return ier