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.
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
18 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
20 def simu_point_mat_ops(self, COMP_INCR, MATER, INCREMENT, NEWTON,CONVERGENCE,
21 SUIVI_DDL,SIGM_IMPOSE,EPSI_IMPOSE, INFO, **args) :
23 """Simulation de la reponse d'un point materiel"""
26 # La macro compte pour 1 dans la numerotation des commandes
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')
43 from Utilitai.UniteAster import UniteAster
46 # -- Tests de cohérence
47 __fonczero = DEFI_FONCTION(NOM_PARA = 'INST',
48 VALE = ( 0,0, 10,0 ),PROL_DROITE='CONSTANT',PROL_GAUCHE='CONSTANT')
53 CMP_EPS=['EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ']
54 CMP_SIG=['SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ']
57 SIG=SIGM_IMPOSE[0].cree_dict_valeurs(SIGM_IMPOSE[0].mc_liste)
59 if SIG[i]==None : SIG[i]=__fonczero
62 SIG[CMP_SIG[i]]=__fonczero
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
72 for index in range(6):
75 if EPS[ike]!=None and SIG[iks] != __fonczero :
76 raise ' un seul parmi :' + str(iks) +' '+ str(ike)
80 # -- Definition du maillage
101 umail = UL.Libre(action='ASSOCIER', nom='simu.mail' )
103 fi_mail = open('simu.mail','w')
104 fi_mail.write(texte_ma)
107 __MA = LIRE_MAILLAGE(UNITE=umail)
111 # -- Materiau et modele
113 __CHMAT = AFFE_MATERIAU(
125 MAILLE = ('VOLUME','F1','F2','F3','F4'),
126 PHENOMENE = 'MECANIQUE',
132 # -- Mouvement de corps rigide
134 __C_RIGIDE = AFFE_CHAR_MECA(
136 DDL_IMPO = _F(NOEUD = 'P0',DX = 0,DY = 0,DZ = 0),
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),
144 # -- Chargement en deformation
148 __E[0] = AFFE_CHAR_MECA(
150 DDL_IMPO = _F(NOEUD='P1', DX=1)
153 __E[1] = AFFE_CHAR_MECA(
155 DDL_IMPO = _F(NOEUD='P2', DY=1)
158 __E[2] = AFFE_CHAR_MECA(
160 DDL_IMPO = _F(NOEUD='P3', DZ=1)
163 __E[3] = AFFE_CHAR_MECA(
165 DDL_IMPO = _F(NOEUD='P1', DY=1)
168 __E[4] = AFFE_CHAR_MECA(
170 DDL_IMPO = _F(NOEUD='P1', DZ=1)
173 __E[5] = AFFE_CHAR_MECA(
175 DDL_IMPO = _F(NOEUD='P2', DZ=1)
179 # -- Chargement en contrainte
185 __S[0] = AFFE_CHAR_MECA(
188 _F(MAILLE='F1', FX=-1),
189 _F(MAILLE='F4', FX= r33),
193 __S[1] = AFFE_CHAR_MECA(
196 _F(MAILLE='F2', FY=-1),
197 _F(MAILLE='F4', FY= r33),
201 __S[2] = AFFE_CHAR_MECA(
204 _F(MAILLE='F3', FZ=-1),
205 _F(MAILLE='F4', FZ= r33),
209 __S[3] = AFFE_CHAR_MECA(
212 _F(MAILLE='F1', FY=-1),
213 _F(MAILLE='F2', FX=-1),
214 _F(MAILLE='F4', FX= r33, FY=r33),
218 __S[4] = AFFE_CHAR_MECA(
221 _F(MAILLE='F1', FZ=-1),
222 _F(MAILLE='F3', FX=-1),
223 _F(MAILLE='F4', FX= r33, FZ=r33),
227 __S[5] = AFFE_CHAR_MECA(
230 _F(MAILLE='F2', FZ=-1),
231 _F(MAILLE='F3', FY=-1),
232 _F(MAILLE='F4', FY= r33, FZ=r33),
237 # -- Construction de la charge
239 l_char = [ _F(CHARGE=__C_RIGIDE) ]
244 l_char.append( _F(CHARGE=__E[i],FONC_MULT=EPS[ike]) )
248 l_char.append( _F(CHARGE=__S[i],FONC_MULT=SIG[iks]) )
250 # -- Deroulement du calcul
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()
258 motscles['SUIVI_DDL'] = SUIVI_DDL.List_F()
261 __EVOL = STAT_NON_LINE(
263 CHAM_MATER = __CHMAT,
265 ARCHIVAGE = _F(ARCH_ETAT_INIT = 'OUI'),**motscles)
268 __EVOL = CALC_ELEM(reuse = __EVOL,
270 OPTION = ('SIEF_ELNO_ELGA','EPSI_ELNO_DEPL','VARI_ELNO_ELGA')
274 # -- Recuperation des courbes
276 __REP_VARI = POST_RELEVE_T(
279 INTITULE = 'VARI_INT',
281 NOM_CHAM = 'VARI_ELNO_ELGA',
283 OPERATION = 'EXTRACTION',
290 __REP_EPSI = POST_RELEVE_T(
293 INTITULE = 'EPSILON',
295 NOM_CHAM = 'EPSI_ELNO_DEPL',
297 OPERATION = 'EXTRACTION',
303 __REP_SIGM = POST_RELEVE_T(
308 NOM_CHAM = 'SIEF_ELNO_ELGA',
310 OPERATION = 'EXTRACTION',
315 self.DeclareOut('REPONSE',self.sd)
316 REPONSE=CALC_TABLE( TABLE=__REP_EPSI,
317 ACTION=_F(OPERATION='COMB',TABLE=__REP_SIGM,NOM_PARA=('INST'), ) )
319 REPONSE=CALC_TABLE(reuse=REPONSE, TABLE=REPONSE,
320 ACTION=_F(OPERATION='COMB',TABLE=__REP_VARI,NOM_PARA=('INST'), ) )