]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA8/Macro/macr_cara_poutre_ops.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA8 / Macro / macr_cara_poutre_ops.py
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.                                                  
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,UNITE_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
28   from Accas import _F
29   from Utilitai.Utmess     import UTMESS
30   ier=0
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
55   self.set_icmd(1)
56
57   # Le concept sortant (de type table_sdaster) est nommé 'nomres' dans 
58   # le contexte de la macro
59   
60   self.DeclareOut('nomres',self.sd)
61
62 #  if GROUP_MA_BORD and GROUP_MA:
63 #     if not LIAISON:
64 #        UTMESS('F', "MACR_CARA_POUTRE", "Avec GROUP_MA, il faut obligatoirement preciser LIAISON, LONGUEUR ET MATERIAU")
65 #
66   __nomlma=LIRE_MAILLAGE(UNITE=UNITE_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.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',
249                                          SOUR=__fnsec1,),
250                                **motscles   )
251
252 # --- RESOLUTION DE     LAPLACIEN(PHI) = -Y
253 # ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
254 #     ------------------------------------------------
255
256      __tempe2=THER_LINEAIRE(MODELE=__nomoth,
257                             CHAM_MATER=__chmath,
258                             EXCIT=_F(CHARGE=__chart2,), 
259                             SOLVEUR=_F(STOP_SINGULIER='NON',),
260                            )
261
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 #     --------------------------
266
267      __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
268                             VALE=(0.,0.,10.,10.),
269                             PROL_DROITE='LINEAIRE',
270                             PROL_GAUCHE='LINEAIRE',
271                            )
272
273 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
274 # --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
275 #     --------------------------------------------------
276
277      motscles={}
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',
282                                          SOUR=__fnsec2,),
283                                **motscles)
284
285 # --- RESOLUTION DE     LAPLACIEN(PHI) = -Z
286 # ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
287 #     ------------------------------------------------
288
289      __tempe3=THER_LINEAIRE(MODELE=__nomoth,
290                             CHAM_MATER=__chmath,
291                             EXCIT=_F(CHARGE=__chart3,), 
292                             SOLVEUR=_F(STOP_SINGULIER='NON',),
293                            )
294
295 # --- CALCUL DU RAYON DE TORSION :
296 #     --------------------------
297
298 #    CALCUL DU RAYON DE TORSION EXTERNE : rtext
299
300      __tempe1=CALC_ELEM(reuse=__tempe1,
301                        RESULTAT=__tempe1,
302                        MODELE=__nomoth,
303                        CHAM_MATER=__chmath,
304                        TOUT_ORDRE='OUI',
305                        OPTION='FLUX_ELNO_TEMP',
306                       )
307
308      __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
309                          DEFI_CHEMIN=_F(GROUP_MA=GROUP_MA_BORD),
310                          INFO=2,)
311
312      __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
313                              CHEMIN=__chem,
314                              RESULTAT=__tempe1,
315                              NOM_CHAM='FLUX_ELNO_TEMP',
316                              TRAC_NOR='OUI',
317                              NOM_CMP=('FLUX','FLUY'),
318                              OPERATION='MOYENNE'))
319
320      __m1=abs(__flun['TRAC_NOR',3])
321      __m2=abs(__flun['TRAC_NOR',4])
322      __rtext=max(__m1,__m2)
323      
324  #    CALCUL DU RAYON DE TORSION : rt
325  #    rt = max ( rtext , 2*AIRE(TROU)/L(TROU) )
326  
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'],]
331          else:
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]),
336                                INFO=2,)
337            __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
338                                           CHEMIN=__chem,
339                                           RESULTAT=__tempe1,
340                                           NOM_CHAM='FLUX_ELNO_TEMP',
341                                           TRAC_NOR='OUI',
342                                           NOM_CMP=('FLUX','FLUY'),
343                                           OPERATION='MOYENNE'))
344            __m1=(abs(__flun['TRAC_NOR',3])+abs(__flun['TRAC_NOR',4]))/2.
345            if __m1 > __rtext :
346              __rtext=__m1
347
348      __rt=__rtext
349          
350 # --- CALCUL DE LA CONSTANTE DE TORSION :
351 #     ---------------------------------
352
353      motscles={}
354      if args.has_key('GROUP_MA_INTE'):
355         lgmaint=args['GROUP_MA_INTE']
356         if lgmaint != None :
357            motscles['CARA_POUTRE']=_F(CARA_GEOM=__cageo,
358                                    LAPL_PHI=__tempe1,
359                                    RT=__rt,
360                                    TOUT='OUI',
361                                    OPTION='CARA_TORSION',
362                                    GROUP_MA_INTE=args['GROUP_MA_INTE'],)
363         else:
364            motscles['CARA_POUTRE']=_F(CARA_GEOM=__cageo,
365                                     LAPL_PHI=__tempe1,
366                                     RT=__rt,  
367                                     TOUT='OUI',
368                                     OPTION='CARA_TORSION',      )
369      __cator=POST_ELEM(MODELE=__nomoth,
370                        CHAM_MATER=__chmath,
371                        **motscles  )
372  
373
374 # --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
375 # --- CENTRE DE CISAILLEMENT/TORSION :
376 #     ------------------------------
377
378      __cacis=POST_ELEM(MODELE=__nomoth,
379                        CHAM_MATER=__chmath,
380                        CARA_POUTRE=_F(CARA_GEOM=__cator,
381                                       LAPL_PHI_Y=__tempe2,
382                                       LAPL_PHI_Z=__tempe3,
383                                       TOUT='OUI',
384                                       OPTION='CARA_CISAILLEMENT',),  )
385      
386
387 #
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 #     ------------------------------------------------------------
399 #
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
406 # --- A CHANGER)  :
407 #     ----------
408
409      __nomapt=CREA_MAILLAGE(MAILLAGE=__nomapi,
410                             REPERE=_F(TABLE=__cacis,
411                                       NOM_ORIG='TORSION',)  )
412
413 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
414 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
415 #     ------------------------------------------------------
416
417      __nomot2=AFFE_MODELE(MAILLAGE=__nomapt,
418                           AFFE=_F(TOUT='OUI',
419                                   PHENOMENE='THERMIQUE',
420                                   MODELISATION='PLAN', )  )
421
422 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
423 #     ---------------------------------------------------------
424
425      __chmat2=AFFE_MATERIAU(MAILLAGE=__nomapt,
426                             AFFE=_F(TOUT='OUI',
427                                     MATER=__nomath, ), )
428
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 #     ---------------------------
433
434      __fnsec3=DEFI_FONCTION(NOM_PARA='X',
435                             VALE=(0.,0.,10.,-10.),
436                             PROL_DROITE='LINEAIRE',
437                             PROL_GAUCHE='LINEAIRE',
438                            )
439
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 #     --------------------------
444
445      __fnsec4=DEFI_FONCTION(NOM_PARA='Y',
446                             VALE=(0.,0.,10.,10.),
447                             PROL_DROITE='LINEAIRE',
448                             PROL_GAUCHE='LINEAIRE',
449                            )
450
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 #     -----------------------------------------------------------
461
462      __chart4=AFFE_CHAR_THER(MODELE=__nomot2,
463                              SOURCE=_F(TOUT='OUI',
464                                        SOUR=1.0),  )
465
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 #     --------------------------------------------------
470
471      __vecel=CALC_VECT_ELEM(CHARGE=__chart4,
472                             OPTION='CHAR_THER'
473                             )
474
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 #     ----------------------------
480
481      __matel=CALC_MATR_ELEM(MODELE=__nomot2,
482                             CHAM_MATER=__chmat2,
483                             CHARGE=__chart4,
484                             OPTION='RIGI_THER',)
485
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 #     ----------------------------
490
491      __numddl=NUME_DDL(MATR_RIGI=__matel,
492                        METHODE='LDLT',    )
493
494 # --- ON CONSTRUIT LE CHAMNO QUI VA ETRE UTILISE POUR ECRIRE LA
495 # --- RELATION LINEAIRE ENTRE DDLS :
496 #     ----------------------------
497
498      __chamno=ASSE_VECTEUR(VECT_ELEM=__vecel,
499                            NUME_DDL=__numddl,    )
500
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 #     ---------------------------------------------
509
510      __chart5=AFFE_CHAR_THER(MODELE=__nomot2,
511                              LIAISON_CHAMNO=_F(CHAM_NO=__chamno,
512                                                COEF_IMPO=0.),    )
513
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 #     -------------------------------------
518
519      __chart6=AFFE_CHAR_THER_F(MODELE=__nomot2,
520                                FLUX_REP=_F(GROUP_MA=GROUP_MA_BORD,
521                                            FLUX_X  =__fnsec4,
522                                            FLUX_Y  =__fnsec3,),    )
523
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 #     -------------------------------
530
531      __tempe4=THER_LINEAIRE(MODELE=__nomot2,
532                             CHAM_MATER=__chmat2,
533                             EXCIT=(_F(CHARGE=__chart5,),
534                                    _F(CHARGE=__chart6,),),
535                             SOLVEUR=_F(METHODE='LDLT',
536                                        RENUM='SANS',
537                                        STOP_SINGULIER='NON',),   )
538     
539 # --- CALCUL DE L INERTIE DE GAUCHISSEMENT :
540 #     -------------------------------------
541
542      nomres=POST_ELEM(MODELE=__nomot2,
543                       CHAM_MATER=__chmat2,
544                       CARA_POUTRE=_F(CARA_GEOM=__cacis,
545                                      LAPL_PHI=__tempe4,
546                                      TOUT='OUI',
547                                      OPTION='CARA_GAUCHI'),  )
548
549      
550 #
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 #     ==================================================================
557
558
559 #
560
561
562   if GROUP_MA_BORD and GROUP_MA:
563
564 # --- CALCUL DES CARACTERISTIQUES GEOMETRIQUES DE LA SECTION :
565 #     ------------------------------------------------------
566
567      if type(GROUP_MA_BORD)==types.StringType :
568         l_group_ma_bord=[GROUP_MA_BORD,]
569      else:
570         l_group_ma_bord= GROUP_MA_BORD
571      if type(GROUP_MA)==types.StringType :
572         l_group_ma=[GROUP_MA,]
573      else:
574         l_group_ma= GROUP_MA
575
576      if args.has_key('NOEUD'):
577        if type(args['NOEUD'])==types.StringType :
578           l_noeud=[args['NOEUD'],]
579        else:
580           l_noeud= args['NOEUD']
581
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")
586
587      __catp2=__cageo
588      for i in range(0,len(l_group_ma_bord)):
589
590 # --- TRANSFORMATION DES GROUP_MA EN GROUP_NO SUR-LESQUELS
591 # --- ON POURRA APPLIQUER DES CONDITIONS DE TEMPERATURE IMPOSEE :
592 #     ---------------------------------------------------------
593
594         __nomlma=DEFI_GROUP(reuse=__nomlma,
595                             MAILLAGE=__nomlma,
596                             CREA_GROUP_NO=_F(GROUP_MA=l_group_ma_bord[i],)  )
597
598
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 #     ---------------------------------------------------------------
603
604         __nomapi=CREA_MAILLAGE(MAILLAGE=__nomlma,
605                                REPERE=_F(TABLE=__cageo,
606                                          NOM_ORIG='CDG',
607                                          GROUP_MA=l_group_ma[i],  ),  )
608
609 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
610 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
611 #     ------------------------------------------------------
612
613         __nomoth=AFFE_MODELE(MAILLAGE=__nomapi,
614                              AFFE=_F(GROUP_MA=l_group_ma[i],
615                                      PHENOMENE='THERMIQUE',
616                                      MODELISATION='PLAN',  )  )
617
618 # --- POUR LA CONSTRUCTION DU LAPLACIEN, ON  DEFINIT UN
619 # --- PSEUDO-MATERIAU DONT LES CARACTERISTIQUES THERMIQUES SONT :
620 # --- LAMBDA = 1, RHO*CP = 0 :
621 #     ----------------------
622
623         __nomath=DEFI_MATERIAU(THER=_F(LAMBDA=1.0,
624                                        RHO_CP=0.0,  ),  )
625
626 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
627 #     ---------------------------------------------------------
628
629         __chmath=AFFE_MATERIAU(MAILLAGE=__nomapi,
630                                AFFE=_F(TOUT='OUI',
631                                        MATER=__nomath ),  )
632
633 #
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 #     ------------------------------------------------------------
641 #
642 # --- ON IMPOSE LA VALEUR 0 A L INCONNUE SCALAIRE SUR LE CONTOUR
643 # --- DE LA SECTION
644 # --- ET ON A UN TERME SOURCE EGAL A -2 DANS TOUTE LA SECTION :
645 #     -------------------------------------------------------
646
647         __chart1=AFFE_CHAR_THER(MODELE=__nomoth,
648                                 TEMP_IMPO=_F(GROUP_NO=l_group_ma_bord[i],
649                                              TEMP=0.0       ),
650                                 SOURCE=_F(TOUT='OUI',
651                                           SOUR=2.0       )          )
652
653 # --- RESOLUTION DE     LAPLACIEN(PHI) = -2
654 # ---              AVEC PHI = 0 SUR LE CONTOUR :
655 #     ----------------------------------------
656
657         __tempe1=THER_LINEAIRE(MODELE=__nomoth,
658                                CHAM_MATER=__chmath,
659                                EXCIT=_F(CHARGE=__chart1, ),
660                                SOLVEUR=_F(STOP_SINGULIER='NON',)    )
661
662 #
663 #     ----------------------------------------------
664 # --- - CALCUL DU  CENTRE DE TORSION/CISAILLEMENT  -
665 # --- - ET DES COEFFICIENTS DE CISAILLEMENT :      -
666 #     ----------------------------------------------
667 #
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 #     --------------------------
672
673         __fnsec1=DEFI_FONCTION(NOM_PARA='X',
674                                VALE=(0.,0.,10.,10.),
675                                PROL_DROITE='LINEAIRE',
676                                PROL_GAUCHE='LINEAIRE',        )
677
678         __fnsec0=DEFI_CONSTANTE(VALE=0.,)
679
680 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
681 # --- DE LAPLACE EST PRIS EGAL A Y DANS TOUTE LA SECTION :
682 #     --------------------------------------------------
683
684         __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
685                                   TEMP_IMPO=_F(NOEUD=l_noeud[i],
686                                                TEMP=__fnsec0),
687                                   SOURCE=_F(TOUT='OUI',
688                                             SOUR=__fnsec1)       )
689
690 # --- RESOLUTION DE     LAPLACIEN(PHI) = -Y
691 # ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
692 #     ------------------------------------------------
693
694         __tempe2=THER_LINEAIRE(MODELE=__nomoth,
695                                CHAM_MATER=__chmath,
696                                EXCIT=_F(CHARGE=__chart2, ),
697                                SOLVEUR=_F(STOP_SINGULIER='NON',)         )
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 Z :
702 #     --------------------------
703
704         __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
705                                VALE=(0.,0.,10.,10.),
706                                PROL_DROITE='LINEAIRE',
707                                PROL_GAUCHE='LINEAIRE',        )
708
709 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
710 # --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
711 #     --------------------------------------------------
712
713         __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
714                                   TEMP_IMPO=_F(NOEUD=l_noeud[i],
715                                                TEMP=__fnsec0),
716                                   SOURCE=_F(TOUT='OUI',
717                                             SOUR=__fnsec2)       )
718
719 # --- RESOLUTION DE     LAPLACIEN(PHI) = -Z
720 # ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
721 #     ------------------------------------------------
722
723         __tempe3=THER_LINEAIRE(MODELE=__nomoth,
724                                CHAM_MATER=__chmath,
725                                EXCIT=_F(CHARGE=__chart3, ),
726                                SOLVEUR=_F(STOP_SINGULIER='NON',)         )
727         
728 # --- CALCUL DU RAYON DE TORSION :
729 #     --------------------------
730
731 #    CALCUL DU RAYON DE TORSION EXTERNE : rtext
732
733         __tempe1=CALC_ELEM(reuse=__tempe1,
734                             RESULTAT=__tempe1,
735                             MODELE=__nomoth,
736                             CHAM_MATER=__chmath,
737                             TOUT_ORDRE='OUI',
738                             OPTION='FLUX_ELNO_TEMP',
739                            )
740
741         __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
742                             DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_bord[i]),
743                             INFO=2,)
744
745         __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
746                                        CHEMIN=__chem,
747                                        RESULTAT=__tempe1,
748                                        NOM_CHAM='FLUX_ELNO_TEMP',
749                                        TRAC_NOR='OUI',
750                                        NOM_CMP=('FLUX','FLUY'),
751                                        OPERATION='MOYENNE'))
752
753         __m1=abs(__flun['TRAC_NOR',3])
754         __m2=abs(__flun['TRAC_NOR',4])
755         __rtext=max(__m1,__m2)
756
757 #    CALCUL DU RAYON DE TORSION : rt
758 #    rt = max ( rtext , 2*AIRE(TROU)/L(TROU) )
759
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'],]
764             else:
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]),
769                                   INFO=2,)
770               __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
771                                              CHEMIN=__chem,
772                                              RESULTAT=__tempe1,
773                                              NOM_CHAM='FLUX_ELNO_TEMP',
774                                              TRAC_NOR='OUI',
775                                              NOM_CMP=('FLUX','FLUY'),
776                                              OPERATION='MOYENNE'))        
777               __m1=(abs(__flun['TRAC_NOR',3])+abs(__flun['TRAC_NOR',4]))/2.
778               if __m1 > __rtext :
779                 __rtext=__m1
780
781         __rt=__rtext
782                 
783 # --- CALCUL DE LA CONSTANTE DE TORSION :
784 #     ---------------------------------
785              
786         __catp1=POST_ELEM(MODELE=__nomoth,
787                           CHAM_MATER=__chmath,
788                           CARA_POUTRE=_F(CARA_GEOM=__catp2,
789                                          LAPL_PHI=__tempe1,
790                                          RT=__rt,
791                                          GROUP_MA=l_group_ma[i],
792                                          OPTION='CARA_TORSION' ),     )
793
794 # --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
795 # --- CENTRE DE CISAILLEMENT/TORSION :
796 #     ------------------------------
797
798         __catp2=POST_ELEM(MODELE=__nomoth,
799                           CHAM_MATER=__chmath,
800                           CARA_POUTRE=_F(CARA_GEOM=__catp1,
801                                          LAPL_PHI_Y=__tempe2,
802                                          LAPL_PHI_Z=__tempe3,
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,
813                       CHAM_MATER=__nomama,
814                       CARA_GEOM=mfact    )
815   IMPR_TABLE(TABLE=nomres)
816
817   return ier