]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA73/Macro/macro_cara_poutre_ops.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA73 / Macro / macro_cara_poutre_ops.py
1 # -*- coding: utf-8 -*-
2 #@ MODIF macro_cara_poutre_ops Macro  DATE 25/06/2002   AUTEUR JMBHH01 J.M.PROIX 
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2002  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 def macro_cara_poutre_ops(self,UNITE_MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
22                               GROUP_MA,ORIG_INER,NOEUD,GROUP_MA_INTE,
23                               LONGUEUR,MATERIAU,LIAISON,
24                               **args):
25   """
26      Ecriture de la macro MACRO_CARA_POUTRE
27   """
28   import types
29   from Accas import _F
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   # La macro compte pour 1 dans la numerotation des commandes
50   self.icmd=1
51
52   # Le concept sortant (de type tabl_cara_geom) est nommé 'nomres' dans 
53   # le contexte de la macro
54   
55   self.DeclareOut('nomres',self.sd)
56
57   if GROUP_MA_BORD and GROUP_MA:
58      if not LIAISON:
59         ier=ier+1
60         self.cr.fatal("Avec GROUP_MA, il faut obligatoirement preciser LIAISON, LONGUEUR ET MATERIAU")
61         return ier
62
63   __nomlma=LIRE_MAILLAGE(UNITE=UNITE_MAILLAGE,)
64
65   __nomamo=AFFE_MODELE(MAILLAGE=__nomlma,
66                        AFFE=_F(TOUT='OUI',
67                                PHENOMENE='MECANIQUE',
68                                MODELISATION='D_PLAN',),   )
69
70   __nomdma=DEFI_MATERIAU(ELAS=_F(E=1.0,NU=0.,RHO=1.0),)
71
72
73   __nomama=AFFE_MATERIAU(MAILLAGE=__nomlma,
74                          AFFE=_F(TOUT='OUI',
75                                  MATER=__nomdma,),  )
76
77 # --- CALCUL DES CARACTERISTIQUES GEOMETRIQUES DE LA SECTION :
78 #     ------------------------------------------------------
79
80   motsimps={}
81   if GROUP_MA  : motsimps['GROUP_MA']  = GROUP_MA
82   if SYME_X    : motsimps['SYME_X']    = SYME_X
83   if SYME_Y    : motsimps['SYME_Y']    = SYME_Y
84   motsimps['ORIG_INER'] = ORIG_INER
85   mfact=_F(TOUT='OUI',**motsimps)
86   nomres=POST_ELEM(MODELE=__nomamo,
87                    CHAM_MATER=__nomama,
88                    CARA_GEOM=mfact    )
89
90 # nb  :  si GROUP_MA n existe pas : le mot clé est ignoré
91
92 #
93 #     ==================================================================
94 # --- = CALCUL DE LA CONSTANTE DE TORSION SUR TOUT LE MAILLAGE         =
95 # --- =     OU DU  CENTRE DE TORSION/CISAILLEMENT                      =
96 # --- =        DES COEFFICIENTS DE CISAILLEMENT                        =
97 # --- =     ET DE L INERTIE DE GAUCHISSEMENT                           =
98 # --- = ON CREE UN MODELE PLAN 2D THERMIQUE REPRESENTANT LA SECTION    =
99 # --- = DE LA POUTRE CAR ON A A RESOUDRE DES E.D.P. AVEC DES LAPLACIENS=
100 #     ==================================================================
101
102   if GROUP_MA_BORD and not GROUP_MA:
103
104 # --- TRANSFORMATION DES GROUP_MA EN GROUP_NO SUR-LESQUELS
105 # --- ON POURRA APPLIQUER DES CONDITIONS DE TEMPERATURE IMPOSEE :
106 #     ---------------------------------------------------------
107      motscles={}
108      if type(GROUP_MA_BORD)==types.StringType:
109         motscles['CREA_GROUP_NO']=_F(GROUP_MA=GROUP_MA_BORD,)
110      else:
111         motscles['CREA_GROUP_NO']=[]
112         for grma in GROUP_MA_BORD:
113            motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=grma,))
114      __nomlma=DEFI_GROUP(reuse=__nomlma,
115                          MAILLAGE=__nomlma,
116                          **motscles)
117
118
119 # --- CREATION D UN MAILLAGE IDENTIQUE AU PREMIER A CECI PRES
120 # --- QUE LES COORDONNEES SONT EXPRIMEES DANS LE REPERE PRINCIPAL
121 # --- D INERTIE DONT L ORIGINE EST LE CENTRE DE GRAVITE DE LA SECTION :
122 #     ---------------------------------------------------------------
123
124      __nomapi=CREA_MAILLAGE(MAILLAGE=__nomlma,
125                             REPERE=_F(TABLE=nomres,
126                                       NOM_ORIG='CDG',  ),  )
127
128 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
129 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
130 #     ------------------------------------------------------
131
132      __nomoth=AFFE_MODELE(MAILLAGE=__nomapi,
133                           AFFE=_F(TOUT='OUI',
134                                   PHENOMENE='THERMIQUE',
135                                   MODELISATION='PLAN',), )
136
137 # --- POUR LA CONSTRUCTION DU LAPLACIEN, ON  DEFINIT UN
138 # --- PSEUDO-MATERIAU DONT LES CARACTERISTIQUES THERMIQUES SONT :
139 # --- LAMBDA = 1, RHO*CP = 0 :
140 #     ----------------------
141
142      __nomath=DEFI_MATERIAU(THER=_F(LAMBDA=1.0,RHO_CP=0.,),)
143
144 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
145 #     ---------------------------------------------------------
146
147      __chmath=AFFE_MATERIAU(MAILLAGE=__nomapi,
148                             AFFE=_F(TOUT='OUI',
149                                     MATER=__nomath,),   )
150
151 #
152 #     ------------------------------------------------------------
153 # --- - CALCUL DE LA CONSTANTE DE TORSION PAR RESOLUTION         -
154 # --- - D UN LAPLACIEN AVEC UN TERME SOURCE EGAL A -2            -
155 # --- - L INCONNUE ETANT NULLE SUR LE CONTOUR DE LA SECTION :    -
156 # --- -    LAPLACIEN(PHI) = -2 DANS LA SECTION                   -
157 # --- -    PHI = 0 SUR LE CONTOUR :                              -
158 #     ------------------------------------------------------------
159 #
160 # --- ON IMPOSE LA VALEUR 0 A L INCONNUE SCALAIRE SUR LE CONTOUR
161 # --- DE LA SECTION
162 # --- ET ON A UN TERME SOURCE EGAL A -2 DANS TOUTE LA SECTION :
163 #     -------------------------------------------------------
164
165      motscles={}
166      if GROUP_MA_INTE:
167         motscles['LIAISON_UNIF']=_F(GROUP_MA=GROUP_MA_INTE,DDL='TEMP'),
168      __chart1=AFFE_CHAR_THER(MODELE=__nomoth,
169                              TEMP_IMPO   =_F(GROUP_NO=GROUP_MA_BORD,
170                                              TEMP=0. ),
171                              SOURCE      =_F(TOUT='OUI',
172                                              SOUR=2.0),
173                              **motscles  )
174
175 # ---  POUR CHAQUE TROU DE LA SECTION :
176 # ---  .ON A IMPOSE QUE PHI EST CONSTANT SUR LE CONTOUR INTERIEUR
177 # ---   EN FAISANT LE LIAISON_UNIF DANS LE AFFE_CHAR_THER PRECEDENT
178 # ---  .ON IMPOSE EN PLUS D(PHI)/DN = 2*AIRE(TROU)/L(TROU)
179 # ---        OU D/DN DESIGNE LA DERIVEE PAR RAPPORT A LA
180 # ---        NORMALE ET L DESIGNE LA LONGUEUR DU BORD DU TROU :
181 #     -------------------------------------------------------
182
183      if GROUP_MA_INTE:
184         __tbaire=POST_ELEM(MODELE=__nomoth,
185                            AIRE_INTERNE=_F(GROUP_MA_BORD=GROUP_MA_INTE,),  )
186
187         motscles={}
188         motscles['FLUX_REP']=[]
189         if type(GROUP_MA_INTE)==types.StringType:
190            motscles['FLUX_REP']=_F(GROUP_MA=GROUP_MA_INTE,CARA_TORSION=__tbaire)
191         else:
192            motscles['FLUX_REP']=[]
193            for grma in GROUP_MA_INTE:
194               motscles['FLUX_REP'].append(_F(GROUP_MA=grma,CARA_TORSION=__tbaire),)
195         __chart2=AFFE_CHAR_THER(MODELE=__nomoth,**motscles)
196
197 # --- RESOLUTION DE LAPLACIEN(PHI) = -2
198 # --- AVEC PHI = 0 SUR LE CONTOUR :
199 #     ----------------------------------------
200
201      motscles={}
202      motscles['EXCIT']=[_F(CHARGE=__chart1,),]
203      if GROUP_MA_INTE:
204         motscles['EXCIT'].append(_F(CHARGE=__chart2,))
205      __tempe1=THER_LINEAIRE(MODELE=__nomoth,
206                             CHAM_MATER=__chmath,
207                             SOLVEUR=_F(STOP_SINGULIER='NON',),
208                             **motscles   )
209
210 #
211 #     ----------------------------------------------
212 # --- - CALCUL DU  CENTRE DE TORSION/CISAILLEMENT  -
213 # --- - ET DES COEFFICIENTS DE CISAILLEMENT :      -
214 #     ----------------------------------------------
215 #
216 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
217 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
218 # --- PAR UNE FONCTION EGALE A Y :
219 #     --------------------------
220
221      __fnsec1=DEFI_FONCTION(NOM_PARA='X',
222                             VALE=(0.,0.,10.,10.),
223                             PROL_DROITE='LINEAIRE',
224                             PROL_GAUCHE='LINEAIRE',
225                            )
226
227      __fnsec0=DEFI_CONSTANTE(VALE=0.,)
228
229 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
230 # --- DE LAPLACE EST PRIS EGAL A Y DANS TOUTE LA SECTION :
231 #     --------------------------------------------------
232
233
234      motscles={}
235      if NOEUD:
236         motscles['TEMP_IMPO']=(_F(NOEUD=NOEUD,TEMP=__fnsec0))
237      __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
238                                SOURCE=_F(TOUT='OUI',
239                                          SOUR=__fnsec1,),
240                                **motscles   )
241
242 # --- RESOLUTION DE     LAPLACIEN(PHI) = -Y
243 # ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
244 #     ------------------------------------------------
245
246      __tempe2=THER_LINEAIRE(MODELE=__nomoth,
247                             CHAM_MATER=__chmath,
248                             EXCIT=_F(CHARGE=__chart2,), 
249                             SOLVEUR=_F(STOP_SINGULIER='NON',),
250                            )
251
252 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
253 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
254 # --- PAR UNE FONCTION EGALE A Z :
255 #     --------------------------
256
257      __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
258                             VALE=(0.,0.,10.,10.),
259                             PROL_DROITE='LINEAIRE',
260                             PROL_GAUCHE='LINEAIRE',
261                            )
262
263 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
264 # --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
265 #     --------------------------------------------------
266
267      motscles={}
268      if NOEUD:
269         motscles['TEMP_IMPO']=_F(NOEUD=NOEUD,TEMP=__fnsec0)
270      __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
271                                SOURCE=_F(TOUT='OUI',
272                                          SOUR=__fnsec2,),
273                                **motscles)
274
275 # --- RESOLUTION DE     LAPLACIEN(PHI) = -Z
276 # ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
277 #     ------------------------------------------------
278
279      __tempe3=THER_LINEAIRE(MODELE=__nomoth,
280                             CHAM_MATER=__chmath,
281                             EXCIT=_F(CHARGE=__chart3,), 
282                             SOLVEUR=_F(STOP_SINGULIER='NON',),
283                            )
284
285 # --- CALCUL DE LA CONSTANTE DE TORSION :
286 #     ---------------------------------
287
288      motscles={}
289      if GROUP_MA_INTE:
290         motscles['CARA_POUTRE']=_F(CARA_GEOM=nomres,
291                                    LAPL_PHI=__tempe1,
292                                    TOUT='OUI',
293                                    OPTION='CARA_TORSION',
294                                    GROUP_MA_INTE=GROUP_MA_INTE,)
295      else:
296         motscles['CARA_POUTRE']=_F(CARA_GEOM=nomres,
297                                    LAPL_PHI=__tempe1,
298                                    TOUT='OUI',
299                                    OPTION='CARA_TORSION',      )
300      nomres=POST_ELEM(reuse=nomres,
301                       MODELE=__nomoth,
302                       CHAM_MATER=__chmath,
303                       **motscles  )
304
305 # --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
306 # --- CENTRE DE CISAILLEMENT/TORSION :
307 #     ------------------------------
308
309      nomres=POST_ELEM(reuse=nomres,
310                       MODELE=__nomoth,
311                       CHAM_MATER=__chmath,
312                       CARA_POUTRE=_F(CARA_GEOM=nomres,
313                                      LAPL_PHI_Y=__tempe2,
314                                      LAPL_PHI_Z=__tempe3,
315                                      TOUT='OUI',
316                                      OPTION='CARA_CISAILLEMENT',),  )
317
318 #
319 #     ------------------------------------------------------------
320 # --- - CALCUL DE L INERTIE DE GAUCHISSEMENT PAR RESOLUTION  DE  -
321 # --- -    LAPLACIEN(OMEGA) = 0     DANS LA SECTION              -
322 # --- -    AVEC D(OMEGA)/D(N) = Z*NY-Y*NZ   SUR LE               -
323 # --- -    CONTOUR DE LA SECTION                                 -
324 # --- -    NY ET NZ SONT LES COMPOSANTES DU VECTEUR N NORMAL     -
325 # --- -    A CE CONTOUR                                          -
326 # --- -    ET SOMME_S(OMEGA.DS) = 0                              -
327 # --- -    OMEGA EST LA FONCTION DE GAUCHISSEMENT                -
328 # --- -    L INERTIE DE GAUCHISSEMENT EST SOMME_S(OMEGA**2.DS)   -
329 #     ------------------------------------------------------------
330 #
331 # --- CREATION D UN MAILLAGE DONT LES COORDONNEES SONT EXPRIMEES
332 # --- DANS LE REPERE PRINCIPAL D INERTIE MAIS AVEC COMME ORIGINE
333 # --- LE CENTRE DE TORSION DE LA SECTION, ON VA DONC UTILISER
334 # --- LE MAILLAGE DE NOM NOMAPI DONT LES COORDONNEES SONT
335 # --- EXPRIMEES DANS LE REPERE PRINCIPAL D'INERTIE, L'ORIGINE
336 # --- ETANT LE CENTRE DE GRAVITE DE LA SECTION (QUI EST DONC
337 # --- A CHANGER)  :
338 #     ----------
339
340      __nomapt=CREA_MAILLAGE(MAILLAGE=__nomapi,
341                             REPERE=_F(TABLE=nomres,
342                                       NOM_ORIG='TORSION',)  )
343
344 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
345 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
346 #     ------------------------------------------------------
347
348      __nomot2=AFFE_MODELE(MAILLAGE=__nomapt,
349                           AFFE=_F(TOUT='OUI',
350                                   PHENOMENE='THERMIQUE',
351                                   MODELISATION='PLAN', )  )
352
353 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
354 #     ---------------------------------------------------------
355
356      __chmat2=AFFE_MATERIAU(MAILLAGE=__nomapt,
357                             AFFE=_F(TOUT='OUI',
358                                     MATER=__nomath, ), )
359
360 # --- POUR LE CALCUL DE L INERTIE DE GAUCHISSEMENT, ON VA DEFINIR
361 # --- LA COMPOSANTE SELON Y DU FLUX A IMPOSER SUR LE CONTOUR
362 # --- PAR UNE FONCTION EGALE A -X :
363 #     ---------------------------
364
365      __fnsec3=DEFI_FONCTION(NOM_PARA='X',
366                             VALE=(0.,0.,10.,-10.),
367                             PROL_DROITE='LINEAIRE',
368                             PROL_GAUCHE='LINEAIRE',
369                            )
370
371 # --- POUR LE CALCUL DE L INERTIE DE GAUCHISSEMENT, ON VA DEFINIR
372 # --- LA COMPOSANTE SELON X DU FLUX A IMPOSER SUR LE CONTOUR
373 # --- PAR UNE FONCTION EGALE A Y :
374 #     --------------------------
375
376      __fnsec4=DEFI_FONCTION(NOM_PARA='Y',
377                             VALE=(0.,0.,10.,10.),
378                             PROL_DROITE='LINEAIRE',
379                             PROL_GAUCHE='LINEAIRE',
380                            )
381
382 # --- DANS LE BUT D IMPOSER LA RELATION LINEAIRE ENTRE DDLS
383 # ---  SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
384 # --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
385 # --- N = 0, N ETANT L EFFORT NORMAL)
386 # --- ON CALCULE LE VECTEUR DE CHARGEMENT DU A UN TERME SOURCE EGAL
387 # --- A 1., LES TERMES DE CE VECTEUR SONT EGAUX A
388 # --- SOMME_SECTION(NI.DS) ET SONT DONC LES COEFFICIENTS DE
389 # --- LA RELATION LINEAIRE A IMPOSER.
390 # --- ON DEFINIT DONC UN CHARGEMENT DU A UN TERME SOURCE EGAL A 1 :
391 #     -----------------------------------------------------------
392
393      __chart4=AFFE_CHAR_THER(MODELE=__nomot2,
394                              SOURCE=_F(TOUT='OUI',
395                                        SOUR=1.0),  )
396
397 # --- ON CALCULE LE VECT_ELEM DU AU CHARGEMENT PRECEDENT
398 # --- IL S AGIT DES VECTEURS ELEMENTAIRES DONT LE TERME
399 # --- AU NOEUD COURANT I EST EGAL A SOMME_SECTION(NI.DS) :
400 #     --------------------------------------------------
401
402      __vecel=CALC_VECT_ELEM(CHARGE=__chart4,
403                             OPTION='CHAR_THER'
404                             )
405
406 # --- ON CALCULE LE MATR_ELEM DES MATRICES ELEMENTAIRES
407 # --- DE CONDUCTIVITE UNIQUEMENT POUR GENERER LE NUME_DDL
408 # --- SUR-LEQUEL S APPUIERA LE CHAMNO UTILISE POUR ECRIRE LA
409 # --- RELATION LINEAIRE ENTRE DDLS :
410 #     ----------------------------
411
412      __matel=CALC_MATR_ELEM(MODELE=__nomot2,
413                             CHAM_MATER=__chmat2,
414                             CHARGE=__chart4,
415                             OPTION='RIGI_THER',)
416
417 # --- ON DEFINIT LE NUME_DDL ASSOCIE AU MATR_ELEM DEFINI
418 # --- PRECEDEMMENT POUR CONSTRUIRE LE CHAMNO UTILISE POUR ECRIRE LA
419 # --- RELATION LINEAIRE ENTRE DDLS :
420 #     ----------------------------
421
422      __numddl=NUME_DDL(MATR_RIGI=__matel,
423                        METHODE='LDLT',    )
424
425 # --- ON CONSTRUIT LE CHAMNO QUI VA ETRE UTILISE POUR ECRIRE LA
426 # --- RELATION LINEAIRE ENTRE DDLS :
427 #     ----------------------------
428
429      __chamno=ASSE_VECTEUR(VECT_ELEM=__vecel,
430                            NUME_DDL=__numddl,    )
431
432 # --- ON IMPOSE LA RELATION LINEAIRE ENTRE DDLS
433 # ---  SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
434 # --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
435 # --- N = 0, N ETANT L EFFORT NORMAL)
436 # --- POUR IMPOSER CETTE RELATION ON PASSE PAR LIAISON_CHAMNO,
437 # --- LES TERMES DU CHAMNO (I.E. SOMME_SECTION(NI.DS))
438 # --- SONT LES COEFFICIENTS DE LA RELATION LINEAIRE :
439 #     ---------------------------------------------
440
441      __chart5=AFFE_CHAR_THER(MODELE=__nomot2,
442                              LIAISON_CHAMNO=_F(CHAM_NO=__chamno,
443                                                COEF_IMPO=0.),    )
444
445 # --- LE CHARGEMENT EST UN FLUX REPARTI NORMAL AU CONTOUR
446 # --- DONT LES COMPOSANTES SONT +Z (I.E. +Y) ET -Y (I.E. -X)
447 # --- SELON LA DIRECTION NORMALE AU CONTOUR :
448 #     -------------------------------------
449
450      __chart6=AFFE_CHAR_THER_F(MODELE=__nomot2,
451                                FLUX_REP=_F(GROUP_MA=GROUP_MA_BORD,
452                                            FLUX_X  =__fnsec4,
453                                            FLUX_Y  =__fnsec3,),    )
454
455 # --- RESOLUTION DE     LAPLACIEN(OMEGA) = 0
456 # --- AVEC D(OMEGA)/D(N) = Z*NY-Y*NZ   SUR LE CONTOUR DE LA SECTION
457 # --- ET SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
458 # --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
459 # --- N = 0, N ETANT L EFFORT NORMAL)  :
460 #     -------------------------------
461
462      __tempe4=THER_LINEAIRE(MODELE=__nomot2,
463                             CHAM_MATER=__chmat2,
464                             EXCIT=(_F(CHARGE=__chart5,),
465                                    _F(CHARGE=__chart6,),),
466                             SOLVEUR=_F(METHODE='LDLT',
467                                        RENUM='SANS',
468                                        STOP_SINGULIER='NON',),   )
469     
470 # --- CALCUL DE L INERTIE DE GAUCHISSEMENT :
471 #     -------------------------------------
472
473      nomres=POST_ELEM(reuse=nomres,
474                       MODELE=__nomot2,
475                       CHAM_MATER=__chmat2,
476                       CARA_POUTRE=_F(CARA_GEOM=nomres,
477                                      LAPL_PHI=__tempe4,
478                                      TOUT='OUI',
479                                      OPTION='CARA_GAUCHI'),  )
480
481 #
482 #     ==================================================================
483 # --- = CALCUL DE LA CONSTANTE DE TORSION SUR CHAQUE GROUPE            =
484 # --- =     ET DU  CENTRE DE TORSION/CISAILLEMENT                      =
485 # --- =        DES COEFFICIENTS DE CISAILLEMENT                        =
486 #     ==================================================================
487 #
488
489
490   if GROUP_MA_BORD and GROUP_MA:
491
492      if type(GROUP_MA_BORD)==types.StringType :
493         l_group_ma_bord=[GROUP_MA_BORD,]
494      else:
495         l_group_ma_bord= GROUP_MA_BORD
496      if type(GROUP_MA)==types.StringType :
497         l_group_ma=[GROUP_MA,]
498      else:
499         l_group_ma= GROUP_MA
500
501      if NOEUD:
502        if type(NOEUD)==types.StringType :
503           l_noeud=[NOEUD,]
504        else:
505           l_noeud= NOEUD
506
507      if len(l_group_ma)!=len(l_group_ma_bord):
508         ier=ier+1
509         self.cr.fatal("GROUP_MA et GROUP_MA_BORD incoherents")
510         return ier
511      if NOEUD and (len(l_group_ma)!=len(l_noeud)):
512         ier=ier+1
513         self.cr.fatal("GROUP_MA et NOEUD incoherents")
514         return ier
515
516      for i in range(0,len(l_group_ma_bord)):
517
518 # --- TRANSFORMATION DES GROUP_MA EN GROUP_NO SUR-LESQUELS
519 # --- ON POURRA APPLIQUER DES CONDITIONS DE TEMPERATURE IMPOSEE :
520 #     ---------------------------------------------------------
521
522         __nomlma=DEFI_GROUP(reuse=__nomlma,
523                             MAILLAGE=__nomlma,
524                             CREA_GROUP_NO=_F(GROUP_MA=l_group_ma_bord[i],)  )
525
526
527 # --- CREATION D UN MAILLAGE IDENTIQUE AU PREMIER A CECI PRES
528 # --- QUE LES COORDONNEES SONT EXPRIMEES DANS LE REPERE PRINCIPAL
529 # --- D INERTIE DONT L ORIGINE EST LE CENTRE DE GRAVITE DE LA SECTION :
530 #     ---------------------------------------------------------------
531
532         __nomapi=CREA_MAILLAGE(MAILLAGE=__nomlma,
533                                REPERE=_F(TABLE=nomres,
534                                          NOM_ORIG='CDG',
535                                          GROUP_MA=l_group_ma[i],  ),  )
536
537 # --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
538 # --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
539 #     ------------------------------------------------------
540
541         __nomoth=AFFE_MODELE(MAILLAGE=__nomapi,
542                              AFFE=_F(GROUP_MA=l_group_ma[i],
543                                      PHENOMENE='THERMIQUE',
544                                      MODELISATION='PLAN',  )  )
545
546 # --- POUR LA CONSTRUCTION DU LAPLACIEN, ON  DEFINIT UN
547 # --- PSEUDO-MATERIAU DONT LES CARACTERISTIQUES THERMIQUES SONT :
548 # --- LAMBDA = 1, RHO*CP = 0 :
549 #     ----------------------
550
551         __nomath=DEFI_MATERIAU(THER=_F(LAMBDA=1.0,
552                                        RHO_CP=0.0,  ),  )
553
554 # --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
555 #     ---------------------------------------------------------
556
557         __chmath=AFFE_MATERIAU(MAILLAGE=__nomapi,
558                                AFFE=_F(TOUT='OUI',
559                                        MATER=__nomath ),  )
560
561 #
562 #     ------------------------------------------------------------
563 # --- - CALCUL DE LA CONSTANTE DE TORSION PAR RESOLUTION         -
564 # --- - D UN LAPLACIEN AVEC UN TERME SOURCE EGAL A -2            -
565 # --- - L INCONNUE ETANT NULLE SUR LE CONTOUR DE LA SECTION :    -
566 # --- -    LAPLACIEN(PHI) = -2 DANS LA SECTION                   -
567 # --- -    PHI = 0 SUR LE CONTOUR :                              -
568 #     ------------------------------------------------------------
569 #
570 # --- ON IMPOSE LA VALEUR 0 A L INCONNUE SCALAIRE SUR LE CONTOUR
571 # --- DE LA SECTION
572 # --- ET ON A UN TERME SOURCE EGAL A -2 DANS TOUTE LA SECTION :
573 #     -------------------------------------------------------
574
575         __chart1=AFFE_CHAR_THER(MODELE=__nomoth,
576                                 TEMP_IMPO=_F(GROUP_NO=l_group_ma_bord[i],
577                                              TEMP=0.0       ),
578                                 SOURCE=_F(TOUT='OUI',
579                                           SOUR=2.0       )          )
580
581 # --- RESOLUTION DE     LAPLACIEN(PHI) = -2
582 # ---              AVEC PHI = 0 SUR LE CONTOUR :
583 #     ----------------------------------------
584
585         __tempe1=THER_LINEAIRE(MODELE=__nomoth,
586                                CHAM_MATER=__chmath,
587                                EXCIT=_F(CHARGE=__chart1, ),
588                                SOLVEUR=_F(STOP_SINGULIER='NON',)    )
589
590 #
591 #     ----------------------------------------------
592 # --- - CALCUL DU  CENTRE DE TORSION/CISAILLEMENT  -
593 # --- - ET DES COEFFICIENTS DE CISAILLEMENT :      -
594 #     ----------------------------------------------
595 #
596 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
597 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
598 # --- PAR UNE FONCTION EGALE A Y :
599 #     --------------------------
600
601         __fnsec1=DEFI_FONCTION(NOM_PARA='X',
602                                VALE=(0.,0.,10.,10.),
603                                PROL_DROITE='LINEAIRE',
604                                PROL_GAUCHE='LINEAIRE',        )
605
606         __fnsec0=DEFI_CONSTANTE(VALE=0.,)
607
608 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
609 # --- DE LAPLACE EST PRIS EGAL A Y DANS TOUTE LA SECTION :
610 #     --------------------------------------------------
611
612         __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
613                                   TEMP_IMPO=_F(NOEUD=l_noeud[i],
614                                                TEMP=__fnsec0),
615                                   SOURCE=_F(TOUT='OUI',
616                                             SOUR=__fnsec1)       )
617
618 # --- RESOLUTION DE     LAPLACIEN(PHI) = -Y
619 # ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
620 #     ------------------------------------------------
621
622         __tempe2=THER_LINEAIRE(MODELE=__nomoth,
623                                CHAM_MATER=__chmath,
624                                EXCIT=_F(CHARGE=__chart2, ),
625                                SOLVEUR=_F(STOP_SINGULIER='NON',)         )
626
627 # --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
628 # --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
629 # --- PAR UNE FONCTION EGALE A Z :
630 #     --------------------------
631
632         __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
633                                VALE=(0.,0.,10.,10.),
634                                PROL_DROITE='LINEAIRE',
635                                PROL_GAUCHE='LINEAIRE',        )
636
637 # --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
638 # --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
639 #     --------------------------------------------------
640
641         __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
642                                   TEMP_IMPO=_F(NOEUD=l_noeud[i],
643                                                TEMP=__fnsec0),
644                                   SOURCE=_F(TOUT='OUI',
645                                             SOUR=__fnsec2)       )
646
647 # --- RESOLUTION DE     LAPLACIEN(PHI) = -Z
648 # ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
649 #     ------------------------------------------------
650
651         __tempe3=THER_LINEAIRE(MODELE=__nomoth,
652                                CHAM_MATER=__chmath,
653                                EXCIT=_F(CHARGE=__chart3, ),
654                                SOLVEUR=_F(STOP_SINGULIER='NON',)         )
655
656 # --- CALCUL DE LA CONSTANTE DE TORSION :
657 #     ---------------------------------
658
659         nomres=POST_ELEM(reuse=nomres,
660                          MODELE=__nomoth,
661                          CHAM_MATER=__chmath,
662                          CARA_POUTRE=_F(CARA_GEOM=nomres,
663                                         LAPL_PHI=__tempe1,
664                                         GROUP_MA=l_group_ma[i],
665                                         OPTION='CARA_TORSION' ),     )
666
667 # --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
668 # --- CENTRE DE CISAILLEMENT/TORSION :
669 #     ------------------------------
670
671         nomres=POST_ELEM(reuse=nomres,
672                          MODELE=__nomoth,
673                          CHAM_MATER=__chmath,
674                          CARA_POUTRE=_F(CARA_GEOM=nomres,
675                                         LAPL_PHI_Y=__tempe2,
676                                         LAPL_PHI_Z=__tempe3,
677                                         GROUP_MA=l_group_ma[i],
678                                         LONGUEUR=LONGUEUR,
679                                         MATERIAU=MATERIAU,
680                                         LIAISON =LIAISON,
681                                         OPTION='CARA_CISAILLEMENT' ),   )
682
683   return ier
684