]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA8/Macro/simu_point_mat_ops.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA8 / Macro / simu_point_mat_ops.py
1 #@ MODIF simu_point_mat_ops Macro  DATE 10/10/2006   AUTEUR REZETTE C.REZETTE 
2 # -*- coding: iso-8859-1 -*-
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2006  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 def simu_point_mat_ops(self, COMP_INCR, MATER, INCREMENT, NEWTON,CONVERGENCE,
21                SUIVI_DDL,SIGM_IMPOSE,EPSI_IMPOSE, INFO, **args) :
22
23   """Simulation de la reponse d'un point materiel"""
24
25   ier = 0
26   # La macro compte pour 1 dans la numerotation des commandes
27   self.set_icmd(1)
28
29   # On importe les definitions des commandes a utiliser dans la macro
30   # Le nom de la variable doit etre obligatoirement le nom de la commande
31   DEFI_FONCTION   = self.get_cmd('DEFI_FONCTION')
32   LIRE_MAILLAGE   = self.get_cmd('LIRE_MAILLAGE')
33   AFFE_MATERIAU   = self.get_cmd('AFFE_MATERIAU')
34   AFFE_MODELE     = self.get_cmd('AFFE_MODELE')
35   AFFE_CHAR_MECA  = self.get_cmd('AFFE_CHAR_MECA')
36   STAT_NON_LINE   = self.get_cmd('STAT_NON_LINE')
37   STAT_NON_LINE   = self.get_cmd('STAT_NON_LINE')
38   POST_RELEVE_T   = self.get_cmd('POST_RELEVE_T')
39   CALC_TABLE      = self.get_cmd('CALC_TABLE')
40   CALC_ELEM       = self.get_cmd('CALC_ELEM')
41
42   from Accas import _F
43   from Utilitai.UniteAster import UniteAster
44
45
46 # -- Tests de cohérence
47   __fonczero = DEFI_FONCTION(NOM_PARA = 'INST',
48   VALE     = ( 0,0, 10,0 ),PROL_DROITE='CONSTANT',PROL_GAUCHE='CONSTANT')
49   
50   EPS={}
51   SIG={}
52   
53   CMP_EPS=['EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ']
54   CMP_SIG=['SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ']
55   
56   if SIGM_IMPOSE:        
57      SIG=SIGM_IMPOSE[0].cree_dict_valeurs(SIGM_IMPOSE[0].mc_liste)
58      for i in SIG.keys():
59          if SIG[i]==None : SIG[i]=__fonczero
60   else:
61      for i in range(6):
62          SIG[CMP_SIG[i]]=__fonczero
63
64   if EPSI_IMPOSE:        
65      EPS=EPSI_IMPOSE[0].cree_dict_valeurs(EPSI_IMPOSE[0].mc_liste)
66 #      for i in EPS.keys():
67 #          if EPS[i]==None : EPS[i]=__fonczero
68   else:
69      for i in range(6):
70          EPS[CMP_EPS[i]]=None
71          
72   for index in range(6):
73       iks=CMP_SIG[index]
74       ike=CMP_EPS[index]
75       if EPS[ike]!=None and SIG[iks] != __fonczero :
76          raise ' un seul parmi :' + str(iks) +' '+ str(ike)
77          
78 #   print 'EPS=',EPS
79 #   print 'SIG=',SIG
80 # -- Definition du maillage
81
82   texte_ma = """
83     COOR_3D                                               
84       P0  0.0   0.0   0.0       
85       P1  1.0   0.0   0.0      
86       P2  0.0   1.0   0.0      
87       P3  0.0   0.0   1.0      
88     FINSF
89     TRIA3
90       F1   P0 P3 P2
91       F2   P0 P1 P3
92       F3   P0 P2 P1
93       F4   P1 P2 P3    
94     FINSF
95     TETRA4
96       VOLUME = P0 P1 P2 P3
97     FINSF
98     FIN
99   """
100   UL = UniteAster()
101   umail = UL.Libre(action='ASSOCIER', nom='simu.mail' )
102   
103   fi_mail = open('simu.mail','w')
104   fi_mail.write(texte_ma)
105   fi_mail.close()
106   
107   __MA  =  LIRE_MAILLAGE(UNITE=umail)
108   UL.EtatInit()
109
110
111 #  -- Materiau et modele
112
113   __CHMAT = AFFE_MATERIAU(
114     MAILLAGE = __MA, 
115     AFFE = _F(
116       MAILLE = 'VOLUME', 
117       MATER  =  MATER
118       )
119     )
120
121
122   __MO = AFFE_MODELE(
123     MAILLAGE = __MA, 
124     AFFE     = _F(
125       MAILLE       = ('VOLUME','F1','F2','F3','F4'), 
126       PHENOMENE    = 'MECANIQUE', 
127       MODELISATION = '3D'
128       )
129     )
130
131
132 # -- Mouvement de corps rigide
133
134   __C_RIGIDE = AFFE_CHAR_MECA(
135     MODELE = __MO,
136     DDL_IMPO = _F(NOEUD = 'P0',DX = 0,DY = 0,DZ = 0),
137     LIAISON_DDL = (
138       _F(NOEUD=('P2','P1'),DDL=('DX','DY'),COEF_MULT=(1,-1),COEF_IMPO=0),
139       _F(NOEUD=('P3','P1'),DDL=('DX','DZ'),COEF_MULT=(1,-1),COEF_IMPO=0),
140       _F(NOEUD=('P3','P2'),DDL=('DY','DZ'),COEF_MULT=(1,-1),COEF_IMPO=0),
141       )
142     )
143
144 # -- Chargement en deformation
145
146   __E = [None]*6
147
148   __E[0] = AFFE_CHAR_MECA(
149     MODELE = __MO,
150     DDL_IMPO = _F(NOEUD='P1', DX=1)
151     )
152      
153   __E[1] = AFFE_CHAR_MECA(
154     MODELE = __MO,
155     DDL_IMPO = _F(NOEUD='P2', DY=1)
156     )
157      
158   __E[2] = AFFE_CHAR_MECA(
159     MODELE = __MO,
160     DDL_IMPO = _F(NOEUD='P3', DZ=1)
161     )
162      
163   __E[3] = AFFE_CHAR_MECA(
164     MODELE = __MO,
165     DDL_IMPO = _F(NOEUD='P1', DY=1)
166     )
167      
168   __E[4] = AFFE_CHAR_MECA(
169     MODELE = __MO,
170     DDL_IMPO = _F(NOEUD='P1', DZ=1)
171     )
172      
173   __E[5] = AFFE_CHAR_MECA(
174     MODELE = __MO,
175     DDL_IMPO = _F(NOEUD='P2', DZ=1)
176     )
177      
178      
179 # -- Chargement en contrainte
180
181   __S = [None]*6
182   
183   r33 = 3**-0.5
184   
185   __S[0] = AFFE_CHAR_MECA(
186     MODELE = __MO,
187     FORCE_FACE = (
188       _F(MAILLE='F1', FX=-1),
189       _F(MAILLE='F4', FX= r33),
190       )
191     )
192      
193   __S[1] = AFFE_CHAR_MECA(
194     MODELE = __MO,
195     FORCE_FACE = (
196       _F(MAILLE='F2', FY=-1),
197       _F(MAILLE='F4', FY= r33),
198       )
199     )
200      
201   __S[2] = AFFE_CHAR_MECA(
202     MODELE = __MO,
203     FORCE_FACE = (
204       _F(MAILLE='F3', FZ=-1),
205       _F(MAILLE='F4', FZ= r33),
206       )
207     )
208      
209   __S[3] = AFFE_CHAR_MECA(
210     MODELE = __MO,
211     FORCE_FACE = (
212       _F(MAILLE='F1', FY=-1),
213       _F(MAILLE='F2', FX=-1),
214       _F(MAILLE='F4', FX= r33, FY=r33),
215       )
216     )
217      
218   __S[4] = AFFE_CHAR_MECA(
219     MODELE = __MO,
220     FORCE_FACE = (
221       _F(MAILLE='F1', FZ=-1),
222       _F(MAILLE='F3', FX=-1),
223       _F(MAILLE='F4', FX= r33, FZ=r33),
224       )
225     )
226      
227   __S[5] = AFFE_CHAR_MECA(
228     MODELE = __MO,
229     FORCE_FACE = (
230       _F(MAILLE='F2', FZ=-1),
231       _F(MAILLE='F3', FY=-1),
232       _F(MAILLE='F4', FY= r33, FZ=r33),
233       )
234     )
235      
236      
237 # -- Construction de la charge
238
239   l_char = [  _F(CHARGE=__C_RIGIDE)  ]
240   
241   for i in xrange(6) :
242     ike=CMP_EPS[i]
243     if EPS[ike]:
244        l_char.append(  _F(CHARGE=__E[i],FONC_MULT=EPS[ike])  )
245        
246   for i in xrange(6) :
247     iks=CMP_SIG[i]
248     l_char.append(  _F(CHARGE=__S[i],FONC_MULT=SIG[iks])  )
249       
250 # -- Deroulement du calcul
251   motscles={} 
252   motscles['COMP_INCR']   = COMP_INCR.List_F()
253   motscles['CONVERGENCE'] = CONVERGENCE.List_F()
254   motscles['NEWTON']      = NEWTON.List_F()
255   motscles['INCREMENT']   = INCREMENT.List_F()
256   
257   if   SUIVI_DDL   : 
258      motscles['SUIVI_DDL']   = SUIVI_DDL.List_F()
259      
260
261   __EVOL = STAT_NON_LINE(
262     MODELE = __MO, 
263     CHAM_MATER = __CHMAT, 
264     EXCIT = l_char,
265     ARCHIVAGE = _F(ARCH_ETAT_INIT = 'OUI'),**motscles)
266
267
268   __EVOL = CALC_ELEM(reuse = __EVOL,
269     RESULTAT = __EVOL,
270     OPTION = ('SIEF_ELNO_ELGA','EPSI_ELNO_DEPL','VARI_ELNO_ELGA')
271     )
272     
273      
274 # -- Recuperation des courbes
275
276   __REP_VARI = POST_RELEVE_T(
277     ACTION = (
278       _F(
279         INTITULE  = 'VARI_INT',
280         RESULTAT  =  __EVOL,
281         NOM_CHAM  = 'VARI_ELNO_ELGA',
282         TOUT_CMP  = 'OUI',
283         OPERATION = 'EXTRACTION',
284         NOEUD     = 'P0'
285         ),
286       )
287     )
288
289     
290   __REP_EPSI = POST_RELEVE_T(
291     ACTION = (
292       _F(
293         INTITULE  = 'EPSILON',
294         RESULTAT  =  __EVOL,
295         NOM_CHAM  = 'EPSI_ELNO_DEPL',
296         TOUT_CMP  = 'OUI',
297         OPERATION = 'EXTRACTION',
298         NOEUD     = 'P0'
299         ),
300       )
301     )
302
303   __REP_SIGM = POST_RELEVE_T(
304     ACTION = (
305       _F(
306         INTITULE  = 'SIGMA',
307         RESULTAT  =  __EVOL,
308         NOM_CHAM  = 'SIEF_ELNO_ELGA',
309         TOUT_CMP  = 'OUI',
310         OPERATION = 'EXTRACTION',
311         NOEUD     = 'P0'
312         ),
313       )
314     )
315   self.DeclareOut('REPONSE',self.sd)
316   REPONSE=CALC_TABLE( TABLE=__REP_EPSI,
317            ACTION=_F(OPERATION='COMB',TABLE=__REP_SIGM,NOM_PARA=('INST'), ) )
318
319   REPONSE=CALC_TABLE(reuse=REPONSE, TABLE=REPONSE,
320            ACTION=_F(OPERATION='COMB',TABLE=__REP_VARI,NOM_PARA=('INST'), ) )
321
322
323   return ier
324   
325   
326   
327