From f71727af168c17b6722a5d482ee36aa102cde343 Mon Sep 17 00:00:00 2001 From: Pascale Noyret Date: Fri, 25 May 2007 13:02:40 +0000 Subject: [PATCH] PN : mise a jour 9.0.27 --- Aster/Cata/cataSTA9/Macro/calc_table_ops.py | 5 +- .../cataSTA9/Macro/creation_donnees_homard.py | 18 +- Aster/Cata/cataSTA9/Macro/impr_table_ops.py | 5 +- .../Cata/cataSTA9/Macro/macr_adap_mail_ops.py | 39 +- .../cataSTA9/Macro/macr_ascouf_calc_ops.py | 126 ++-- .../cataSTA9/Macro/macr_aspic_calc_ops.py | 38 +- .../cataSTA9/Macro/macr_cabri_calc_ops.py | 53 +- .../cataSTA9/Macro/macr_lign_coupe_ops.py | 603 +++++++++++++----- Aster/Cata/cataSTA9/Macro/macr_recal_ops.py | 44 +- .../Cata/cataSTA9/Macro/post_k1_k2_k3_ops.py | 6 +- Aster/Cata/cataSTA9/Macro/reca_algo.py | 3 +- .../Cata/cataSTA9/Macro/reca_calcul_aster.py | 26 +- Aster/Cata/cataSTA9/Macro/reca_controles.py | 3 +- Aster/Cata/cataSTA9/Macro/reca_graphique.py | 2 +- Aster/Cata/cataSTA9/Macro/reca_interp.py | 3 +- Aster/Cata/cataSTA9/Macro/reca_message.py | 3 +- Aster/Cata/cataSTA9/Macro/reca_utilitaires.py | 42 +- .../Cata/cataSTA9/Macro/simu_point_mat_ops.py | 171 ++++- 18 files changed, 877 insertions(+), 313 deletions(-) diff --git a/Aster/Cata/cataSTA9/Macro/calc_table_ops.py b/Aster/Cata/cataSTA9/Macro/calc_table_ops.py index 74201a01..01ecfcb0 100644 --- a/Aster/Cata/cataSTA9/Macro/calc_table_ops.py +++ b/Aster/Cata/cataSTA9/Macro/calc_table_ops.py @@ -1,4 +1,4 @@ -#@ MODIF calc_table_ops Macro DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF calc_table_ops Macro DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -34,7 +34,6 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args): from Utilitai.Utmess import UTMESS from Utilitai import transpose from Utilitai.Table import Table, merge - from Utilitai.Sensibilite import NomCompose ier = 0 # La macro compte pour 1 dans la numerotation des commandes @@ -55,7 +54,7 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args): # 0. faut-il utiliser une table dérivée form_sens='\n... SENSIBILITE AU PARAMETRE %s (SD COMP %s)' if args['SENSIBILITE']: - ncomp = NomCompose(TABLE, args['SENSIBILITE'], msg='F') + ncomp = self.jdc.memo_sensi.get_nocomp(TABLE.nom, args['SENSIBILITE'].nom) sdtab = table_jeveux(ncomp) tab = sdtab.EXTR_TABLE() else: diff --git a/Aster/Cata/cataSTA9/Macro/creation_donnees_homard.py b/Aster/Cata/cataSTA9/Macro/creation_donnees_homard.py index ed50681b..e2185578 100644 --- a/Aster/Cata/cataSTA9/Macro/creation_donnees_homard.py +++ b/Aster/Cata/cataSTA9/Macro/creation_donnees_homard.py @@ -1,4 +1,4 @@ -#@ MODIF creation_donnees_homard Macro DATE 30/10/2006 AUTEUR DURAND C.DURAND +#@ MODIF creation_donnees_homard Macro DATE 04/04/2007 AUTEUR ABBAS M.ABBAS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -17,15 +17,17 @@ # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE MCOURTOI M.COURTOIS +# RESPONSABLE ABBAS M.ABBAS """ Cette classe crée le fichier de configuration permettant de lancer HOMARD depuis Code_Aster. """ -__revision__ = "V1.1" +__revision__ = "V1.2" __all__ = [ ] import os import os.path +from types import ListType, TupleType +EnumTypes = (ListType, TupleType) try: from Utilitai.Utmess import UTMESS @@ -183,6 +185,7 @@ class creation_donnees_homard: self.fic_homard_niterp1 = "M_" + self.str_niterp1 + ".hom" else : self.fic_homard_niter = None + self.fic_homard_niterp1 = None # # 6.1. Le pilotage de l'adaptation # @@ -284,7 +287,7 @@ class creation_donnees_homard: if message_erreur is not None : UTMESS("F", self.nom_macro, message_erreur) # - return self.fic_homard_niter + return self.fic_homard_niter, self.fic_homard_niterp1 # ------------------------------------------------------------------------------ def ouvre_fichier (self, nomfic_local) : """Ouvre en écriture un fichier après l'avoir éventuellement détruit @@ -467,8 +470,11 @@ class creation_donnees_homard: self.ecrire_ligne_configuration_2("CCNoMFro", self.dico_configuration["NOM_MED_MAILLAGE_FRONTIERE"]) if self.mots_cles.has_key("GROUP_MA") : if self.mots_cles["GROUP_MA"] is not None : - for group_ma in self.mots_cles["GROUP_MA"] : - self.ecrire_ligne_configuration_2("CCGroFro", group_ma) + if not type(self.mots_cles["GROUP_MA"]) in EnumTypes : + self.ecrire_ligne_configuration_2("CCGroFro", self.mots_cles["GROUP_MA"]) + else : + for group_ma in self.mots_cles["GROUP_MA"] : + self.ecrire_ligne_configuration_2("CCGroFro", group_ma) # # 8. L'éventuel maillage annexe # diff --git a/Aster/Cata/cataSTA9/Macro/impr_table_ops.py b/Aster/Cata/cataSTA9/Macro/impr_table_ops.py index fec1bdbb..06d4c5eb 100644 --- a/Aster/Cata/cataSTA9/Macro/impr_table_ops.py +++ b/Aster/Cata/cataSTA9/Macro/impr_table_ops.py @@ -1,4 +1,4 @@ -#@ MODIF impr_table_ops Macro DATE 06/11/2006 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF impr_table_ops Macro DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -39,7 +39,6 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args): from Cata.cata import table_jeveux from Utilitai.Utmess import UTMESS from Utilitai.UniteAster import UniteAster - from Utilitai.Sensibilite import NomCompose ier=0 # La macro compte pour 1 dans la numerotation des commandes self.set_icmd(1) @@ -83,7 +82,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args): if not type(lps) in EnumTypes: lps=[lps,] for ps in lps: - ncomp = NomCompose(TABLE, ps) + ncomp = self.jdc.memo_sensi.get_nocomp(TABLE.nom, ps.nom) if ncomp != None: sdtab = table_jeveux(ncomp) tabs = sdtab.EXTR_TABLE() diff --git a/Aster/Cata/cataSTA9/Macro/macr_adap_mail_ops.py b/Aster/Cata/cataSTA9/Macro/macr_adap_mail_ops.py index 32a58b2e..e090e52d 100644 --- a/Aster/Cata/cataSTA9/Macro/macr_adap_mail_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macr_adap_mail_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_adap_mail_ops Macro DATE 30/10/2006 AUTEUR DURAND C.DURAND +#@ MODIF macr_adap_mail_ops Macro DATE 04/04/2007 AUTEUR ABBAS M.ABBAS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -692,7 +692,7 @@ def macr_adap_mail_ops ( self, donnees_homard = creation_donnees_homard.creation_donnees_homard ( self.nom, args, dico_configuration ) if ( INFO > 1 ) : donnees_homard.quel_mode ( ) - fic_homard_niter = donnees_homard.creation_configuration ( ) + fic_homard_niter, fic_homard_niterp1 = donnees_homard.creation_configuration ( ) donnees_homard.ecrire_fichier_configuration ( ) if ( mode_homard == "INFO" ) : Nom_Fichier_Donnees = donnees_homard.ecrire_fichier_donnees ( ) @@ -805,29 +805,38 @@ def macr_adap_mail_ops ( self, INFO = INFO, **motscsi ) # #==================================================================== -# 8. Menage des fichiers MED et HOMARD devenus inutiles +# 8. Menage des fichiers devenus inutiles +# On doit imperativement garder le dernier fichier homard produit +# En mode d'information, on garde également les fichiers textes #==================================================================== # - liste_aux = [ fichier_aster_vers_homard ] + liste_aux = [fichier_aster_vers_homard] + liste_aux_bis = os.listdir(Rep_Calc_HOMARD_global) + for fic in liste_aux_bis : + fic_total = os.path.join(Rep_Calc_HOMARD_global, fic) + liste_aux.append(fic_total) + liste_aux_bis = [] if ( mode_homard == "ADAP" ) : liste_aux.append(fichier_homard_vers_aster) - fic = os.path.join(Rep_Calc_HOMARD_global, fic_homard_niter) - liste_aux.append(fic) -#gn print "liste_aux = ",liste_aux + fic = os.path.join(Rep_Calc_HOMARD_global, fic_homard_niterp1) + liste_aux_bis.append(fic) # for fic in liste_aux : - if ( INFO > 1 ) : - print "Destruction du fichier ", fic - if os.path.isfile(fic) : - try : - os.remove(fic) - except os.error,codret_partiel : - self.cr.warn("Code d'erreur de remove : " + str(codret_partiel[0]) + " : " + codret_partiel[1]) - UTMESS("F", self.nom, "Impossible de détruire le fichier : "+fic) + if fic not in liste_aux_bis : + if ( INFO > 1 ) : + print "Destruction du fichier ", fic + if os.path.isfile(fic) : + try : + os.remove(fic) + except os.error,codret_partiel : + self.cr.warn("Code d'erreur de remove : " + str(codret_partiel[0]) + " : " + codret_partiel[1]) + UTMESS("F", self.nom, "Impossible de détruire le fichier : "+fic) #gn print "Répertoire ",Rep_Calc_HOMARD_global #gn os.system("ls -la "+Rep_Calc_HOMARD_global) #gn print "Répertoire ",Rep_Calc_ASTER #gn os.system("ls -la "+Rep_Calc_ASTER) +#gn print os.listdir(Rep_Calc_HOMARD_global) +#gn print "glop :", Rep_Calc_HOMARD_global # #==================================================================== # C'est fini ! diff --git a/Aster/Cata/cataSTA9/Macro/macr_ascouf_calc_ops.py b/Aster/Cata/cataSTA9/Macro/macr_ascouf_calc_ops.py index ac8e6edf..fd92b608 100644 --- a/Aster/Cata/cataSTA9/Macro/macr_ascouf_calc_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macr_ascouf_calc_ops.py @@ -1,21 +1,21 @@ -#@ MODIF macr_ascouf_calc_ops Macro DATE 31/10/2006 AUTEUR REZETTE C.REZETTE +#@ MODIF macr_ascouf_calc_ops Macro DATE 23/05/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT -# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF -# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== @@ -23,7 +23,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA FOND_FISS,CHARGE,RESU_THER,AFFE_MATERIAU, PRES_REP,ECHANGE,TORS_P1,COMP_INCR,COMP_ELAS, SOLVEUR,CONVERGENCE,NEWTON,RECH_LINEAIRE, - INCREMENT,THETA_3D,IMPR_TABLE,IMPRESSION,INFO,TITRE ,**args): + INCREMENT,THETA_3D,IMPR_TABLE,IMPRESSION,INFO,TITRE ,**args): """ Ecriture de la macro MACR_ASCOUF_CALC """ @@ -60,7 +60,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA # DATA GRMAIL = ('COUDE','PEAUINT','PEAUEXT','EXTUBE','CLGV','FACE1','FACE2') #------------------------------------------------------------------ -# +# if CL_BOL_P2_GV!=None : if TYPE_MAILLAGE=='SOUS_EPAIS_COUDE' : message= ' la condition aux limites sur bol a section conique \n' @@ -76,7 +76,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA return ier if (mc_IMPR_TABLE['NOM_PARA']!=None) : impr_table_nom_para= mc_IMPR_TABLE['NOM_PARA'] - for impt in impr_table_nom_para : + for impt in impr_table_nom_para : if impt in ('SI_LONG','SI_CIRC','SI_RADI') : FLAG = 1 if (((impt['ANGLE']==None) and (impt['POSI_ANGUL']==None) and (impt['R_CINTR' ]==None)) or @@ -106,29 +106,31 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA AFFE = _F(TOUT ='OUI', PHENOMENE ='THERMIQUE', MODELISATION='3D' ) ) + #------------------------------------------------------------------ # -# --- commande AFFE_MATERIAU --- +# --- commande AFFE_MATERIAU (thermique)--- # - if CHAM_MATER!=None : self.DeclareOut('affmat',CHAM_MATER) mcfact=[] for mater in mc_AFFE_MATERIAU : if mater['TOUT']!=None : mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF'])) rccmat = mater['MATER'] else : - mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF'])) + mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'])) if mater['GROUP_MA'][:5]=='COUDE' : if TORS_P1!=None : - mcfact.append(_F(GROUP_MA='P1',MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF'])) - mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF'])) + mcfact.append(_F(GROUP_MA='P1',MATER=mater['MATER'])) + mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'])) elif (len(mc_AFFE_MATERIAU)==1) and (CL_BOL_P2_GV==None) : - mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF'])) + mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'])) elif (mater['BOL' ][:3]=='BOL' ) and (CL_BOL_P2_GV==None) : - mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF'])) - affmat = AFFE_MATERIAU( MAILLAGE = MAILLAGE , + mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'])) + + __affmat = AFFE_MATERIAU( MAILLAGE = MAILLAGE , MODELE = modele , AFFE = mcfact ) + #------------------------------------------------------------------ # # --- commande AFFE_CARA_ELEM --- @@ -166,14 +168,60 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_FIN' ]=INCREMENT['NUME_INST_FIN' ] mcfact=_F(LIST_INST=INCREMENT['LIST_INST'],**mcsimp) resuth = THER_LINEAIRE( MODELE = __modthe , - CHAM_MATER = affmat , + CHAM_MATER = __affmat , TEMP_INIT = _F(STATIONNAIRE='OUI',), EXCIT = _F(CHARGE=__chther,), INCREMENT = mcfact, ) # - if CHARGE!=None : self.DeclareOut('chmeth',CHARGE) - chmeth = AFFE_CHAR_MECA( MODELE = modele , - TEMP_CALCULEE = resuth ) +#------------------------------------------------------------------ +# +# --- commande AFFE_MATERIAU (mécanique)--- +# + if CHAM_MATER!=None : self.DeclareOut('affmth',CHAM_MATER) + indther= ECHANGE + mcfact=[] + mcfac2=[] + for mater in mc_AFFE_MATERIAU : + if mater['TOUT']!=None : + mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER'],)) + if indther: + mcfac2.append(_F(NOM_VARC='TEMP',TOUT='OUI', + EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),) + rccmat = mater['MATER'] + else : + mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],)) + if indther: + mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA=mater['GROUP_MA'], + EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),) + if mater['GROUP_MA'][:5]=='COUDE' : + if TORS_P1!=None : + mcfact.append(_F(GROUP_MA='P1',MATER=mater['MATER'],)) + mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],)) + if indther: + mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P1', + EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),) + mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P2', + EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),) + elif (len(mc_AFFE_MATERIAU)==1) and (CL_BOL_P2_GV==None) : + mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],)) + if indther: + mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P2', + EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),) + elif (mater['BOL' ][:3]=='BOL' ) and (CL_BOL_P2_GV==None) : + mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],)) + if indther: + mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P2', + EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),) + + + affmth = AFFE_MATERIAU( MAILLAGE = MAILLAGE , + MODELE = modele , + AFFE = mcfact, + AFFE_VARC= mcfac2,) + + + + #------------------------------------------------------------------ # # --- commande AFFE_CHAR_MECA --- @@ -225,7 +273,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA _conlim = AFFE_CHAR_MECA( MODELE = modele ,**motscles) # # --- commande AFFE_CHAR_MECA --- -# chargement mecanique : pres_rep, effet de fond +# chargement mecanique : pres_rep, effet de fond # if PRES_REP!=None : motscles={} @@ -243,7 +291,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA _chpres = AFFE_CHAR_MECA( MODELE = modele ,**motscles) # # --- commande AFFE_CHAR_MECA --- -# chargement mecanique : torseur d efforts +# chargement mecanique : torseur d efforts # if TORS_P1!=None : _chtor = [None]*6 @@ -267,8 +315,6 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA # mcfex=[] # mot clé facteur EXCIT mcfex.append(_F(CHARGE=_conlim,)) - if ECHANGE!=None : - mcfex.append(_F(CHARGE=chmeth,)) if PRES_REP!=None: if PRES_REP['FONC_MULT']!=None : mcfex.append(_F(CHARGE=_chpres,FONC_MULT=PRES_REP['FONC_MULT'])) @@ -322,7 +368,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA motscles ['INCREMENT' ] =dIncrem self.DeclareOut('nomres',self.sd) nomres = STAT_NON_LINE( MODELE = modele , - CHAM_MATER = affmat , + CHAM_MATER = affmth , CARA_ELEM = carael , INFO = INFO , **motscles) # @@ -341,7 +387,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA # # --- post traitement sous-epaisseurs: ligaments --- # - if mc_IMPR_TABLE!=None: + if mc_IMPR_TABLE!=None: # SECT=('MI','TU','GV') LIG=('FDRO','EXDR','EXTR','EXGA','FGAU','INGA','INTR','INDR') @@ -361,14 +407,14 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA # de la sous-epaisseur # lgrno=[] - for tgrno in l_grno : + for tgrno in l_grno : if tgrno[0][:3] in ('CIR','LON') : lgrno.append(tgrno[0]) elif tgrno[0][:5]=='PCENT' : lgrno.append(tgrno[0]) elif (tgrno[0][:4] in LIG) and (tgrno[0][4:6] not in ('GV','TU','MI')): lgrno.append(tgrno[0]) # motscles={} motscles['ACTION']=[] - for grno in lgrno : + for grno in lgrno : motscles['ACTION'].append(_F(RESULTAT=nomres, NOM_CHAM='SIEF_ELNO_ELGA', TOUT_CMP='OUI', @@ -384,7 +430,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA # motscles={} motscles['ACTION']=[] - for tgrno in lgrno : + for tgrno in lgrno : motscles['ACTION'].append(_F(RESULTAT=nomres, NOM_CHAM='SIEF_ELNO_ELGA', INTITULE=tgrno, @@ -392,7 +438,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA INVARIANT='OUI', OPERATION='EXTRACTION',)) motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR' - + tablig[2]=POST_RELEVE_T(**motscles) # motscles={} @@ -402,7 +448,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA collgrno=aster.getcolljev(nommail.ljust(8)+'.GROUPENO') motscles['ACTION']=[] - for tgrno in lgrno : + for tgrno in lgrno : if tgrno[:3]!='LON' : if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.) else : vecty=(sin(ASEP*pi/180.),0.,cos(ASEP*pi/180.)) diff --git a/Aster/Cata/cataSTA9/Macro/macr_aspic_calc_ops.py b/Aster/Cata/cataSTA9/Macro/macr_aspic_calc_ops.py index ac1b2f66..e8a7eb86 100644 --- a/Aster/Cata/cataSTA9/Macro/macr_aspic_calc_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macr_aspic_calc_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_aspic_calc_ops Macro DATE 31/10/2006 AUTEUR REZETTE C.REZETTE +#@ MODIF macr_aspic_calc_ops Macro DATE 09/05/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -133,14 +133,13 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C PHENOMENE ='THERMIQUE', MODELISATION='3D' ) ) # -# --- commande AFFE_MATERIAU --- +# --- commande AFFE_MATERIAU (thermique)--- # - if CHAM_MATER!=None : self.DeclareOut('affmat',CHAM_MATER) mcfact=[] for mater in mc_AFFE_MATERIAU : if mater['TOUT']!=None : mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF'])) else : mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF'])) - affmat = AFFE_MATERIAU( MAILLAGE = MAILLAGE , + __affmat = AFFE_MATERIAU( MAILLAGE = MAILLAGE , MODELE = modele , AFFE = mcfact ) # @@ -178,14 +177,33 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_FIN' ]=INCREMENT['NUME_INST_FIN' ] mcfact=_F(LIST_INST=INCREMENT['LIST_INST'],**mcsimp) resuth = THER_LINEAIRE( MODELE = __modthe , - CHAM_MATER = affmat , + CHAM_MATER = __affmat , TEMP_INIT = _F(STATIONNAIRE='OUI',), EXCIT = _F(CHARGE=__chther,), INCREMENT = mcfact, ) # - if CHARGE!=None : self.DeclareOut('chmeth',CHARGE) - chmeth = AFFE_CHAR_MECA( MODELE = modele , - TEMP_CALCULEE = resuth ) +# --- commande AFFE_MATERIAU (mécanique)--- +# + if CHAM_MATER!=None : self.DeclareOut('affmth',CHAM_MATER) + indther=0 + if ECHANGE!=None and RESU_THER!=None : indther=1 + mcfact=[] + mcfac2=[] + for mater in mc_AFFE_MATERIAU : + if mater['TOUT']!=None : + mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER'],)) + if indther==1: + mcfac2.append(_F(NOM_VARC='TEMP',TOUT='OUI', + EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF']),) + else: + mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],)) + if indther==1: + mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA=mater['GROUP_MA'], + EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF']),) + affmth = AFFE_MATERIAU( MAILLAGE = MAILLAGE , + MODELE = modele , + AFFE = mcfact, + AFFE_VARC= mcfac2,) # # --- commande AFFE_CHAR_MECA --- # condition aux limites @@ -279,8 +297,6 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C # mcfex=[] # mot clé facteur EXCIT mcfex.append(_F(CHARGE=_conlim,)) - if ECHANGE!=None : - mcfex.append(_F(CHARGE=chmeth,)) if PRES_REP['FONC_MULT']!=None : mcfex.append(_F(CHARGE=_chpres,FONC_MULT=PRES_REP['FONC_MULT'])) else : @@ -341,7 +357,7 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C motscles ['INCREMENT' ] =dIncrem self.DeclareOut('nomres',self.sd) nomres = STAT_NON_LINE( MODELE = modele , - CHAM_MATER = affmat , + CHAM_MATER = affmth , CARA_ELEM = carael , INFO = INFO , **motscles) # diff --git a/Aster/Cata/cataSTA9/Macro/macr_cabri_calc_ops.py b/Aster/Cata/cataSTA9/Macro/macr_cabri_calc_ops.py index 95ac8187..e448efd6 100644 --- a/Aster/Cata/cataSTA9/Macro/macr_cabri_calc_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macr_cabri_calc_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_cabri_calc_ops Macro DATE 10/07/2006 AUTEUR LEBOUVIE F.LEBOUVIER +#@ MODIF macr_cabri_calc_ops Macro DATE 09/05/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -111,9 +111,7 @@ def macr_cabri_calc_ops(self,MAILLAGE,MODELE_MECA,MODELE_THER,CHAR_THER, - # Affectation des materiaux - if CHAM_MATER != None: - self.DeclareOut('_cham',CHAM_MATER) + # Affectation des materiaux (thermique) motscles={} motscles['AFFE']=[] for mat in affemateriau: @@ -128,7 +126,7 @@ def macr_cabri_calc_ops(self,MAILLAGE,MODELE_MECA,MODELE_THER,CHAR_THER, MATER = mat['MATER'], TEMP_REF = mat['TEMP_REF'],) ) - _cham = AFFE_MATERIAU(MAILLAGE=mail, + __cham = AFFE_MATERIAU(MAILLAGE=mail, MODELE=modther, AFFE=motscles['AFFE'], ) @@ -273,7 +271,7 @@ def macr_cabri_calc_ops(self,MAILLAGE,MODELE_MECA,MODELE_THER,CHAR_THER, self.DeclareOut('resuther',RESU_THER) resuther=THER_LINEAIRE(MODELE=modther, - CHAM_MATER=_cham, + CHAM_MATER=__cham, EXCIT=(_F(CHARGE=cl_th1,), _F(CHARGE=cl_th2,), _F(CHARGE=cl_th3,), @@ -281,7 +279,36 @@ def macr_cabri_calc_ops(self,MAILLAGE,MODELE_MECA,MODELE_THER,CHAR_THER, INCREMENT=_F(LIST_INST=transi1,), TEMP_INIT=_F(VALE=temp_ini,), TITRE='CABRI THERMIQUE &DATE &HEURE',); - + + # Affectation des materiaux (mécanique) + if CHAM_MATER != None: + self.DeclareOut('_chamt',CHAM_MATER) + motscles={} + motscles['AFFE']=[] + motscles['AFFE_VARC']=[] + for mat in affemateriau: + if mat['TOUT'] == None: + # Creation de mots-cles pour les AFFE_CHAR_MECA + motscles['AFFE'].append(_F(GROUP_MA=mat['GROUP_MA'], + MATER = mat['MATER'],) ) + motscles['AFFE_VARC'].append(_F(NOM_VARC='TEMP',GROUP_MA=mat['GROUP_MA'], + EVOL=resuther,NOM_CHAM='TEMP', + VALE_REF = mat['TEMP_REF'],)) + else: + # Creation de mots-cles pour les AFFE_CHAR_MECA + motscles['AFFE'].append(_F(TOUT='OUI', + MATER = mat['MATER'], + TEMP_REF = mat['TEMP_REF'],) ) + motscles['AFFE_VARC'].append(_F(NOM_VARC='TEMP',TOUT='OUI', + EVOL=resuther,NOM_CHAM='TEMP', + VALE_REF = mat['TEMP_REF'],)) + + _chamt = AFFE_MATERIAU(MAILLAGE=mail, + MODELE=modther, + AFFE=motscles['AFFE'], + AFFE_VARC=motscles['AFFE_VARC'], + ) + ################################################################# ########## CONDITIONS AUX LIMITES MECANIQUES ################################################################# @@ -342,8 +369,6 @@ def macr_cabri_calc_ops(self,MAILLAGE,MODELE_MECA,MODELE_THER,CHAR_THER, self.DeclareOut('cl_me7',m['CHARGE']) if m['TYPE']=="CONT_JOINT": self.DeclareOut('cl_me8',m['CHARGE']) - if m['TYPE']=="DEFO_THER": - self.DeclareOut('cl_me9',m['CHARGE']) if m['TYPE']=="SERR_ECROU_1": self.DeclareOut('cl_me10',m['CHARGE']) if m['TYPE']=="SERR_ECROU_2": @@ -395,10 +420,6 @@ def macr_cabri_calc_ops(self,MAILLAGE,MODELE_MECA,MODELE_THER,CHAR_THER, CONTACT=_F(GROUP_MA_MAIT='SCBJ', GROUP_MA_ESCL='SCJB',), INFO=2,); - # Deformation thermique - cl_me9=AFFE_CHAR_MECA( MODELE=modmeca, - TEMP_CALCULEE=resuther, - INFO=2,); # Serrage ecrou/goujon (pre-tensionnement) cl_me10=AFFE_CHAR_MECA_F(MODELE=modmeca, @@ -497,7 +518,7 @@ def macr_cabri_calc_ops(self,MAILLAGE,MODELE_MECA,MODELE_THER,CHAR_THER, # Parametres du calcul if comp_incr == 1: resumeca=STAT_NON_LINE(MODELE=modmeca, - CHAM_MATER=_cham, + CHAM_MATER=_chamt, EXCIT=(_F(CHARGE=cl_me1,), _F(CHARGE=cl_me2,), _F(CHARGE=cl_me3,), @@ -506,7 +527,6 @@ def macr_cabri_calc_ops(self,MAILLAGE,MODELE_MECA,MODELE_THER,CHAR_THER, _F(CHARGE=cl_me6,), _F(CHARGE=cl_me7,), _F(CHARGE=cl_me8,), - _F(CHARGE=cl_me9,), _F(CHARGE=cl_me10,), _F(CHARGE=cl_me11,), ), @@ -518,7 +538,7 @@ def macr_cabri_calc_ops(self,MAILLAGE,MODELE_MECA,MODELE_THER,CHAR_THER, TITRE='CABRI THERMOM\xe9CANIQUE &DATE &HEURE',); else: resumeca=STAT_NON_LINE(MODELE=modmeca, - CHAM_MATER=_cham, + CHAM_MATER=_chamt, EXCIT=(_F(CHARGE=cl_me1,), _F(CHARGE=cl_me2,), _F(CHARGE=cl_me3,), @@ -527,7 +547,6 @@ def macr_cabri_calc_ops(self,MAILLAGE,MODELE_MECA,MODELE_THER,CHAR_THER, _F(CHARGE=cl_me6,), _F(CHARGE=cl_me7,), _F(CHARGE=cl_me8,), - _F(CHARGE=cl_me9,), _F(CHARGE=cl_me10,), _F(CHARGE=cl_me11,), ), diff --git a/Aster/Cata/cataSTA9/Macro/macr_lign_coupe_ops.py b/Aster/Cata/cataSTA9/Macro/macr_lign_coupe_ops.py index 3305c818..568a8cea 100644 --- a/Aster/Cata/cataSTA9/Macro/macr_lign_coupe_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macr_lign_coupe_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_lign_coupe_ops Macro DATE 05/03/2007 AUTEUR GALENNE E.GALENNE +#@ MODIF macr_lign_coupe_ops Macro DATE 22/05/2007 AUTEUR GALENNE E.GALENNE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -38,7 +38,7 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma): elif dime ==3 : LCMP=['DX','DY','DZ'] TYPE_CHAM='VECT_3D' - elif NOM_CHAM in ('SIGM_NOEU_DEPL','SIEF_ELNO_ELGA','SIGM_NOEU_SIEF','SIGM_NOEU_ELGA','SIGM_NOEU_COQU'): + elif NOM_CHAM in ('SIGM_NOEU_DEPL','SIEF_ELNO_ELGA','SIGM_NOEU_SIEF','SIGM_NOEU_ELGA','SIGM_NOEU_COQU','SIGM_ELNO_DEPL'): if dime == 2: LCMP=['SIXX','SIYY','SIZZ','SIXY'] TYPE_CHAM='TENS_2D' @@ -47,72 +47,78 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma): TYPE_CHAM='TENS_3D' - if m['TYPE']=='SEGMENT': - # --- determination des angles nautiques - cx1=m['COOR_EXTR'][0]-m['COOR_ORIG'][0] - cx2=m['COOR_EXTR'][1]-m['COOR_ORIG'][1] - cx3=0. - if dime == 3: - cx3=m['COOR_EXTR'][2]-m['COOR_ORIG'][2] - nvx=sqrt(cx1**2+cx2**2+cx3**2) - if abs(nvx) < epsi: - UTMESS('F', "MACR_LIGN_COUPE", "definition incorrecte de la ligne de coupe") - cx1=cx1/nvx - cx2=cx2/nvx - cx3=cx3/nvx - cy1=m['VECT_Y'][0] - cy2=m['VECT_Y'][1] - cy3=0. - if dime == 3: - cy3=m['VECT_Y'][2] - nvy=sqrt(cy1**2+cy2**2+cy3**2) - if abs(nvy) < epsi: - UTMESS('F', "MACR_LIGN_COUPE", "valeurs incorrectes pour VECT_Y") - cy1=cy1/nvy - cy2=cy2/nvy - cy3=cy3/nvy - if ((abs(cx1-cy1) epsi : - cz1=cx2*cy3-cx3*cy2 - cz2=cx3*cy1-cx1*cy3 - cz3=cx1*cy2-cx2*cy1 - nvz=sqrt(cz1**2+cz2**2+cz3**2) - cz1=cz1/nvz - cz2=cz2/nvz - cz3=cz3/nvz - cy1=cz2*cx3-cz3*cx2 - cy2=cz3*cx1-cz1*cx3 - cy3=cz1*cx2-cz2*cx1 + if m['TYPE']=='SEGMENT' and m['REPERE'] != 'CYLINDRIQUE' : + + if m['REPERE'] == 'LOCAL': + # --- determination des angles nautiques + cx1=m['COOR_EXTR'][0]-m['COOR_ORIG'][0] + cx2=m['COOR_EXTR'][1]-m['COOR_ORIG'][1] + cx3=0. + if dime == 3: + cx3=m['COOR_EXTR'][2]-m['COOR_ORIG'][2] + nvx=sqrt(cx1**2+cx2**2+cx3**2) + if abs(nvx) < epsi: + UTMESS('F', "MACR_LIGN_COUPE", "definition incorrecte de la ligne de coupe") + cx1=cx1/nvx + cx2=cx2/nvx + cx3=cx3/nvx + cy1=m['VECT_Y'][0] + cy2=m['VECT_Y'][1] + cy3=0. + if dime == 3: + cy3=m['VECT_Y'][2] nvy=sqrt(cy1**2+cy2**2+cy3**2) + if abs(nvy) < epsi: + UTMESS('F', "MACR_LIGN_COUPE", "valeurs incorrectes pour VECT_Y") cy1=cy1/nvy cy2=cy2/nvy cy3=cy3/nvy - UTMESS('A','MACR_LIGN_COUPE','LE VECTEUR Y N EST PAS ORTHOGONAL A LA LIGNE DE COUPE' + if ((abs(cx1-cy1) epsi : + cz1=cx2*cy3-cx3*cy2 + cz2=cx3*cy1-cx1*cy3 + cz3=cx1*cy2-cx2*cy1 + nvz=sqrt(cz1**2+cz2**2+cz3**2) + cz1=cz1/nvz + cz2=cz2/nvz + cz3=cz3/nvz + cy1=cz2*cx3-cz3*cx2 + cy2=cz3*cx1-cz1*cx3 + cy3=cz1*cx2-cz2*cx1 + nvy=sqrt(cy1**2+cy2**2+cy3**2) + cy1=cy1/nvy + cy2=cy2/nvy + cy3=cy3/nvy + UTMESS('A','MACR_LIGN_COUPE','LE VECTEUR Y N EST PAS ORTHOGONAL A LA LIGNE DE COUPE' +'LE VECTEUR Y A ETE ORTHONORMALISE POUR VOUS') - UTMESS('A','MACR_LIGN_COUPE','VECT_Y=('+str(cy1)+','+str(cy2)+','+str(cy3)+')') - else: - cz1=cx2*cy3-cx3*cy2 - cz2=cx3*cy1-cx1*cy3 - cz3=cx1*cy2-cx2*cy1 - beta=0. - gamma=0. - if dime ==2: - alpha = atan2(cx2,cx1) - else: - if cx1**2 + cx2**2 > epsi : - alpha=atan2(cx2,cx1) - beta=asin(cx3) - gamma=atan2(cy3,cz3) + UTMESS('A','MACR_LIGN_COUPE','VECT_Y=('+str(cy1)+','+str(cy2)+','+str(cy3)+')') + else: + cz1=cx2*cy3-cx3*cy2 + cz2=cx3*cy1-cx1*cy3 + cz3=cx1*cy2-cx2*cy1 + beta=0. + gamma=0. + if dime ==2: + alpha = atan2(cx2,cx1) else: -# alpha=atan2(cy1,cz1) - alpha=atan2(-cy1,cy2) - beta=asin(cx3) - gamma=0. - alpha=alpha*180/pi - beta=beta*180/pi - gamma=gamma*180/pi + if cx1**2 + cx2**2 > epsi : + alpha=atan2(cx2,cx1) + beta=-asin(cx3) + gamma=atan2(cy3,cz3) + else: + alpha=atan2(-cy1,cy2) + beta=-asin(cx3) + gamma=0. + alpha=alpha*180/pi + beta=beta*180/pi + gamma=gamma*180/pi + + elif m['REPERE'] == 'UTILISATEUR': + alpha=m['ANGL_NAUT'][0] + beta =m['ANGL_NAUT'][1] + gamma=m['ANGL_NAUT'][2] motscles={} motscles['MODI_CHAM']=[] @@ -128,29 +134,183 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma): if m['TYPE']=='ARC': + if m['REPERE'] == 'CYLINDRIQUE' : + motscles={} + motscles['MODI_CHAM']=[] + motscles['DEFI_REPERE']=[] + motscles['MODI_CHAM'].append(_F(NOM_CHAM=NOM_CHAM,NOM_CMP=LCMP,TYPE_CHAM=TYPE_CHAM),) + ORIGINE=[] + ORIGINE.append(m['CENTRE'][0]) + ORIGINE.append(m['CENTRE'][1]) + if dime ==3: + ORIGINE.append(m['CENTRE'][2]) + AXE_Z=[] + AXE_Z.append(m['DNOR'][0]) + AXE_Z.append(m['DNOR'][1]) + AXE_Z.append(m['DNOR'][2]) + motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=ORIGINE,AXE_Z=AXE_Z),) + elif dime ==2: + motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=ORIGINE,),) + __remodr=MODI_REPERE(RESULTAT=resin,**motscles) + else : + UTMESS("F","MACR_LIGN_COUPE","LE TYPE "+m['TYPE']+" N'EST PAS COHERENT AVEC LE CHOIX DU REPERE ( REPERE "+m['REPERE']+" ).") + + + + if m['TYPE'][:5]=='GROUP' or m['TYPE']=='SEGMENT': + + if m['TYPE'][:5]=='GROUP' and m['REPERE'] == 'LOCAL': + # determination du repère local (v1,v2,v3) + # --------------------------------------- + noma=mail.nom + collgrma=aster.getcolljev(noma.ljust(8)+'.GROUPEMA') + collcnx =aster.getcolljev(noma.ljust(8)+'.CONNEX') + coord =aster.getvectjev(noma.ljust(8)+'.COORDO .VALE') + cnom =aster.getvectjev(noma.ljust(8)+'.NOMNOE') + + numa=collgrma[nomgrma.ljust(8)] + dictu={} +# initialisations + for ima in numa: + n1=collcnx[ima][0] + n2=collcnx[ima][1] + dictu[n1]=[] + dictu[n2]=[] +# determination du vecteur tangent (v1) + normalisation + for ima in numa: + vectu1=[] + vectu2=[] + n1=collcnx[ima][0] + n2=collcnx[ima][1] + ux=coord[3*(n2-1)]-coord[3*(n1-1)] + uy=coord[3*(n2-1)+1]-coord[3*(n1-1)+1] + vectu1.append(ux) + vectu1.append(uy) + vectu2.append(ux) + vectu2.append(uy) + if dime ==3 : + uz=coord[3*(n2-1)+2]-coord[3*(n1-1)+2] + vectu1.append(uz) + vectu2.append(uz) + dictu[n1].append(vectu1) + dictu[n2].append(vectu2) + for i in dictu: + if len(dictu[i])==2: + dictu[i][0][0]=dictu[i][0][0]+dictu[i][1][0] + dictu[i][0][1]=dictu[i][0][1]+dictu[i][1][1] + if dime==3:dictu[i][0][2]=dictu[i][0][2]+dictu[i][1][2] + del dictu[i][1] + for i in dictu: + if dime==2: + norm=sqrt(dictu[i][0][0]**2+dictu[i][0][1]**2) + dictu[i][0][0]=dictu[i][0][0]/norm + dictu[i][0][1]=dictu[i][0][1]/norm + elif dime==3: + norm=sqrt(dictu[i][0][0]**2+dictu[i][0][1]**2+dictu[i][0][2]**2) + dictu[i][0][0]=dictu[i][0][0]/norm + dictu[i][0][1]=dictu[i][0][1]/norm + dictu[i][0][2]=dictu[i][0][2]/norm +# determination du vecteur normal (v2): +# on projete VECT_Y sur le plan orthogonal au vecteur v1. +# (ce vecteur normal est obtenu par 2 produits vectoriels successifs en 3D) + if dime==3: + norm=sqrt(m['VECT_Y'][0]**2+m['VECT_Y'][1]**2+m['VECT_Y'][2]**2) + tmpy=[m['VECT_Y'][0]/norm,m['VECT_Y'][1]/norm,m['VECT_Y'][2]/norm] + j=0 + __resu=[None]*(len(dictu)+1) + __resu[0]=resin + for i in dictu: + j=j+1 + vecty=[] + if dime==2: + vecty.append(-dictu[i][0][1]) + vecty.append(dictu[i][0][0]) + dictu[i].append(vecty) + elif dime==3: + # v3= v1 vectoriel vect_y + vectz=[] + vectz.append(dictu[i][0][1]*tmpy[2]-dictu[i][0][2]*tmpy[1]) + vectz.append(dictu[i][0][2]*tmpy[0]-dictu[i][0][0]*tmpy[2]) + vectz.append(dictu[i][0][0]*tmpy[1]-dictu[i][0][1]*tmpy[0]) + normz=sqrt(vectz[0]**2+vectz[1]**2+vectz[2]**2) + vectz[0]=vectz[0]/normz + vectz[1]=vectz[1]/normz + vectz[2]=vectz[2]/normz + vecty.append(vectz[1]*dictu[i][0][2]-vectz[2]*dictu[i][0][1]) + vecty.append(vectz[2]*dictu[i][0][0]-vectz[0]*dictu[i][0][2]) + vecty.append(vectz[0]*dictu[i][0][1]-vectz[1]*dictu[i][0][0]) + normy=sqrt(vecty[0]**2+vecty[1]**2+vecty[2]**2) + vecty[0]=vecty[0]/normy + vecty[1]=vecty[1]/normy + vecty[2]=vecty[2]/normy + dictu[i].append(vecty) + dictu[i].append(vectz) + cx1=dictu[i][0][0] + cx2=dictu[i][0][1] + cy1=dictu[i][1][0] + cy2=dictu[i][1][1] + if dime==3: + cx3=dictu[i][0][2] + cy3=dictu[i][1][2] + cz1=dictu[i][2][0] + cz2=dictu[i][2][1] + cz3=dictu[i][2][2] + + # determination des angles nautiques (alpha,beta,gamma) + # ---------------------------------------------------- + beta=0. + gamma=0. + if dime ==2: + alpha = atan2(cx2,cx1) + else: + if cx1**2 + cx2**2 > epsi : + alpha=atan2(cx2,cx1) + beta=-asin(cx3) + gamma=atan2(cy3,cz3) + else: + alpha=atan2(-cy1,cy2) + beta=-asin(cx3) + gamma=0. + alpha=alpha*180/pi + beta=beta*180/pi + gamma=gamma*180/pi + motscles={} + motscles['MODI_CHAM']=[] + motscles['DEFI_REPERE']=[] + noeu=dictu.keys() + motscles['MODI_CHAM'].append(_F(NOM_CHAM=NOM_CHAM,NOM_CMP=LCMP,TYPE_CHAM=TYPE_CHAM,NOEUD=cnom[noeu[j-1]-1]),) + ANGL_NAUT=[] + ANGL_NAUT.append(alpha) + if dime ==3: + ANGL_NAUT.append(beta) + ANGL_NAUT.append(gamma) + motscles['DEFI_REPERE'].append(_F(REPERE='UTILISATEUR',ANGL_NAUT=ANGL_NAUT),) + __resu[j]=MODI_REPERE(RESULTAT=__resu[j-1],**motscles) + __remodr=__resu[j] + + motscles={} motscles['MODI_CHAM']=[] motscles['DEFI_REPERE']=[] motscles['MODI_CHAM'].append(_F(NOM_CHAM=NOM_CHAM,NOM_CMP=LCMP,TYPE_CHAM=TYPE_CHAM),) - ORIGINE=[] - ORIGINE.append(m['CENTRE'][0]) - ORIGINE.append(m['CENTRE'][1]) - if dime ==3: - vy = m['VECT_Y'] - dn = m['DNOR'] - if vy != dn : - message = 'AVEC TYPE=ARC, IL FAUT OBLIGATOIREMENT QUE VECT_Y SOIT EGAL A DNOR \n POUR EXPRIMER LE RESULTAT DANS LE REPERE LOCAL. \n' - message = message +' ON POURSUIT LE CALCUL EN PRENANT VECT_Y = DNOR.' - UTMESS('A','MACR_LIGN_COUPE',message) - ORIGINE.append(m['CENTRE'][2]) - AXE_Z=[] - AXE_Z.append(m['DNOR'][0]) - AXE_Z.append(m['DNOR'][1]) - AXE_Z.append(m['DNOR'][2]) - motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=ORIGINE,AXE_Z=AXE_Z),) - elif dime ==2: - motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=ORIGINE,),) - __remodr=MODI_REPERE(RESULTAT=resin,**motscles) + if m['REPERE'] == 'CYLINDRIQUE' : + if dime ==3: + motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=m['ORIGINE'],AXE_Z=m['AXE_Z']),) + elif dime ==2: + motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=m['ORIGINE'],),) + __remodr=MODI_REPERE(RESULTAT=resin,**motscles) + elif m['REPERE'] == 'UTILISATEUR': + alpha=m['ANGL_NAUT'][0] + beta =m['ANGL_NAUT'][1] + gamma=m['ANGL_NAUT'][2] + ANGL_NAUT=[] + ANGL_NAUT.append(alpha) + if dime ==3: + ANGL_NAUT.append(beta) + ANGL_NAUT.append(gamma) + motscles['DEFI_REPERE'].append(_F(REPERE='UTILISATEUR',ANGL_NAUT=ANGL_NAUT),) + __remodr=MODI_REPERE(RESULTAT=resin,**motscles) + return __remodr @@ -187,7 +347,22 @@ def crea_noeu_lig_coup(dimension,pt1,pt2,anglj,dnor): y=pt2[1]+b*cos(anglr)+sin(anglr)*(a*d3-c*d1)/d z=pt2[2]+c*cos(anglr)+sin(anglr)*(b*d1-a*d2)/d return x,y,z +######################################################################## +# determination de la distance min entre 2 points consécutifs de la ligne de coupe +def dist_min_deux_points(mail): + from math import sqrt + import aster + nno=aster.getvectjev(mail.nom.ljust(8)+'.DIME')[0] + l_coor1=[] + l_coor2=[] + for i in range(nno-1): + l_coor1=aster.getvectjev(mail.nom.ljust(8)+'.COORDO .VALE',3*(i),3) + l_coor2=aster.getvectjev(mail.nom.ljust(8)+'.COORDO .VALE',3*(i+1),3) + d=sqrt( (l_coor1[0]-l_coor2[0])**2+(l_coor1[1]-l_coor2[1])**2+(l_coor1[2]-l_coor2[2])**2) + if i == 0 : dist=d + else : dist=min(d,dist) + return dist ######################################################################## # script PYTHON de creation d un maillage de ligne de coupe @@ -339,8 +514,9 @@ def crea_mail_lig_coup(dimension,lignes,groups,arcs): ######################################################################## -def macr_lign_coupe_ops(self,RESULTAT,UNITE_MAILLAGE,LIGN_COUPE,NOM_CHAM, - MODELE,GROUP_MA,MAILLE,**args): +def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE, + NOM_CHAM,MODELE,**args): + """ Ecriture de la macro MACR_LIGN_COUPE """ @@ -360,21 +536,68 @@ def macr_lign_coupe_ops(self,RESULTAT,UNITE_MAILLAGE,LIGN_COUPE,NOM_CHAM, POST_RELEVE_T =self.get_cmd('POST_RELEVE_T') CREA_TABLE =self.get_cmd('CREA_TABLE') MODI_REPERE =self.get_cmd('MODI_REPERE') + CREA_RESU =self.get_cmd('CREA_RESU') + CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE') # La macro compte pour 1 dans la numerotation des commandes self.set_icmd(1) - - nomresu=RESULTAT.nom - l_modele=aster.getvectjev(nomresu.ljust(19)+'.MODL') - n_modele=string.strip(l_modele[0]) - if n_modele=='' : - if MODELE==None: - UTMESS('F', "MACR_LIGN_COUPE", "nom du modele absent dans le concept resultat "+nomresu) - else : n_modele=MODELE.nom + + mcORDR={} + + if RESULTAT != None: + if args['NUME_ORDRE'] != None : + mcORDR['NUME_ORDRE']=args['NUME_ORDRE'] + elif args['LIST_ORDRE'] != None: + mcORDR['LIST_ORDRE']=args['LIST_ORDRE'] + elif args['INST'] != None: + mcORDR['INST']=args['INST'] + elif args['INST'] != None: + mcORDR['INST']=args['INST'] + elif args['LIST_INST'] != None: + mcORDR['LIST_INST']=args['LIST_INST'] + else : + mcORDR['TOUT_ORDRE']='OUI' + + nomresu=RESULTAT.nom + l_modele=aster.getvectjev(nomresu.ljust(19)+'.MODL') + n_modele=string.strip(l_modele[0]) + if n_modele=='' : + if MODELE==None: + UTMESS('F', "MACR_LIGN_COUPE", "nom du modele absent dans le concept resultat "+nomresu) + else : n_modele=MODELE.nom + + elif CHAM_GD != None: + mcORDR['TOUT_ORDRE']='OUI' + if MODELE==None: + UTMESS('F', "MACR_LIGN_COUPE", "veuillez renseigner le MODELE si vous utilisez un CHAM_GD ") + else : n_modele=MODELE.nom + # récupération de la grandeur du champ + n_cham=CHAM_GD.nom + catagd=aster.getvectjev("&CATA.GD.NOMGD") + desc=aster.getvectjev(string.ljust(n_cham,19)+'.DESC') + if desc!= None: + nomgd=catagd[desc[0]-1] + else: + celd=aster.getvectjev(string.ljust(n_cham,19)+'.CELD') + nomgd=catagd[celd[0]-1] + # détermination du type de résultat à créer + if nomgd[:6] == 'TEMP_R' : TYPE_RESU='EVOL_THER' + elif nomgd[:6] == 'DEPL_R' : TYPE_RESU='EVOL_ELAS' + elif nomgd[:6] == 'SIEF_R' : + if NOM_CHAM[:4]=='SIGM':TYPE_RESU='EVOL_ELAS' + elif NOM_CHAM[:4]=='SIEF':TYPE_RESU='EVOL_NOLI' + # création d'un concept résultat à partir du champ CHAM_GD + __resuch=CREA_RESU(OPERATION='AFFE', + NOM_CHAM=NOM_CHAM, TYPE_RESU=TYPE_RESU, + AFFE=_F(CHAM_GD=CHAM_GD,INST=0.),) + RESULTAT=__resuch l_mailla=aster.getvectjev(n_modele.ljust(8)+'.MODELE .NOMA') n_mailla=string.strip(l_mailla[0]) dime=aster.getvectjev(n_mailla.ljust(8)+'.DIME')[5] - collgrno=aster.getcolljev(n_mailla.ljust(8)+'.GROUPENO') + collgrma=aster.getcolljev(n_mailla.ljust(8)+'.GROUPEMA') + typma=aster.getvectjev(n_mailla.ljust(8)+'.TYPMAIL') + connex=aster.getcolljev(n_mailla.ljust(8)+'.CONNEX') + ltyma =aster.getvectjev("&CATA.TM.NOMTM") lignes=[] groups=[] @@ -399,6 +622,7 @@ def macr_lign_coupe_ops(self,RESULTAT,UNITE_MAILLAGE,LIGN_COUPE,NOM_CHAM, arcs.append((m['COOR_ORIG'],m['CENTRE'],m['NB_POINTS'],m['ANGLE'],m['DNOR'])) elif m['TYPE']=='GROUP_NO': ngrno=m['GROUP_NO'].ljust(8).upper() + collgrno=aster.getcolljev(n_mailla.ljust(8)+'.GROUPENO') if ngrno not in collgrno.keys() : UTMESS('F', "MACR_LIGN_COUPE", "le group_no "+ngrno+" n est pas dans le maillage "+n_mailla) grpn=collgrno[ngrno] @@ -406,6 +630,26 @@ def macr_lign_coupe_ops(self,RESULTAT,UNITE_MAILLAGE,LIGN_COUPE,NOM_CHAM, for node in grpn: l_coor_group.append(aster.getvectjev(n_mailla.ljust(8)+'.COORDO .VALE',3*(node-1),3)) groups.append(l_coor_group) + elif m['TYPE']=='GROUP_MA': + ngrma=m['GROUP_MA'].ljust(8).upper() + if ngrma not in collgrma.keys() : + UTMESS('F', "MACR_LIGN_COUPE", "le group_ma "+ngrma+" n est pas dans le maillage "+n_mailla) + grpm=collgrma[ngrma] + for ma in grpm: + if ltyma[typma[ma-1]-1][:3] != 'SEG' : + nomma=aster.getvectjev(n_mailla.ljust(8)+'.NOMMAI') + UTMESS('F', "MACR_LIGN_COUPE", "le group_ma "+ngrma+" contient la maille "+ + nomma[ma-1]+"qui n'est pas de type SEG.") + __mailla=CREA_MAILLAGE(MAILLAGE= m['MAILLAGE'],) + __mailla=DEFI_GROUP( reuse=__mailla,MAILLAGE= __mailla, + CREA_GROUP_NO=_F(OPTION='NOEUD_ORDO',NOM=str(m['GROUP_MA']),GROUP_MA=m['GROUP_MA']),) + collgrno=aster.getcolljev(__mailla.nom.ljust(8)+'.GROUPENO') + grpn=collgrno[str(m['GROUP_MA']).ljust(8)] + l_coor_group=[ngrma,] + for node in grpn: + l_coor_group.append(aster.getvectjev(n_mailla.ljust(8)+'.COORDO .VALE',3*(node-1),3)) + groups.append(l_coor_group) + if arcs!=[] and (lignes!=[] or groups!=[]) : message = 'On ne peut pas combiner des lignes de coupes de type ARC avec des lignes de coupes SEGMENT ou GROUP_NO. \n' @@ -426,18 +670,21 @@ def macr_lign_coupe_ops(self,RESULTAT,UNITE_MAILLAGE,LIGN_COUPE,NOM_CHAM, UL.EtatInit(UNITE_MAILLAGE) # Lecture du maillage de seg2 contenant toutes les lignes de coupe - __macou=LIRE_MAILLAGE(UNITE=UNITE_MAILLAGE,); - + + # distance min entre 2 points de la ligne de coupe (utile pour PROJ_CHAMP) + dmin=dist_min_deux_points(__macou) + motscles={} iocc=1 motscles['CREA_GROUP_NO']=[] for m in LIGN_COUPE : - if m['TYPE'] != 'GROUP_NO' : + if m['TYPE'] in ('GROUP_NO','GROUP_MA') : + motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=m[m['TYPE']].ljust(8).upper(),) ) + else : motscles['CREA_GROUP_NO'].append(_F(GROUP_MA='LICOU'+str(iocc),) ) iocc=iocc+1 - elif m['GROUP_NO']!=None : - motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=m['GROUP_NO'].ljust(8).upper(),) ) + __macou=DEFI_GROUP( reuse =__macou , MAILLAGE=__macou , **motscles ); if AsType(RESULTAT).__name__ in ('evol_elas','evol_noli') : @@ -453,97 +700,140 @@ def macr_lign_coupe_ops(self,RESULTAT,UNITE_MAILLAGE,LIGN_COUPE,NOM_CHAM, motscles={} motscles['VIS_A_VIS']=[] - if GROUP_MA != None : - motscles['VIS_A_VIS'].append(_F(GROUP_MA_1 = GROUP_MA,TOUT_2='OUI'),) - if MAILLE != None : - motscles['VIS_A_VIS'].append(_F(MAILLE_1 = MAILLE,TOUT_2='OUI'),) - + motscles[mcORDR.keys()[0]]=mcORDR.values()[0] + if args['VIS_A_VIS']!=None: + for v in args['VIS_A_VIS']: + if v['GROUP_MA_1']!=None: + motscles['VIS_A_VIS'].append(_F(GROUP_MA_1 = v['GROUP_MA_1'],TOUT_2='OUI'),) + elif v['MAILLE_1']!=None: + motscles['VIS_A_VIS'].append(_F(MAILLE_1 = v['MAILLE_1'],TOUT_2='OUI'),) + if n_modele in self.get_global_contexte().keys() : MODELE_1=self.get_global_contexte()[n_modele] else : MODELE_1=self.jdc.current_context[n_modele] __recou=PROJ_CHAMP(METHODE='ELEM', RESULTAT=RESULTAT, MODELE_1=MODELE_1, + DISTANCE_MAX=dmin*0.001, MODELE_2=__mocou, TYPE_CHAM='NOEU', - NOM_CHAM=NOM_CHAM, **motscles); + NOM_CHAM=NOM_CHAM, **motscles); - - - # Expression des contraintes aux noeuds ou des déplacements dans le repere local __remodr=__recou icham=0 ioc2=0 - jarc=0 mcACTION=[] angtab=[] + if AsType(RESULTAT).__name__ in ('evol_elas','evol_noli') : - if NOM_CHAM in ('DEPL','SIEF_ELNO_ELGA','SIGM_NOEU_DEPL','SIGM_NOEU_SIEF','SIGM_NOEU_ELGA','SIGM_NOEU_COQU'):icham=1 + + if NOM_CHAM in ('DEPL','SIEF_ELNO_ELGA','SIGM_NOEU_DEPL','SIGM_NOEU_SIEF','SIGM_NOEU_ELGA','SIGM_NOEU_COQU','SIGM_ELNO_DEPL'):icham=1 + for m in LIGN_COUPE : - if m['TYPE'] =='ARC' : jarc=jarc+1 - if m['VECT_Y'] !=None and icham==1: - if m['TYPE'] =='ARC' : nomgrma=arcgma[jarc-1] - else : nomgrma=' ' - __remodr=crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,__recou,__macou,nomgrma) - if m['TYPE'] != 'GROUP_NO' : - ioc2=ioc2+1 - groupe='LICOU'+str(ioc2) - if m['INTITULE'] !=None : intitl=m['INTITULE'] - else : intitl='l.coupe'+str(ioc2) - elif m['GROUP_NO']!=None : - groupe=m['GROUP_NO'].ljust(8).upper() - if m['INTITULE'] !=None : intitl=m['INTITULE'] - else : intitl=groupe - mcACTION.append( _F(INTITULE = intitl, + motscles={} + motscles['OPERATION']=m['OPERATION'] + if m['NOM_CMP']!=None: + motscles['NOM_CMP']=m['NOM_CMP'] + if m['TRAC_NOR']!=None: + motscles['TRAC_NOR']=m['TRAC_NOR'] + elif m['TRAC_DIR']!=None: + motscles['TRAC_DIR']=m['TRAC_DIR'] + motscles['DIRECTION']=m['DIRECTION'] + elif m['INVARIANT']!=None: + motscles['INVARIANT']=m['INVARIANT'] + elif m['RESULTANTE']!=None: + motscles['RESULTANTE']=m['RESULTANTE'] + elif m['ELEM_PRINCIPAUX']!=None: + motscles['ELEM_PRINCIPAUX']=m['ELEM_PRINCIPAUX'] + else: + motscles['TOUT_CMP']='OUI' + + # on définit le groupe de noeud pour post_releve_t + if m['TYPE'] in ('GROUP_NO','GROUP_MA'): + groupe=m[m['TYPE']].ljust(8).upper() + nomgrma=groupe + else: + ioc2=ioc2+1 + groupe='LICOU'+str(ioc2) + nomgrma=' ' + + # on definit l'intitulé + if m['INTITULE'] !=None : intitl=m['INTITULE'] + elif m['TYPE'] in ('GROUP_NO','GROUP_MA') : intitl=groupe + else : intitl='l.coupe'+str(ioc2) + + + # Expression des contraintes aux noeuds ou des déplacements dans le repere local + if m['REPERE'] != 'GLOBAL': + + if icham==1: + + if m['REPERE']=='POLAIRE': + mcACTION.append( _F(INTITULE = intitl, RESULTAT = __remodr, + REPERE = m['REPERE'], GROUP_NO = groupe, - NOM_CHAM = NOM_CHAM, - TOUT_CMP = 'OUI', - OPERATION = 'EXTRACTION', ) ) + NOM_CHAM = NOM_CHAM,**motscles ),) + else: + __remodr=crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,__recou,__macou,nomgrma) + mcACTION.append( _F(INTITULE = intitl, + RESULTAT = __remodr, + GROUP_NO = groupe, + NOM_CHAM = NOM_CHAM,**motscles ),) - else: + else: + UTMESS('A','MACR_LIGN_COUPE','LE CHAMP '+NOM_CHAM+' N EST PAS TRAITE PAR MACR_LIGNE_COUPE EN REPERE '+m['REPERE']+'.' + +'LE CALCUL EST EFFECTUE EN REPERE GLOBAL.') + mcACTION.append( _F(INTITULE = intitl, + RESULTAT = __recou, + GROUP_NO = groupe, + NOM_CHAM = NOM_CHAM,**motscles ),) - # Production d'une table pour toutes les lignes de coupe - if m['VECT_Y'] !=None: - UTMESS('A','MACR_LIGN_COUPE','LE CHAMP '+NOM_CHAM+' N EST PAS TRAITE PAR MACR_LIGNE_COUPE EN REPERE LOCAL.' - +'LE CALCUL EST EFFECTUE EN REPERE GLOBAL.') - - if m['TYPE'] != 'GROUP_NO' : - ioc2=ioc2+1 - groupe='LICOU'+str(ioc2) - if m['INTITULE'] !=None : intitl=m['INTITULE'] - else : intitl='l.coupe'+str(ioc2) - elif m['GROUP_NO']!=None : - groupe=m['GROUP_NO'].ljust(8).upper() - if m['INTITULE'] !=None : intitl=m['INTITULE'] - else : intitl=groupe - mcACTION.append( _F(INTITULE = intitl, + # Expression des contraintes aux noeuds ou des déplacements dans le repere global + else: + + mcACTION.append( _F(INTITULE = intitl, RESULTAT = __recou, GROUP_NO = groupe, - NOM_CHAM = NOM_CHAM, - TOUT_CMP = 'OUI', - OPERATION = 'EXTRACTION', ) ) - + NOM_CHAM = NOM_CHAM,**motscles ),) + + elif AsType(RESULTAT).__name__ in ('evol_ther',) : for m in LIGN_COUPE : - if m['TYPE'] != 'GROUP_NO' : + + motscles={} + motscles['OPERATION']=m['OPERATION'] + if m['NOM_CMP']!=None: + motscles['NOM_CMP']=m['NOM_CMP'] + if m['TRAC_NOR']!=None: + motscles['TRAC_NOR']=m['TRAC_NOR'] + elif m['TRAC_DIR']!=None: + motscles['TRAC_DIR']=m['TRAC_DIR'] + motscles['DIRECTION']=m['DIRECTION'] + elif m['INVARIANT']!=None: + motscles['INVARIANT']=m['INVARIANT'] + elif m['RESULTANTE']!=None: + motscles['RESULTANTE']=m['RESULTANTE'] + elif m['ELEM_PRINCIPAUX']!=None: + motscles['ELEM_PRINCIPAUX']=m['ELEM_PRINCIPAUX'] + else: + motscles['TOUT_CMP']='OUI' + + if m['TYPE'] not in ('GROUP_NO','GROUP_MA') : ioc2=ioc2+1 groupe='LICOU'+str(ioc2) if m['INTITULE'] !=None : intitl=m['INTITULE'] else : intitl='l.coupe'+str(ioc2) - elif m['GROUP_NO']!=None : - groupe=m['GROUP_NO'].ljust(8).upper() + else: + groupe=m[m['TYPE']].ljust(8).upper() if m['INTITULE'] !=None : intitl=m['INTITULE'] else : intitl=groupe mcACTION.append( _F(INTITULE = intitl, RESULTAT = __recou, GROUP_NO = groupe, - NOM_CHAM = NOM_CHAM, - TOUT_CMP = 'OUI', - OPERATION = 'EXTRACTION', ) ) - + NOM_CHAM = NOM_CHAM, **motscles ),) __tabitm=POST_RELEVE_T(ACTION=mcACTION,); @@ -567,8 +857,11 @@ def macr_lign_coupe_ops(self,RESULTAT,UNITE_MAILLAGE,LIGN_COUPE,NOM_CHAM, dictab['ANGLE']=tmp ### - del dictab['NOEUD'] - del dictab['RESU'] + + if 'RESU' in dictab.para: + del dictab['RESU'] + if 'NOEUD' in dictab.para: + del dictab['NOEUD'] dprod = dictab.dict_CREA_TABLE() nomres=CREA_TABLE(**dprod) diff --git a/Aster/Cata/cataSTA9/Macro/macr_recal_ops.py b/Aster/Cata/cataSTA9/Macro/macr_recal_ops.py index bd7438bf..0efa2e46 100644 --- a/Aster/Cata/cataSTA9/Macro/macr_recal_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macr_recal_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_recal_ops Macro DATE 26/03/2007 AUTEUR ASSIRE A.ASSIRE +#@ MODIF macr_recal_ops Macro DATE 16/05/2007 AUTEUR ASSIRE A.ASSIRE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -32,12 +32,15 @@ fichier_export = None mode_python = False type_fonctionnelle = 'float' -# -------------------------------------------------------------------------------------------------- -def UTMESS(code,sprg,texte): - fmt='\n <%s> <%s> %s\n\n' - if INFO>0 or code=='F': print fmt % (code,sprg,texte) - if code=='F': - sys.exit() + +try: + import Utilitai.Utmess + from Utilitai.Utmess import UTMESS +except ImportError: + def UTMESS(code,sprg,texte): + fmt='\n <%s> <%s> %s\n\n' + print fmt % (code,sprg,texte) + if code=='F': sys.exit() # -------------------------------------------------------------------------------------------------- @@ -119,7 +122,7 @@ def macr_recal_externe( RESU_EXP, LIST_PARA, RESU_CALC, UNITE_ESCL=3, POIDS=None # Mot-cle GRAPHIQUE if GRAPHIQUE: - GRAPHIQUE0 = {'INTERACTIF': 'NON', 'AFFICHAGE': 'TOUTE_ITERATION', 'UNITE': 90, 'FORMAT': 'XMGRACE'} + GRAPHIQUE0 = {'PILOTE': '', 'AFFICHAGE': 'TOUTE_ITERATION', 'UNITE': 90, 'FORMAT': 'XMGRACE'} for k in GRAPHIQUE0.keys(): if not GRAPHIQUE.has_key(k): GRAPHIQUE[k] = GRAPHIQUE0[k] @@ -497,11 +500,12 @@ def macr_recal(UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, LIST_DERIV, RESU_CALC, L_J_init, erreur = Simul.multi_interpole(L_init, RESU_CALC) J_init = Simul.norme_J(copy.copy(L_J_init),copy.copy(L_J_init),UNITE_RESU) J = J_init - + A = Simul.sensibilite(CALCUL_ASTER, L_init, L_deriv_sensible, val, PARA_DIFF_FINI) A = Dim.adim_sensi(A) - + l = reca_algo.lambda_init(Numeric.matrixmultiply(Numeric.transpose(A),A)) + gradient_init =reca_algo.calcul_gradient(A,erreur) #utile pour le test de convergence, on prend les valeurs dimensionnées residu = reca_algo.test_convergence(gradient_init,erreur,A,Numeric.zeros(len(gradient_init),Numeric.Float)) @@ -602,8 +606,8 @@ def macr_recal(UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, LIST_DERIV, RESU_CALC, if (GRAPHIQUE): if GRAPHIQUE['AFFICHAGE']=='TOUTE_ITERATION': GRAPHE_UL_OUT=GRAPHIQUE['UNITE'] - interactif=(GRAPHIQUE['INTERACTIF']=='OUI') - reca_utilitaires.graphique(GRAPHIQUE['FORMAT'],L_F,RESU_EXP,RESU_CALC,iter,GRAPHE_UL_OUT,interactif) + pilote=GRAPHIQUE['PILOTE'] + reca_utilitaires.graphique(GRAPHIQUE['FORMAT'],L_F,RESU_EXP,RESU_CALC,iter,GRAPHE_UL_OUT,pilote) # On teste un manque de temps CPU restant,temps_iter,err=reca_utilitaires.temps_CPU(restant,temps_iter) @@ -638,17 +642,17 @@ def macr_recal(UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, LIST_DERIV, RESU_CALC, trace = True if (METHODE=='EXTERNE' and GRAPHIQUE['AFFICHAGE']=='TOUTE_ITERATION'): trace = True - fichier = args['prefix_graph'] + if not args.has_key('prefix_graph'): fichier='graph' + else: fichier = args['prefix_graph'] if trace: if INFO>=1: UTMESS('I','MACR_RECAL',"Trace des graphiques") GRAPHE_UL_OUT=GRAPHIQUE['UNITE'] - interactif=(GRAPHIQUE['INTERACTIF']=='OUI') - reca_utilitaires.graphique(GRAPHIQUE['FORMAT'],L_F,RESU_EXP,RESU_CALC,iter,GRAPHE_UL_OUT,interactif,fichier) + pilote=GRAPHIQUE['PILOTE'] + reca_utilitaires.graphique(GRAPHIQUE['FORMAT'],L_F,RESU_EXP,RESU_CALC,iter,GRAPHE_UL_OUT,pilote,fichier) if( METHODE == 'EXTERNE'): - if mode_python: return fonctionnelle, gradient - -# print residu, RESI_GLOB_RELA +# if mode_python: return fonctionnelle, gradient + return fonctionnelle, gradient # Si pas de convergence alors diagnostic NOOK_TEST_RESU if residu > RESI_GLOB_RELA: @@ -697,7 +701,7 @@ if __name__ == '__main__': p.add_option('-i', '--input', action='store', dest='input', type='string', default='input.txt', help='fichier contenant les parametres') p.add_option('-o', '--output', action='store', dest='output', type='string', default='output.txt', help='fichier contenant la fonctionnelle') p.add_option('-g', '--output_grad', action='store', dest='output_grad', type='string', default='grad.txt', help='fichier contenant le gradient') - p.add_option('-p', '--prefix_graph', action='store', dest='prefix_graph', type='string', help='prefixe des fichiers contenant les courbes') + p.add_option('-p', '--prefix_graph', action='store', dest='prefix_graph', type='string', default='graph', help='prefixe des fichiers contenant les courbes') p.add_option('-v', '--info', action='store', dest='INFO', type='int', help='niveau de message (-1, 0, 1, 2)') p.add_option('-f', '--follow', action='store', dest='follow_output', type='string', help="affiche ou non l'output du fichier Aster (True/False)") p.add_option('-F', '--objective', action='store', dest='objective', type='string', help="type de la fonctionnelle (float/vector)") @@ -996,7 +1000,7 @@ if __name__ == '__main__': prof.WriteExportTo(new_fichier_export) except: UTMESS('F',NOMPRO,"Probleme : Impossible d'ecrire le fichier export : " + new_fichier_export) - prof.WriteExportTo('/tmp/exp') + if debug: prof.WriteExportTo('/tmp/exp') # chemin vers as_run diff --git a/Aster/Cata/cataSTA9/Macro/post_k1_k2_k3_ops.py b/Aster/Cata/cataSTA9/Macro/post_k1_k2_k3_ops.py index 0a6f3723..e6c075d6 100644 --- a/Aster/Cata/cataSTA9/Macro/post_k1_k2_k3_ops.py +++ b/Aster/Cata/cataSTA9/Macro/post_k1_k2_k3_ops.py @@ -1,4 +1,4 @@ -#@ MODIF post_k1_k2_k3_ops Macro DATE 05/03/2007 AUTEUR GALENNE E.GALENNE +#@ MODIF post_k1_k2_k3_ops Macro DATE 09/05/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -368,12 +368,12 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, elif Lnf1[i]==LNOFO[Nbfond-1] and DTANEX : Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnf1[i]] else : Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnf1[i]]*sens TlibS[i] = MACR_LIGN_COUPE(RESULTAT=RESULTAT, - NOM_CHAM='DEPL',MODELE=MODEL, MAILLE = ListmaS, + NOM_CHAM='DEPL',MODELE=MODEL, VIS_A_VIS=_F(MAILLE_1 = ListmaS), LIGN_COUPE=_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],), TYPE='SEGMENT', COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),),); if SYME_CHAR=='SANS': TlibI[i] = MACR_LIGN_COUPE(RESULTAT=RESULTAT, - NOM_CHAM='DEPL',MODELE=MODEL, MAILLE = ListmaI, + NOM_CHAM='DEPL',MODELE=MODEL, VIS_A_VIS=_F(MAILLE_1 = ListmaI), LIGN_COUPE=_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],), TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),),); diff --git a/Aster/Cata/cataSTA9/Macro/reca_algo.py b/Aster/Cata/cataSTA9/Macro/reca_algo.py index 4c22e2bf..4537a0fa 100644 --- a/Aster/Cata/cataSTA9/Macro/reca_algo.py +++ b/Aster/Cata/cataSTA9/Macro/reca_algo.py @@ -1,4 +1,4 @@ -#@ MODIF reca_algo Macro DATE 14/11/2006 AUTEUR ASSIRE A.ASSIRE +#@ MODIF reca_algo Macro DATE 16/05/2007 AUTEUR ASSIRE A.ASSIRE # -*- coding: iso-8859-1 -*- # RESPONSABLE ASSIRE A.ASSIRE # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -32,6 +32,7 @@ try: except: pass try: + import Utilitai.Utmess from Utilitai.Utmess import UTMESS except ImportError: def UTMESS(code,sprg,texte): diff --git a/Aster/Cata/cataSTA9/Macro/reca_calcul_aster.py b/Aster/Cata/cataSTA9/Macro/reca_calcul_aster.py index 69554ef2..17609ead 100644 --- a/Aster/Cata/cataSTA9/Macro/reca_calcul_aster.py +++ b/Aster/Cata/cataSTA9/Macro/reca_calcul_aster.py @@ -1,4 +1,4 @@ -#@ MODIF reca_calcul_aster Macro DATE 26/03/2007 AUTEUR ASSIRE A.ASSIRE +#@ MODIF reca_calcul_aster Macro DATE 16/05/2007 AUTEUR ASSIRE A.ASSIRE # -*- coding: iso-8859-1 -*- # RESPONSABLE ASSIRE A.ASSIRE # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -22,19 +22,15 @@ # mode_include = False # __follow_output = False # table_sensibilite = False -debug = False - __commandes_aster__ = False +debug = False import copy, Numeric, types, os, sys, pprint, math from glob import glob try: - import aster -except: pass - -try: + import Utilitai.Utmess from Utilitai.Utmess import UTMESS except ImportError: def UTMESS(code,sprg,texte): @@ -283,6 +279,17 @@ class CALCUL_ASTER: # fichiernew.append(ligne) # fichier = '\n'.join(fichiernew) + + + # On supprime tous les commentaires du fichier esclave + fichiernew=[] + for ligne in fichier.split('\n'): + if ligne.strip() != '': + if ligne.replace(' ', '')[0] == '#': ligne = '' + fichiernew.append(ligne) + fichier = '\n'.join(fichiernew) + + #Fichier_Resu est une liste ou l'on va stocker le fichier modifié #idée générale :on délimite des 'blocs' dans fichier #on modifie ou non ces blocs suivant les besoins @@ -857,7 +864,8 @@ Message: elif lab == 'data': if dico['type'] not in ('exec', 'ele'): if dico['ul'] != '0': # Traite le cas des sources python sourchargees - dico['path'] = os.path.join(os.getcwd(), 'fort.%s' % dico['ul']) + if self.METHODE !='EXTERNE': + dico['path'] = os.path.join(os.getcwd(), 'fort.%s' % dico['ul']) # sinon on garde la ligne telle quelle setattr(prof, lab, l_fr) @@ -865,7 +873,7 @@ Message: # Ecriture du nouveau fichier export prof.WriteExportTo(self.new_export) - os.system('cp ' + self.new_export + ' /tmp') + if debug: os.system('cp ' + self.new_export + ' /tmp') # --FIN CLASSE ---------------------------------------------------------------------------- diff --git a/Aster/Cata/cataSTA9/Macro/reca_controles.py b/Aster/Cata/cataSTA9/Macro/reca_controles.py index d7cf8419..b9270705 100644 --- a/Aster/Cata/cataSTA9/Macro/reca_controles.py +++ b/Aster/Cata/cataSTA9/Macro/reca_controles.py @@ -1,4 +1,4 @@ -#@ MODIF reca_controles Macro DATE 26/03/2007 AUTEUR ASSIRE A.ASSIRE +#@ MODIF reca_controles Macro DATE 16/05/2007 AUTEUR ASSIRE A.ASSIRE # -*- coding: iso-8859-1 -*- # RESPONSABLE ASSIRE A.ASSIRE # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -22,6 +22,7 @@ import string, copy, Numeric, types, os, sys, pprint try: + import Utilitai.Utmess from Utilitai.Utmess import UTMESS except ImportError: def UTMESS(code,sprg,texte): diff --git a/Aster/Cata/cataSTA9/Macro/reca_graphique.py b/Aster/Cata/cataSTA9/Macro/reca_graphique.py index bab1d8c2..c3ce8c88 100644 --- a/Aster/Cata/cataSTA9/Macro/reca_graphique.py +++ b/Aster/Cata/cataSTA9/Macro/reca_graphique.py @@ -1,4 +1,4 @@ -#@ MODIF reca_graphique Macro DATE 08/11/2005 AUTEUR ASSIRE A.ASSIRE +#@ MODIF reca_graphique Macro DATE 16/05/2007 AUTEUR ASSIRE A.ASSIRE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== diff --git a/Aster/Cata/cataSTA9/Macro/reca_interp.py b/Aster/Cata/cataSTA9/Macro/reca_interp.py index d441a5e7..4c60b3a0 100644 --- a/Aster/Cata/cataSTA9/Macro/reca_interp.py +++ b/Aster/Cata/cataSTA9/Macro/reca_interp.py @@ -1,4 +1,4 @@ -#@ MODIF reca_interp Macro DATE 31/10/2006 AUTEUR ASSIRE A.ASSIRE +#@ MODIF reca_interp Macro DATE 16/05/2007 AUTEUR ASSIRE A.ASSIRE # -*- coding: iso-8859-1 -*- # RESPONSABLE ASSIRE A.ASSIRE # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -26,6 +26,7 @@ try: import Macro except: pass try: + import Utilitai.Utmess from Utilitai.Utmess import UTMESS except ImportError: def UTMESS(code,sprg,texte): diff --git a/Aster/Cata/cataSTA9/Macro/reca_message.py b/Aster/Cata/cataSTA9/Macro/reca_message.py index ec5d87fa..e20cb610 100644 --- a/Aster/Cata/cataSTA9/Macro/reca_message.py +++ b/Aster/Cata/cataSTA9/Macro/reca_message.py @@ -1,4 +1,4 @@ -#@ MODIF reca_message Macro DATE 31/10/2006 AUTEUR ASSIRE A.ASSIRE +#@ MODIF reca_message Macro DATE 16/05/2007 AUTEUR ASSIRE A.ASSIRE # -*- coding: iso-8859-1 -*- # RESPONSABLE ASSIRE A.ASSIRE # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -22,6 +22,7 @@ import os, Numeric try: + import Utilitai.Utmess from Utilitai.Utmess import UTMESS except: def UTMESS(code,sprg,texte): diff --git a/Aster/Cata/cataSTA9/Macro/reca_utilitaires.py b/Aster/Cata/cataSTA9/Macro/reca_utilitaires.py index c2c3cd27..c379670c 100644 --- a/Aster/Cata/cataSTA9/Macro/reca_utilitaires.py +++ b/Aster/Cata/cataSTA9/Macro/reca_utilitaires.py @@ -1,4 +1,4 @@ -#@ MODIF reca_utilitaires Macro DATE 31/10/2006 AUTEUR ASSIRE A.ASSIRE +#@ MODIF reca_utilitaires Macro DATE 16/05/2007 AUTEUR ASSIRE A.ASSIRE # -*- coding: iso-8859-1 -*- # RESPONSABLE ASSIRE A.ASSIRE # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -22,15 +22,14 @@ import Numeric, LinearAlgebra, copy, os, string, types, sys, glob from Numeric import take -try: - from Cata.cata import INFO_EXEC_ASTER, DEFI_FICHIER, IMPR_FONCTION, DETRUIRE - from Accas import _F -except: pass try: import Gnuplot except: pass try: + from Cata.cata import INFO_EXEC_ASTER, DEFI_FICHIER, IMPR_FONCTION, DETRUIRE + from Accas import _F + import Utilitai.Utmess from Utilitai.Utmess import UTMESS except ImportError: def UTMESS(code,sprg,texte): @@ -152,7 +151,7 @@ def temps_CPU(restant_old,temps_iter_old): #_____________________________________________ -def graphique(FORMAT, L_F, res_exp, reponses, iter, UL_out, interactif, fichier=None, INFO=0): +def graphique(FORMAT, L_F, res_exp, reponses, iter, UL_out, pilote, fichier=None, INFO=0): if iter: txt_iter = 'Iteration : ' + str(iter) else: txt_iter = '' @@ -163,27 +162,40 @@ def graphique(FORMAT, L_F, res_exp, reponses, iter, UL_out, interactif, fichier= for i in range(len(L_F)): _tmp = [] courbe1 = res_exp[i] - _tmp.append( { 'ABSCISSE': courbe1[:,0].tolist(), 'ORDONNEE': courbe1[:,1].tolist(), 'COULEUR': 1 } ) + _tmp.append( { 'ABSCISSE': courbe1[:,0].tolist(), 'ORDONNEE': courbe1[:,1].tolist(), 'COULEUR': 1, 'LEGENDE' : 'Expérience'} ) courbe2 = L_F[i] - _tmp.append( { 'ABSCISSE': courbe2[:,0].tolist(), 'ORDONNEE': courbe2[:,1].tolist(), 'COULEUR': 2 } ) + _tmp.append( { 'ABSCISSE': courbe2[:,0].tolist(), 'ORDONNEE': courbe2[:,1].tolist(), 'COULEUR': 2, 'LEGENDE' : 'Calcul'} ) motscle2= {'COURBE': _tmp } - if interactif: motscle2['PILOTE']= 'INTERACTIF' - else: motscle2['PILOTE']= 'POSTSCRIPT' + motscle2['PILOTE']= pilote IMPR_FONCTION(FORMAT='XMGRACE', UNITE=int(UL_out), - TITRE='Courbe de : ' + reponses[i][0], + TITRE='Courbe : ' + reponses[i][0], SOUS_TITRE=txt_iter, LEGENDE_X=reponses[i][1], LEGENDE_Y=reponses[i][2], **motscle2 ); + dic = {'' : '', + 'POSTSCRIPT' : '.ps', + 'EPS' : '.eps', + 'MIF' : '.mif', + 'SVG' : '.svg', + 'PNM' : '.pnm', + 'PNG' : '.png', + 'JPEG' : '.jpg', + 'PDF' : '.pdf', + 'INTERACTIF' : '.agr' + } + ext = dic[pilote] + if ext!='': + os.system('mv ./fort.%s ./REPE_OUT/courbes_%s_iter_%s%s' % (str(UL_out), reponses[i][0], str(iter), ext ) ) elif FORMAT=='GNUPLOT': - if INFO>=2: UTMESS('I','MACR_RECAL',"Trace des courbes dans le fichier " + fichier ) if fichier: + if INFO>=2: UTMESS('I','MACR_RECAL',"Trace des courbes dans le fichier " + fichier ) # On efface les anciens graphes liste = glob.glob(fichier + '*.ps') for fic in liste: @@ -195,7 +207,7 @@ def graphique(FORMAT, L_F, res_exp, reponses, iter, UL_out, interactif, fichier= Gnuplot.GnuplotOpts.prefer_inline_data=1 impr('set data style linespoints') impr('set grid') - impr('set pointsize 2.') + impr('set pointsize 1.') impr('set terminal postscript color') impr('set output "fort.'+str(UL_out)+'"') @@ -203,12 +215,12 @@ def graphique(FORMAT, L_F, res_exp, reponses, iter, UL_out, interactif, fichier= graphe.append(Gnuplot.Gnuplot(persist=0)) graphe[i]('set data style linespoints') graphe[i]('set grid') - graphe[i]('set pointsize 2.') + graphe[i]('set pointsize 1.') graphe[i].xlabel(reponses[i][1]) graphe[i].ylabel(reponses[i][2]) graphe[i].title(reponses[i][0]+' ' + txt_iter) graphe[i].plot(Gnuplot.Data(L_F[i],title='Calcul'),Gnuplot.Data(res_exp[i],title='Experimental')) - if interactif: + if pilote=='INTERACTIF': graphe[i]('pause 5') else: if fichier: diff --git a/Aster/Cata/cataSTA9/Macro/simu_point_mat_ops.py b/Aster/Cata/cataSTA9/Macro/simu_point_mat_ops.py index 97d51a80..3e6d69e0 100644 --- a/Aster/Cata/cataSTA9/Macro/simu_point_mat_ops.py +++ b/Aster/Cata/cataSTA9/Macro/simu_point_mat_ops.py @@ -1,4 +1,4 @@ -#@ MODIF simu_point_mat_ops Macro DATE 09/01/2007 AUTEUR PROIX J-M.PROIX +#@ MODIF simu_point_mat_ops Macro DATE 23/04/2007 AUTEUR PROIX J-M.PROIX # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -17,8 +17,8 @@ # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -def simu_point_mat_ops(self, COMP_INCR, MATER, INCREMENT, NEWTON,CONVERGENCE, - SUIVI_DDL,ARCHIVAGE,SIGM_IMPOSE,EPSI_IMPOSE,MODELISATION, INFO, **args) : +def simu_point_mat_ops(self, COMP_INCR, MATER, INCREMENT, NEWTON,CONVERGENCE,RECH_LINEAIRE,SIGM_INIT,EPSI_INIT,VARI_INIT, + COMP_ELAS,SUIVI_DDL,ARCHIVAGE,SIGM_IMPOSE,EPSI_IMPOSE,MODELISATION, INFO, **args) : """Simulation de la reponse d'un point materiel""" @@ -38,6 +38,8 @@ def simu_point_mat_ops(self, COMP_INCR, MATER, INCREMENT, NEWTON,CONVERGENCE, POST_RELEVE_T = self.get_cmd('POST_RELEVE_T') CALC_TABLE = self.get_cmd('CALC_TABLE') CALC_ELEM = self.get_cmd('CALC_ELEM') + CREA_CHAMP = self.get_cmd('CREA_CHAMP') +# IMPR_RESU = self.get_cmd('IMPR_RESU') from Accas import _F from Utilitai.UniteAster import UniteAster @@ -330,12 +332,148 @@ def simu_point_mat_ops(self, COMP_INCR, MATER, INCREMENT, NEWTON,CONVERGENCE, for i in xrange(nbsig) : iks=CMP_SIG[i] l_char.append( _F(CHARGE=__S[i],FONC_MULT=SIG[iks]) ) + + + +# Etat initial + SIGINI={} + VARINI={} + LCSIG=[] + LVSIG=[] + init_dico={} + etatinit=0 + +# --contraintes initiales + if SIGM_INIT: + etatinit=1 + SIGINI=SIGM_INIT[0].cree_dict_valeurs(SIGM_INIT[0].mc_liste) + for i in SIGINI.keys(): + if SIGINI[i]!=None : + LCSIG.append(i) + LVSIG.append(SIGINI[i]) + + __SIG_INIT=CREA_CHAMP(MAILLAGE=__MA, + OPERATION='AFFE', + TYPE_CHAM='CART_SIEF_R', + AFFE=_F(TOUT='OUI', + NOM_CMP=LCSIG, + VALE=LVSIG,)) + init_dico['SIGM']=__SIG_INIT + +# --variables internes initiales + if VARI_INIT: + etatinit=1 + lnomneu=[] + lnomvar=[] + VARINI=VARI_INIT[0].cree_dict_valeurs(VARI_INIT[0].mc_liste) + nbvari=len(VARINI['VALE']) + for i in range(nbvari): + lnomneu.append('X'+str(i+1)) + lnomvar.append('V'+str(i+1)) + + __NEUT=CREA_CHAMP(OPERATION='AFFE', TYPE_CHAM='CART_NEUT_R', MAILLAGE=__MA, + AFFE=_F( MAILLE ='VOLUME', NOM_CMP = lnomneu, VALE = VARINI['VALE'])) + + __VAR_INIT=CREA_CHAMP(MODELE=__MO, + OPERATION='ASSE', + TYPE_CHAM='ELGA_VARI_R', + ASSE=_F(TOUT='OUI',CHAM_GD=__NEUT, + NOM_CMP=lnomneu,NOM_CMP_RESU=lnomvar)) + init_dico['VARI']=__VAR_INIT +# IMPR_RESU(MODELE=__MO,RESU=_F(CHAM_GD=__VAR_INIT)) + + # --deformations initiales + if EPSI_INIT: + etatinit=1 + EPSINI={} + LCDEPL=[] + LNDEPL=[] + LVDEPL=[] + LIST_AFFE=[] + mon_dico={} + mon_dico["NOEUD"]='P0' + mon_dico["NOM_CMP"]=("DX","DY","DZ") + mon_dico["VALE"]=(0.,0.,0.) + LIST_AFFE.append(mon_dico) + + EPSINI=EPSI_INIT[0].cree_dict_valeurs(EPSI_INIT[0].mc_liste) + mon_dico={} + mon_dico["NOEUD"]='P1' + mon_dico["NOM_CMP"]='DX' + mon_dico["VALE"]=EPSINI['EPXX'] + LIST_AFFE.append(mon_dico) + mon_dico={} + mon_dico["NOEUD"]='P2' + mon_dico["NOM_CMP"]='DY' + mon_dico["VALE"]=EPSINI['EPYY'] + LIST_AFFE.append(mon_dico) + if MODELISATION=="3D": + mon_dico={} + mon_dico["NOEUD"]='P3' + mon_dico["NOM_CMP"]='DZ' + mon_dico["VALE"]=EPSINI['EPZZ'] + LIST_AFFE.append(mon_dico) + mon_dico={} + mon_dico["NOEUD"]='P1' + mon_dico["NOM_CMP"]='DY' + mon_dico["VALE"]=EPSINI['EPXY'] + LIST_AFFE.append(mon_dico) + mon_dico={} + mon_dico["NOEUD"]='P2' + mon_dico["NOM_CMP"]='DX' + mon_dico["VALE"]=EPSINI['EPXY'] + LIST_AFFE.append(mon_dico) + mon_dico={} + mon_dico["NOEUD"]='P1' + mon_dico["NOM_CMP"]='DZ' + mon_dico["VALE"]=EPSINI['EPXZ'] + LIST_AFFE.append(mon_dico) + mon_dico={} + mon_dico["NOEUD"]='P3' + mon_dico["NOM_CMP"]='DX' + mon_dico["VALE"]=EPSINI['EPXZ'] + LIST_AFFE.append(mon_dico) + mon_dico={} + mon_dico["NOEUD"]='P2' + mon_dico["NOM_CMP"]='DZ' + mon_dico["VALE"]=EPSINI['EPYZ'] + LIST_AFFE.append(mon_dico) + mon_dico={} + mon_dico["NOEUD"]='P3' + mon_dico["NOM_CMP"]='DY' + mon_dico["VALE"]=EPSINI['EPYZ'] + LIST_AFFE.append(mon_dico) + else: + mon_dico={} + mon_dico["NOEUD"]='P1', + mon_dico["NOM_CMP"]='DY' + mon_dico["VALE"]=EPSINI['EPXY'] + LIST_AFFE.append(mon_dico) + mon_dico={} + mon_dico["NOEUD"]='P2' + mon_dico["NOM_CMP"]='DX' + mon_dico["VALE"]=EPSINI['EPXY'] + LIST_AFFE.append(mon_dico) + __DEP_INI=CREA_CHAMP(MAILLAGE=__MA, + OPERATION='AFFE', + TYPE_CHAM='NOEU_DEPL_R', + AFFE=LIST_AFFE) + init_dico['DEPL']=__DEP_INI +# IMPR_RESU(RESU=_F(CHAM_GD=__DEP_INI)) + + + # -- Deroulement du calcul motscles={} - motscles['COMP_INCR'] = COMP_INCR.List_F() + if COMP_INCR : + motscles['COMP_INCR'] = COMP_INCR.List_F() + if COMP_ELAS : + motscles['COMP_ELAS'] = COMP_ELAS.List_F() motscles['CONVERGENCE'] = CONVERGENCE.List_F() motscles['NEWTON'] = NEWTON.List_F() + if RECH_LINEAIRE : + motscles['RECH_LINEAIRE'] = RECH_LINEAIRE.List_F() motscles['INCREMENT'] = INCREMENT.List_F() if SUIVI_DDL : @@ -343,19 +481,30 @@ def simu_point_mat_ops(self, COMP_INCR, MATER, INCREMENT, NEWTON,CONVERGENCE, if ARCHIVAGE : motscles['ARCHIVAGE'] = ARCHIVAGE.List_F() - - __EVOL = STAT_NON_LINE( - MODELE = __MO, - CHAM_MATER = __CHMAT, - EXCIT = l_char,**motscles) + if etatinit == 1 : + + __EVOL = STAT_NON_LINE( + MODELE = __MO, + CHAM_MATER = __CHMAT, + ETAT_INIT=init_dico, + EXCIT = l_char,**motscles) + + + else: + + __EVOL = STAT_NON_LINE( + MODELE = __MO, + CHAM_MATER = __CHMAT, + EXCIT = l_char,**motscles) __EVOL = CALC_ELEM(reuse = __EVOL, RESULTAT = __EVOL, OPTION = ('SIEF_ELNO_ELGA','EPSI_ELNO_DEPL','VARI_ELNO_ELGA') ) - + +# IMPR_RESU(RESU=_F(RESULTAT=__EVOL)) # -- Recuperation des courbes @@ -416,7 +565,7 @@ def simu_point_mat_ops(self, COMP_INCR, MATER, INCREMENT, NEWTON,CONVERGENCE, self.DeclareOut('REPONSE',self.sd) - REPONSE=CALC_TABLE( TABLE=__REP_EPSI, + REPONSE=CALC_TABLE( TABLE=__REP_EPSI,TITRE='TABLE ', ACTION=( _F(OPERATION='COMB',TABLE=__REP_SIGM,NOM_PARA=('INST'), ), _F(OPERATION='COMB',TABLE=__REP_INV ,NOM_PARA=('INST'), ), -- 2.39.2