Пример #1
0
def lire_table_ops(self, UNITE, FORMAT, SEPARATEUR, NUME_TABLE, RENOMME_PARA,
                   INFO, TITRE, **args):
    """Méthode corps de la macro LIRE_TABLE
    """
    import aster
    from Utilitai.Utmess import UTMESS, raise_UTMESS
    from Utilitai.UniteAster import UniteAster
    from Utilitai.TableReader import TableReaderFactory, unique_parameters

    ier = 0
    # On importe les definitions des commandes a utiliser dans la macro
    CREA_TABLE = self.get_cmd('CREA_TABLE')

    # La macro compte pour 1 dans la numerotation des commandes
    self.set_icmd(1)

    # Lecture de la table dans un fichier d unité logique UNITE
    UL = UniteAster()
    nomfich = UL.Nom(UNITE)
    if not osp.isfile(nomfich):
        UTMESS('F', 'FONCT0_41', valk=nomfich)

    texte = open(nomfich, 'r').read()
    # remet UNITE dans son état initial
    UL.EtatInit()

    check_para = None
    if RENOMME_PARA == "UNIQUE":
        check_para = unique_parameters

    reader = TableReaderFactory(texte, FORMAT, SEPARATEUR, debug=(INFO == 2))
    try:
        tab = reader.read(NUME_TABLE, check_para=check_para)
    except TypeError, exc:
        UTMESS('F', 'TABLE0_45', valk=str(exc))
Пример #2
0
 def configure(self, kwargs):
     """Pre-execution function, read the keywords"""
     super(ExecMesher, self).configure(kwargs)
     self.uniteAster = UniteAster()
     self.fileIn = self.uniteAster.Nom(kwargs['MAILLAGE']['UNITE_GEOM'])
     self.fileOut = None
     self.format = None
Пример #3
0
class ExecMesher(ExecProgram):
    """Execute a mesher

    fileIn --[ mesher ]--> fileOut --[ LIRE_MAILLAGE ]--> mesh

    Additional attributes:
    :fileIn: the data file used by the mesher
    :fileOut: the file that Code_Aster will read
    :format: format of the mesh that will be read by Code_Aster (not the
             format of fileOut)
    :uniteAster: UniteAster object
    """
    def configure(self, kwargs):
        """Pre-execution function, read the keywords"""
        super(ExecMesher, self).configure(kwargs)
        self.uniteAster = UniteAster()
        self.fileIn = self.uniteAster.Nom(kwargs['MAILLAGE']['UNITE_GEOM'])
        self.fileOut = None
        self.format = None

    def cleanUp(self):
        """Cleanup function"""
        self.uniteAster.EtatInit()

    def post(self):
        """Create the mesh object"""
        self.step.DeclareOut('mesh', self.step.sd)
        ulMesh = self.uniteAster.Unite(self.fileOut)
        assert ulMesh, \
            "file '{}' not associated to a logical unit".format(self.fileOut)
        mesh = LIRE_MAILLAGE(UNITE=ulMesh,
                             FORMAT=self.format,
                             INFO=2 if self.debug else 1)
Пример #4
0
def read_thyc(coeur, model, unit):
    """Read a file containing THYC results"""
    res = None
    try:
        UL = UniteAster()
        fname = UL.Nom(unit)
        res = lire_resu_thyc(coeur, model, fname)
    finally:
        UL.EtatInit()
    return res
Пример #5
0
def crea_sd_mail(self, mailString):
    from Utilitai.UniteAster import UniteAster
    LIRE_MAILLAGE = self.get_cmd('LIRE_MAILLAGE')

    nomFichierSortie = os.path.join(os.getcwd(), 'maillage.mail')
    fproc = open(nomFichierSortie, 'w')
    fproc.write(mailString)
    fproc.close()
    UL = UniteAster()
    uniteMail = UL.Libre(action='ASSOCIER', nom=nomFichierSortie)
    _MAI = LIRE_MAILLAGE(FORMAT='ASTER', UNITE=uniteMail)
    UL.EtatInit(uniteMail)

    return _MAI
Пример #6
0
 def __init__(self, initial_dir, **kwargs):
     """Enregistrement des valeurs des mots-clés.
     - Comme il n'y a qu'une occurrence de PARAMETRE, cela permet de
       remonter tous les mots-clés dans un seul dictionnaire.
     - On peut ajouter des vérifications infaisables dans le capy.
     - On ajoute des paramètres internes.
     """
     # defauts hors du mot-clé PARAMETRE
     self._defaults = {
         '_INIDIR': initial_dir,
         '_WRKDIR': osp.join(initial_dir, 'tmp_miss3d'),
         '_NBM_DYN': None,
         '_NBM_STAT': None,
         '_exec_Miss': False,
         'EXCIT_HARMO': None,
         'INST_FIN': None,
         'PAS_INST': None,
         'FICHIER_SOL_INCI': 'NON',
         # tâches élémentaires à la demande
         '_calc_impe': False,
         '_calc_forc': False,
         '_hasPC': False,
         '_nbPC': 0,
         '_nbfreq': 0,
         '_auto_first_LT': None,
     }
     self._keywords = {}
     # une seule occurence du mcfact
     mcfact = kwargs.get('PARAMETRE')
     if mcfact is not None:
         mcfact = mcfact[0]
         self._keywords.update(mcfact.cree_dict_valeurs(mcfact.mc_liste))
     # autres mots-clés
     others = kwargs.keys()
     others.remove('PARAMETRE')
     for key in others + self._defaults.keys():
         val = kwargs.get(key)
         if val is None:
             val = self._defaults.get(key)
         self._keywords[key] = val
     if self['REPERTOIRE']:
         self._keywords['_WRKDIR'] = self['REPERTOIRE']
     self.UL = UniteAster()
     self.check()
Пример #7
0
# 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.
# ======================================================================
# person_in_charge: samuel.geniaut at edf.fr
import aster_core
from mac3coeur_coeur import CoeurFactory
from Utilitai.UniteAster import UniteAster

import numpy as N
import numpy.linalg as LA
from scipy import stats

UL=UniteAster()

K_star = 100000.

def NodePos(coeur,k):
    
    return coeur.get_XYOut('%s_%s'%(k[0],k[1]))

def compute_cos_alpha(G_0,G_1,G_2):
    a=G_1-G_0
    b=G_2-G_1
    cos_alpha_ = N.dot(a,b)/LA.norm(a)/LA.norm(b)
    # cos_alpha_ = dotProduct(coorVect(G_0,G_1),coorVect(G_1,G_2))/(norm(G_0,G_1)*norm(G_1,G_2))  
    return cos_alpha_

Пример #8
0
def impr_resu_sp_ops(self,
    RESULTAT, NUME_ORDRE, INST, LIST_INST,
    GROUP_MA, RESU, UNITE, **args):
    """
       Visualisation des sous-points pour MED
    """
    import os.path as OSP
    import numpy as NP
    from Utilitai.UniteAster import UniteAster
    import string as ST
    import tempfile
    from code_aster.Cata.Syntax import _F
    #
    ier = 0
    # On importe les définitions des commandes à utiliser dans la macro
    DEFI_FICHIER = self.get_cmd('DEFI_FICHIER')
    CREA_TABLE   = self.get_cmd('CREA_TABLE')
    IMPR_TABLE   = self.get_cmd('IMPR_TABLE')
    DETRUIRE     = self.get_cmd('DETRUIRE')
    # La macro compte pour 1 dans la numérotation des commandes
    self.set_icmd(1)
    # Pas de concept sortant
    #
    # Extraction des INST, NUME_ORDRE, CHAMP du résultat
    Resultemps=RESULTAT.LIST_PARA()['INST']
    Resulordre=RESULTAT.LIST_PARA()['NUME_ORDRE']
    ResuName = RESULTAT.nom
    #
    # lestemps : les temps d'extraction des champs
    if   ( INST != None ):
        lestempsextrac = INST
    elif ( LIST_INST != None ):
        lestempsextrac = LIST_INST.Valeurs()
    #
    # Fabrique de list_numeordre_instant = [ (nume_ordre, temps), ... ]
    if ( NUME_ORDRE != None ):
        tmp = []
        for nume in NUME_ORDRE:
            if ( nume in Resulordre ):
                indx = Resulordre.index( nume )
                tmp.append( (Resulordre[indx],Resultemps[indx]) )
            else:
                valk = ( ResuName, )
                vali = ( nume,)
                UTMESS('F','IMPRRESUSP_1', valk=valk, vali=vali)
        list_numeordre_instant = NP.array( tmp )
    elif ( INST != None or LIST_INST != None ):
        tmp = []
        for inst in lestempsextrac:
            indx = DedansListe( inst, Resultemps, precision=1.0E-08 )
            if ( indx >= 0 ):
                tmp.append( (Resulordre[indx],Resultemps[indx]) )
            else:
                valk = ( ResuName, )
                valr = ( inst, )
                UTMESS('F','IMPRRESUSP_2', valk=valk, valr=valr)
        list_numeordre_instant = NP.array( tmp )
    else:
        list_numeordre_instant = NP.transpose(NP.array([Resulordre , Resultemps]))
    # Triage suivant les nume_ordre croissant
    list_numeordre_instant[list_numeordre_instant[:,0].argsort()]
    # Les champs et leur composantes
    Resulchamp=RESULTAT.LIST_CHAMPS()
    Resulcompo=RESULTAT.LIST_NOM_CMP()
    #
    LesChampsComposantes = []
    motclef = RESU.List_F()
    for ii in range(len(motclef)):
        mclf = motclef[ii]
        nom_cham = mclf['NOM_CHAM']
        nom_cmp  = mclf['NOM_CMP']
        # Champ dans le RESULTAT ?
        if ( not nom_cham in Resulchamp.keys() ):
            valk = ( ResuName, nom_cham )
            UTMESS('F','IMPRRESUSP_3', valk=valk)
        # Composante dans le CHAMP ?
        for ncmp in nom_cmp:
            if ( not ncmp in Resulcompo[nom_cham] ):
                valk = ( ResuName, nom_cham, ncmp  )
                UTMESS('F','IMPRRESUSP_4', valk=valk)
        # nume_ordre existe pour le champ ?
        for nume,inst in list_numeordre_instant:
            if ( not int(nume) in Resulchamp[nom_cham] ):
                valk = ( ResuName, nom_cham )
                vali = ( nume, )
                valr = ( inst, )
                UTMESS('F','IMPRRESUSP_5', valk=valk, vali=vali, valr=valr)
        #
        LesChampsComposantes.append( ( ii+1, nom_cham , list(nom_cmp) ) )
    #
    Group_MA = list( GROUP_MA )
    # création du répertoire
    RepertoireSauve = tempfile.mkdtemp( prefix='Visu_Sous_Point', dir='.' )
    # On commence la macro
    LignepvdData = {}
    for UnChamp in LesChampsComposantes:
        iocc, Nom_Champ, LNom_Cmp = UnChamp
        #
        # Liste informations : [ (Fichier  Resultat  Champ  Composante  Nume_Ordre  instant), .... ]
        clef = '%s-%s-%04d' % (ResuName, Nom_Champ, iocc)
        LignepvdData[clef] = []
        # Boucle sur les numéros d'ordre
        for nume_ordre_instant in list_numeordre_instant:
            nordre, instant = nume_ordre_instant
            nume_ordre = int( nordre )
            Nom_Fic= '%s-%04d' % (clef ,nume_ordre)
            #
            LignepvdData[clef].append( (Nom_Fic, ResuName, Nom_Champ, LNom_Cmp, nume_ordre, instant) )
            #
            __unit = DEFI_FICHIER(ACTION='ASSOCIER', FICHIER=OSP.join(RepertoireSauve,'%s.table' % Nom_Fic), ACCES='NEW', TYPE='ASCII')
            __tbresu=CREA_TABLE(
                RESU=_F(RESULTAT=RESULTAT, NOM_CHAM=Nom_Champ.upper() , NUME_ORDRE=nume_ordre, GROUP_MA=Group_MA, NOM_CMP=LNom_Cmp,),)
            #
            # Vérification que toutes les composantes existent
            NomColonnes = __tbresu.get_nom_para()
            for icmp in ['SOUS_POINT','COOR_X','COOR_Y','COOR_Z'] + LNom_Cmp:
                if ( not icmp in NomColonnes ):
                    UTMESS('F','IMPRRESUSP_6', valk=(icmp,Nom_Champ.upper()))
            #
            IMPR_TABLE(FORMAT='TABLEAU', UNITE=__unit, TABLE=__tbresu, NOM_PARA=['COOR_X','COOR_Y','COOR_Z'] + LNom_Cmp,)
            DEFI_FICHIER(ACTION='LIBERER', UNITE=__unit)
            DETRUIRE(CONCEPT=_F(NOM=__tbresu,), INFO=1,)
            DETRUIRE(CONCEPT=_F(NOM=__unit,), INFO=1,)
        #
    # Fichier de l'unité logique UNITE
    UL = UniteAster()
    nomfich = UL.Nom(UNITE)
    # Fabrication du pvd et des vtu dans un fichier "tgz"
    Table2vtu(nomfich,RepertoireSauve,LignepvdData)
    # Remet UNITE dans son état initial
    UL.EtatInit()
    return ier
Пример #9
0
class MISS_PARAMETER(object):
    """Stocke les paramètres nécessaires au calcul à partir des mots-clés.
    """
    def __init__(self, initial_dir, **kwargs):
        """Enregistrement des valeurs des mots-clés.
        - Comme il n'y a qu'une occurrence de PARAMETRE, cela permet de
          remonter tous les mots-clés dans un seul dictionnaire.
        - On peut ajouter des vérifications infaisables dans le capy.
        - On ajoute des paramètres internes.
        """
        # defauts hors du mot-clé PARAMETRE
        self._defaults = {
            '_INIDIR': initial_dir,
            '_WRKDIR': osp.join(initial_dir, 'tmp_miss3d'),
            '_NBM_DYN': None,
            '_NBM_STAT': None,
            '_exec_Miss': False,
            'EXCIT_HARMO': None,
            'INST_FIN': None,
            'PAS_INST': None,
            'FICHIER_SOL_INCI': 'NON',
            # tâches élémentaires à la demande
            '_calc_impe': False,
            '_calc_forc': False,
            '_hasPC': False,
            '_nbPC': 0,
            '_nbfreq': 0,
            '_auto_first_LT': None,
        }
        self._keywords = {}
        # une seule occurence du mcfact
        mcfact = kwargs.get('PARAMETRE')
        if mcfact is not None:
            mcfact = mcfact[0]
            self._keywords.update(mcfact.cree_dict_valeurs(mcfact.mc_liste))
        # autres mots-clés
        others = kwargs.keys()
        others.remove('PARAMETRE')
        for key in others + self._defaults.keys():
            val = kwargs.get(key)
            if val is None:
                val = self._defaults.get(key)
            self._keywords[key] = val
        if self['REPERTOIRE']:
            self._keywords['_WRKDIR'] = self['REPERTOIRE']
        self.UL = UniteAster()
        self.check()

    def __del__(self):
        """A la destruction."""
        self.UL.EtatInit()

    def check(self):
        """Vérification des règles impossible à écrire dans le .capy"""
        # tâches à la demande
        if self['TYPE_RESU'] in ('HARM_GENE', 'TRAN_GENE', 'TABLE', 'CHARGE'):
            self.set('_calc_impe', True)
            self.set('_calc_forc', True)
        elif self['TYPE_RESU'] in ('FICHIER', 'TABLE_CONTROL'):
            if self.get('UNITE_RESU_IMPE') is not None:
                self.set('_calc_impe', True)
            if self.get('UNITE_RESU_FORC') is not None:
                self.set('_calc_forc', True)
        else:
            if self['EXCIT_SOL'] is not None:
                self.set('_calc_forc', True)
        self.set('_hasPC', self.get('GROUP_MA_CONTROL') is not None)
        # unités logiques
        if self.get('UNITE_RESU_IMPE') is None:
            self.set('_exec_Miss', True)
            self['UNITE_RESU_IMPE'] = self.UL.Libre(action='ASSOCIER')
        if self.get('UNITE_RESU_FORC') is None:
            self.set('_exec_Miss', True)
            self['UNITE_RESU_FORC'] = self.UL.Libre(action='ASSOCIER')

        # fréquences
        if self['TYPE_RESU'] not in ('CHARGE'):
            if self['LIST_FREQ'] is not None \
                    and self['TYPE_RESU'] not in ('FICHIER', 'HARM_GENE', 'TABLE_CONTROL'):
                raise aster.error('MISS0_17')

        # si base modale, vérifier/compléter les amortissements réduits
        if self['TYPE_RESU'] not in ('CHARGE'):
            if self['BASE_MODALE']:
                res = aster.dismoi('NB_MODES_DYN', self['BASE_MODALE'].nom,
                                   'RESULTAT', 'C')
                ASSERT(res[0] == 0)
                self['_NBM_DYN'] = res[1]
                res = aster.dismoi('NB_MODES_STA', self['BASE_MODALE'].nom,
                                   'RESULTAT', 'C')
                ASSERT(res[0] == 0)
                self['_NBM_STAT'] = res[1]
                if self['AMOR_REDUIT']:
                    self.set('AMOR_REDUIT', force_list(self['AMOR_REDUIT']))
                    nval = len(self['AMOR_REDUIT'])
                    if nval < self['_NBM_DYN']:
                        # complète avec le dernier
                        nadd = self['_NBM_DYN'] - nval
                        self._keywords['AMOR_REDUIT'].extend([
                            self['AMOR_REDUIT'][-1],
                        ] * nadd)
                        nval = self['_NBM_DYN']
                    if nval < self['_NBM_DYN'] + self['_NBM_STAT']:
                        # on ajoute 0.
                        self._keywords['AMOR_REDUIT'].append(0.)
        # la règle ENSEMBLE garantit que les 3 GROUP_MA_xxx sont tous absents
        # ou tous présents
        if self['TYPE_RESU'] not in ('CHARGE'):
            if self['ISSF'] != 'NON':
                if self['GROUP_MA_FLU_STR'] is None:
                    UTMESS('F', 'MISS0_22')
                if self['MATER_FLUIDE'] is None:
                    UTMESS('F', 'MISS0_23')

    def __iter__(self):
        """Itérateur simple sur le dict des mots-clés"""
        return iter(self._keywords)

    def __getitem__(self, key):
        return self._keywords[key]

    def __setitem__(self, key, value):
        ASSERT(self.get(key) is None)
        self.set(key, value)

    def set(self, key, value):
        self._keywords[key] = value

    def get(self, key):
        return self._keywords.get(key)

    def __repr__(self):
        return pprint.pformat(self._keywords)
Пример #10
0
def lire_inte_spec_ops(self,
                       UNITE=None,
                       FORMAT=None,
                       FORMAT_C=None,
                       NOM_PARA=None,
                       NOM_RESU=None,
                       INTERPOL=None,
                       PROL_DROITE=None,
                       PROL_GAUCHE=None,
                       TITRE=None,
                       INFO=None,
                       **args):
    ier = 0

    from code_aster.Cata.Syntax import _F
    import os
    from math import cos, sin, sqrt
    from Utilitai.Utmess import UTMESS
    from Utilitai.UniteAster import UniteAster
    # On importe les definitions des commandes a utiliser dans la macro
    DEFI_FONCTION = self.get_cmd('DEFI_FONCTION')
    DEFI_INTE_SPEC = self.get_cmd('DEFI_INTE_SPEC')

    # La macro compte pour 1 dans la numerotation des commandes
    self.set_icmd(1)
    nompro = 'LIRE_INTE_SPEC'

    # Lecture de la fonction dans un fichier d unité logique UNITE
    UL = UniteAster()
    nomfich = UL.Nom(UNITE)
    if not os.path.isfile(nomfich):
        UTMESS('F', 'SPECTRAL0_4', valk=nomfich)
    file = open(nomfich, 'r')
    texte = file.read()
    file.close()

    if FORMAT == 'IDEAS':
        # fabrication d'une liste de data sets 58
        list_fonc = texte.split('    -1')
        j = 0
        for ind_fonc in range(len(list_fonc)):
            try:
                tmp = list_fonc[j].split()
                if tmp[0] == '58':
                    j = j + 1
                else:
                    list_fonc.pop(j)
            except IndexError:
                list_fonc.pop(j)

        nb_fonc = len(list_fonc)
        if nb_fonc == 0:
            UTMESS('F', 'SPECTRAL0_9')

        l_fonc = []
        l_noi = []
        l_noj = []
        l_cmpi = []
        l_cmpj = []
        for ind_fonc in range(nb_fonc):
            # Extraction des en-tete : nom des noeuds, composantes (=ddl), de
            # leur sens
            fonc = list_fonc[ind_fonc]
            ligne = fonc.split('\n')

            record_6 = ligne[7].split()
            if record_6[0] != '2' and record_6[0] != '3' and record_6[0] != '9':
                UTMESS('F', 'SPECTRAL0_10')
            nono = record_6[4]  # nom du noeud
            nuno = int(record_6[5])  # numero
            ddlno = float(record_6[6]) / 10  # DDL
            noref = record_6[7]  # nom du noeud de reference
            nuref = int(record_6[8])  # numero
            ddlref = float(record_6[9]) / 10  # DDL
            # On traduit les ddl "chiffres" en vrais ddl. Avec le sens des
            # capteurs.
            sens_no, ddl_no = comp(ddlno)
            sens_ref, ddl_ref = comp(ddlref)
            signe = sens_no * sens_ref

            # On ne garde que la triang sup de la matrice inter-spectrale
            crit1 = nuno + ddlno
            crit2 = nuref + ddlref
            if crit1 > crit2:
                continue
            record_7 = ligne[8].split()
            nbpairs = int(record_7[1])
            if record_7[2] == 0:
                UTMESS('F', 'SPECTRAL0_11')
            f0 = float(record_7[3])
            df = float(record_7[4])

            # Liste des valeurs
            liste = fonc.split('\n')
            valeurs = ''
            for ind in range(13):
                liste.pop(0)
            for ind_lign in range(len(liste)):
                valeurs = valeurs + liste[ind_lign]
            tmp = valeurs.split()
            valeurs = [signe * float(tmp[ind]) for ind in range(len(tmp))]

            liste = []
            freq = f0
            for ind_freq in range(nbpairs):
                liste.append(freq)
                liste.append(valeurs[2 * ind_freq])
                liste.append(valeurs[2 * ind_freq + 1])
                freq = freq + df

            # création de la fonction ASTER :
            _fonc = DEFI_FONCTION(
                NOM_PARA=NOM_PARA,
                NOM_RESU=NOM_RESU,
                PROL_DROITE=PROL_DROITE,
                PROL_GAUCHE=PROL_GAUCHE,
                INTERPOL=INTERPOL,
                INFO=INFO,
                TITRE=TITRE,
                VALE_C=liste,
            )
            l_fonc.append(_fonc)  # Liste des fonctions
            l_noi.append('N' + str(nuno))  # Liste des noeuds de mesure
            l_cmpi.append(ddl_no)  # DDL associes
            l_noj.append('N' + str(nuref))  # Liste des noeuds de ref
            l_cmpj.append(ddl_ref)  # DDL associes

        # Verification a posteriori de la dimension de l'inter-spectre
        tmp = 0.5 * (-1 + sqrt(1 + 8 * len(l_fonc)))
        dim = int(tmp)
        nb_fonc = dim * (dim + 1) / 2

        if dim != tmp:
            UTMESS('F', 'SPECTRAL0_6')

        mcfact = []
        for i in range(dim * (dim + 1) / 2):
            mcfact.append(
                _F(
                    NOEUD_I=l_noi[i],
                    NOM_CMP_I=l_cmpi[i],
                    NOEUD_J=l_noj[i],
                    NOM_CMP_J=l_cmpj[i],
                    FONCTION=l_fonc[i],
                ))
        self.DeclareOut('inte_out', self.sd)
        inte_out = DEFI_INTE_SPEC(
            PAR_FONCTION=mcfact,
            TITRE=TITRE,
        )

    elif FORMAT == 'ASTER':
        list_fonc = texte.split('FONCTION_C')
        entete = list_fonc.pop(0)
        try:
            entete = entete[entete.index('DIM'):]
            dim = int(entete[entete.index('=') + 1:entete.index('\n')])
        except ValueError:
            UTMESS('F', 'SPECTRAL0_5')

        if len(list_fonc) != (dim * (dim + 1) / 2):
            UTMESS('F', 'SPECTRAL0_6')

        nume_i = []
        nume_j = []
        l_fonc = []
        for i in range(dim * (dim + 1) / 2):
            numi = list_fonc[i][list_fonc[i].index('I =') + 3:]
            numi = numi[:numi.index('\n')]
            nume_i.append(int(numi))
            numj = list_fonc[i][list_fonc[i].index('J =') + 3:]
            numj = numj[:numj.index('\n')]
            nume_j.append(int(numj))
            try:
                vale_fonc = list_fonc[i][list_fonc[i].index('VALEUR =\n') +
                                         9:list_fonc[i].index('FINSF\n')]
                vale_fonc = vale_fonc.replace('\n', ' ')
                vale_fonc = map(float, vale_fonc.split())
            except ValueError:
                UTMESS('F', 'SPECTRAL0_7')

            liste = []
            if FORMAT_C == 'REEL_IMAG':
                liste = vale_fonc
            elif FORMAT_C == 'MODULE_PHASE':
                for i in range(len(vale_fonc) / 3):
                    module = vale_fonc[3 * i + 1]
                    phase = vale_fonc[3 * i + 2]
                    liste = liste + \
                        [vale_fonc[3 * i], module * cos(
                            phase), module * sin(phase)]

            # création de la fonction ASTER :
            _fonc = DEFI_FONCTION(
                NOM_PARA=NOM_PARA,
                NOM_RESU=NOM_RESU,
                PROL_DROITE=PROL_DROITE,
                PROL_GAUCHE=PROL_GAUCHE,
                INTERPOL=INTERPOL,
                INFO=INFO,
                TITRE=TITRE,
                VALE_C=liste,
            )
            l_fonc.append(_fonc)

        nume_ib = []
        nume_jb = []
        for i in range(dim):
            for j in range(i, dim):
                nume_ib.append(i + 1)
                nume_jb.append(j + 1)
        if nume_i != nume_ib or nume_j != nume_jb:
            UTMESS('F', 'SPECTRAL0_3')
        mcfact = []
        for i in range(dim * (dim + 1) / 2):
            mcfact.append(
                _F(
                    NUME_ORDRE_I=nume_i[i],
                    NUME_ORDRE_J=nume_j[i],
                    FONCTION=l_fonc[i],
                ))
        self.DeclareOut('inte_out', self.sd)
        inte_out = DEFI_INTE_SPEC(
            PAR_FONCTION=mcfact,
            TITRE=TITRE,
        )

    else:
        # mot-clé != 'ASTER', ou 'IDEAS' => ERREUR !
        UTMESS('F', 'SPECTRAL0_12')

    # remet UNITE dans son état initial
    UL.EtatInit()
    return ier
Пример #11
0
def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
    """
    Macro IMPR_TABLE permettant d'imprimer une table dans un fichier.
    Erreurs<S> dans IMPR_TABLE pour ne pas perdre la base.
    """
    macro = 'IMPR_TABLE'
    import aster
    from code_aster.Cata.Syntax import _F
    from Utilitai.Utmess import UTMESS
    from Utilitai.UniteAster import UniteAster
    from Utilitai.utils import fmtF2PY
    ier = 0
    # La macro compte pour 1 dans la numerotation des commandes
    self.set_icmd(1)

    # On importe les definitions des commandes a utiliser dans la macro
    # Le nom de la variable doit etre obligatoirement le nom de la commande
    DETRUIRE = self.get_cmd('DETRUIRE')
    RECU_FONCTION = self.get_cmd('RECU_FONCTION')

    #----------------------------------------------
    # 0. Traitement des arguments, initialisations
    # unité logique des fichiers réservés
    ul_reserve = (8, )
    UL = UniteAster()

    # 0.1. Fichier
    nomfich = None
    if args['UNITE'] and args['UNITE'] <> 6:
        nomfich = UL.Nom(args['UNITE'])
    if nomfich and os.path.exists(nomfich) and os.stat(nomfich).st_size <> 0:
        if FORMAT == 'XMGRACE':
            UTMESS('A', 'TABLE0_6', valk=nomfich)

    # 0.2. Création des dictionnaires des FILTRES
    Filtre = []
    if args['FILTRE']:
        for Fi in args['FILTRE']:
            dF = Fi.cree_dict_valeurs(Fi.mc_liste)
            for mc in dF.keys():
                if dF[mc] == None:
                    del dF[mc]
            Filtre.append(dF)
    # format pour l'impression des filtres
    form_filtre = '\nFILTRE -> NOM_PARA: %-16s CRIT_COMP: %-4s VALE: %s'

    # 0.3. Création de la liste des tables
    # on conserve la liste même si aujourd'hui, on n'en imprime qu'une à la
    # fois
    ltab = [[TABLE.EXTR_TABLE(), TABLE]]

    # 0.4.1. liste des paramètres à conserver
    nom_para = ltab[0][0].para
    if args['NOM_PARA']:
        nom_para = args['NOM_PARA']
    if not type(nom_para) in (list, tuple):
        nom_para = [
            nom_para,
        ]

    # 0.4.2. Traiter le cas des UL réservées
    if args['UNITE'] and args['UNITE'] in ul_reserve:
        UL.Etat(args['UNITE'], etat='F')

    #----------------------------------------------
    # Boucle sur les tables
    for tab, sdtab in ltab:

        # ----- 1. Infos de base
        if INFO == 2:
            print 'IMPRESSION DE LA TABLE : %s' % sdtab.get_name()

        if args['TITRE']:
            #    tab.titr = os.linesep.join(args['TITRE'] + (tab.titr, ))
            tab.titr = args['TITRE'] + tab.titr

        # ----- 2. Filtres
        for Fi in Filtre:
            col = getattr(tab, Fi['NOM_PARA'])
            # peu importe le type
            opts = [
                Fi[k] for k in ('VALE', 'VALE_I', 'VALE_C', 'VALE_K')
                if Fi.has_key(k)
            ]
            kargs = {}
            for k in ('CRITERE', 'PRECISION'):
                if Fi.has_key(k):
                    kargs[k] = Fi[k]
            tab = tab & (getattr(col, Fi['CRIT_COMP'])(*opts, **kargs))
            # trace l'operation dans le titre
            # if FORMAT in ('TABLEAU','ASTER'):
            tab.titr += form_filtre % (Fi['NOM_PARA'], Fi['CRIT_COMP'],
                                       ' '.join([str(v) for v in opts]))

        # ----- 3. Tris
        if args['TRI']:
            # une seule occurence de TRI
            T0 = args['TRI'][0]
            dT = T0.cree_dict_valeurs(T0.mc_liste)
            tab.sort(CLES=dT['NOM_PARA'], ORDRE=dT['ORDRE'])

        # ----- 4. Impression
        # vérification des paramètres
        for p in nom_para:
            if not p in tab.para:
                UTMESS('A', 'TABLE0_7', valk=p)

        # sélection des paramètres et suppression des colonnes vides
        timp = tab.SansColonneVide(nom_para)

        # passage des mots-clés de mise en forme à la méthode Impr
        kargs = args.copy()
        kargs.update({
            'FORMAT': FORMAT,
            'FICHIER': nomfich,
            'dform': {},
        })
        # pour l'impression des fonctions
        kfonc = {
            'FORMAT': FORMAT,
            'FICHIER': nomfich,
        }

        # 4.1. au format TABLEAU
        if FORMAT == 'TABLEAU':
            # surcharge par les formats de l'utilisateur
            kargs['dform'] = {
                'chead': args.get('DEBUT_TABLE'),  # None est traité par Table
                'cfoot': args['FIN_TABLE'],
                'csep': args['SEPARATEUR'],
                'ccom': args['COMMENTAIRE'],
                'ccpara': args['COMM_PARA'],
                'cdeb': args['DEBUT_LIGNE'],
                'cfin': args['FIN_LIGNE'],
            }

        # 4.2. au format AGRAF
        elif FORMAT == 'AGRAF':
            kargs['dform'] = {'formR': '%12.5E'}
            kfonc['FORMAT'] = 'TABLEAU'

        # 4.3. au format XMGRACE et dérivés
        elif FORMAT == 'XMGRACE':
            kargs['dform'] = {'formR': '%.8g'}
            kargs['PILOTE'] = args['PILOTE']
            kfonc['PILOTE'] = args['PILOTE']

        # 4.4. format spécifié dans les arguments
        if args['FORMAT_R']:
            kargs['dform'].update({'formR': fmtF2PY(args['FORMAT_R'])})

        # 4.5. regroupement par paramètre : PAGINATION
        if args['PAGINATION']:
            l_ppag = args['PAGINATION']
            if not type(l_ppag) in (list, tuple):
                l_ppag = [
                    l_ppag,
                ]
            kargs['PAGINATION'] = [p for p in l_ppag if p in nom_para]
            l_para_err = [p for p in l_ppag if not p in nom_para]
            if len(l_para_err) > 0:
                UTMESS('A', 'TABLE0_8', valk=l_para_err)

        timp.Impr(**kargs)

        # ----- 5. IMPR_FONCTION='OUI'
        if args['IMPR_FONCTION'] == 'OUI':
            # cherche parmi les cellules celles qui contiennent un nom de
            # fonction
            dfon = []
            p_extr = set(['FONCTION', 'FONCTION_C'])
            p_extr.intersection_update(timp.para)
            if len(p_extr) > 0:
                # on réduit timp aux colonnes FONCTION et FONCTION_C
                textr = timp.__getitem__(list(p_extr))
                for row in textr:
                    for par, cell in row.items():
                        if type(cell) in (str, unicode):
                            cell = cell.strip()
                            if aster.getvectjev('%-19s.PROL' % cell) != None:
                                dfon.append(['%-19s' % cell, par])
                # impression des fonctions trouvées
                for f, par in dfon:
                    __fonc = RECU_FONCTION(
                        TABLE=sdtab,
                        FILTRE=_F(
                            NOM_PARA=par,
                            VALE_K=f,
                        ),
                        NOM_PARA_TABL=par,
                        TITRE='Fonction %s' % f,
                    )
                    __fonc.Trace(**kfonc)
                    DETRUIRE(
                        CONCEPT=_F(NOM=(__fonc, ), ),
                        INFO=1,
                    )

    # 99. Traiter le cas des UL réservées
    UL.EtatInit()
    return ier
Пример #12
0
def macr_lign_coupe_ops(self, RESULTAT, CHAM_GD, UNITE_MAILLAGE, LIGN_COUPE,
                        NOM_CHAM, MODELE, **args):
    """
       Ecriture de la macro MACR_LIGN_COUPE
    """
    from code_aster.Cata.Syntax import _F
    from Noyau.N_utils import AsType
    import aster
    import math
    from Utilitai.UniteAster import UniteAster
    from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
    ier = 0

    # On importe les definitions des commandes a utiliser dans la macro
    LIRE_MAILLAGE = self.get_cmd('LIRE_MAILLAGE')
    DEFI_GROUP = self.get_cmd('DEFI_GROUP')
    AFFE_MODELE = self.get_cmd('AFFE_MODELE')
    PROJ_CHAMP = self.get_cmd('PROJ_CHAMP')
    POST_RELEVE_T = self.get_cmd('POST_RELEVE_T')
    CREA_TABLE = self.get_cmd('CREA_TABLE')
    CREA_RESU = self.get_cmd('CREA_RESU')
    COPIER = self.get_cmd('COPIER')

    # La macro compte pour 1 dans la numerotation des commandes
    self.set_icmd(1)

    #
    MasquerAlarme('ALGORITH12_43')
    MasquerAlarme('CALCULEL2_63')
    MasquerAlarme('CALCULEL2_64')
    MasquerAlarme('MODELISA5_53')
    MasquerAlarme('MODELE1_58')
    MasquerAlarme('MODELE1_63')
    MasquerAlarme('MODELE1_64')

    mcORDR = {}

    l_mode_meca_sans_modele = False

    if RESULTAT != None:
        if args['NUME_ORDRE'] != None:
            mcORDR['NUME_ORDRE'] = args['NUME_ORDRE']
        elif args['NUME_MODE'] != None:
            mcORDR['NUME_MODE'] = args['NUME_MODE']
        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
        type_resu = AsType(RESULTAT).__name__
        iret, ibid, n_modele = aster.dismoi('MODELE', nomresu, 'RESULTAT', 'F')
        n_modele = n_modele.strip()
        if n_modele in ('', '#AUCUN'):
            if MODELE == None:
                if (type_resu != 'mode_meca'):
                    UTMESS('F', 'POST0_9', valk=nomresu)
                # si le résultat en entrée est un mode_meca et qu'il ne contient pas de modèle (il est obtenu par sous-structuration, par exemple)
                # on passe le message fatal et on récupérera directement le
                # maillage (ou squelette)
                else:
                    l_mode_meca_sans_modele = True
                    UTMESS('I', 'POST0_23', valk=nomresu)
            else:
                n_modele = MODELE.nom
        iret, ibid, l_mailla = aster.dismoi(
            'NOM_MAILLA', nomresu, 'RESULTAT', 'F')

    elif CHAM_GD != None:
        mcORDR['TOUT_ORDRE'] = 'OUI'
        if MODELE == None:
            UTMESS('F', 'POST0_10')
        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('%-19s.DESC' % n_cham)
        if desc != None:
            nomgd = catagd[desc[0] - 1]
        else:
            celd = aster.getvectjev('%-19s.CELD' % n_cham)
            nomgd = catagd[celd[0] - 1]

        # détermination du type de résultat à créer
        if nomgd[:6] == 'TEMP_R':
            TYPE_RESU = 'EVOL_THER'
            if not NOM_CHAM:
                NOM_CHAM = 'TEMP'
        elif nomgd[:6] == 'DEPL_R':
            TYPE_RESU = 'EVOL_ELAS'
            if not NOM_CHAM:
                NOM_CHAM = 'DEPL'
        elif nomgd[:6] == 'NEUT_R':
            TYPE_RESU = 'EVOL_VARC'
            if not NOM_CHAM:
                NOM_CHAM = 'NEUT'
        elif nomgd[:6] == 'EPSI_R':
            TYPE_RESU = 'EVOL_ELAS'
        elif nomgd[:6] == 'VAR2_R':
            TYPE_RESU = 'EVOL_NOLI'
        elif nomgd[:6] == 'VARI_R':
            TYPE_RESU = 'EVOL_NOLI'
        elif nomgd[:6] == 'SIEF_R':
            if not NOM_CHAM:
                TYPE_RESU = 'EVOL_ELAS'
                NOM_CHAM = 'DEPL'
            elif NOM_CHAM[:4] == 'SIGM':
                TYPE_RESU = 'EVOL_ELAS'
            elif NOM_CHAM[:4] == 'SIEF':
                TYPE_RESU = 'EVOL_NOLI'
        else:
            assert 0, 'grandeur imprevue : ' + nomgf

        # 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
        iret, ibid, l_mailla = aster.dismoi('NOM_MAILLA', n_cham, 'CHAMP', 'F')

    # Maillage sur lequel s'appuie le résultat à projeter
    n_mailla = l_mailla.strip()
    # le maillage est-il 2D ou 3D ?
    iret, dime, kbid = aster.dismoi('DIM_GEOM', n_mailla, 'MAILLAGE', 'F')
    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 = []
    arcs = []
    minidim = dime

    for m in LIGN_COUPE:
        if m['TYPE'] == 'SEGMENT':
            lignes.append((m['COOR_ORIG'], m['COOR_EXTR'], m['NB_POINTS']))
            minidim = min(minidim, len(m['COOR_ORIG']), len(m['COOR_EXTR']))
            if minidim != dime:
                UTMESS('F', 'POST0_11')

        elif m['TYPE'] == 'ARC':
            minidim = min(minidim, len(m['COOR_ORIG']), len(m['CENTRE']))
            if minidim != dime:
                UTMESS('F', 'POST0_11')
            if dime == 2:
                arcs.append(
                    (m['COOR_ORIG'], m['CENTRE'], m['NB_POINTS'], m['ANGLE'],))
            elif dime == 3:
                if str(m['DNOR']) == 'None':
                    UTMESS('F', 'POST0_12')
                arcs.append(
                    (m['COOR_ORIG'], m['CENTRE'], m['NB_POINTS'], m['ANGLE'], m['DNOR']))

        elif m['TYPE'] == 'GROUP_NO':
            ngrno = m['GROUP_NO'].ljust(24)
            collgrno = aster.getcolljev(n_mailla.ljust(8) + '.GROUPENO')
            if ngrno not in collgrno.keys():
                UTMESS('F', 'POST0_13', valk=[ngrno, n_mailla])
            grpn = collgrno[ngrno]
            l_coor_group = [ngrno, ]
            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(24)
            if ngrma not in collgrma.keys():
                UTMESS('F', 'POST0_14', valk=[ngrma, 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', 'POST0_15', valk=[ngrma, nomma[ma - 1]])
            __mailla = COPIER(CONCEPT=m['MAILLAGE'])

            m2 = m.cree_dict_valeurs(m.mc_liste)
            argsup = {}
            if m2.get('GROUP_NO_ORIG'):
                argsup['GROUP_NO_ORIG'] = m2.get('GROUP_NO_ORIG')
            if m2.get('GROUP_NO_EXTR'):
                argsup['GROUP_NO_EXTR'] = m2.get('GROUP_NO_EXTR')
            if m2.get('NOEUD_ORIG'):
                argsup['NOEUD_ORIG'] = m2.get('NOEUD_ORIG')
            if m2.get('NOEUD_EXTR'):
                argsup['NOEUD_EXTR'] = m2.get('NOEUD_EXTR')
            if m2.get('VECT_ORIE'):
                argsup['VECT_ORIE'] = m2.get('VECT_ORIE')

            __mailla = DEFI_GROUP(reuse=__mailla, MAILLAGE=__mailla,
                                  DETR_GROUP_NO=_F(NOM=str(m['GROUP_MA'])),
                                  CREA_GROUP_NO=_F(OPTION='NOEUD_ORDO', NOM=str(m['GROUP_MA']), 
                                                   GROUP_MA=m['GROUP_MA'], ORIGINE='SANS', **argsup))

            collgrno = aster.getcolljev(__mailla.nom.ljust(8) + '.GROUPENO')
            grpn = collgrno[str(m['GROUP_MA']).ljust(24)]
            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 != []):
        UTMESS('F', 'POST0_16')

    # Création du maillage des NB_POINTS segments entre COOR_ORIG et COOR_EXTR
    # ainsi que des segments reliant les noeuds issus des group_no demandés
    # par appel au script python crea_mail_lig_coup
    # le maillage est ensuite recopié dans l unité logique UNITE_MAILLAGE

    resu_mail, arcgma, angles, nbno = crea_mail_lig_coup(
        dime, lignes, groups, arcs)
    UL = UniteAster()
    nomFichierSortie = UL.Nom(UNITE_MAILLAGE)
    fproc = open(nomFichierSortie, 'w')
    fproc.write(os.linesep.join(resu_mail))
    fproc.close()
    UL.EtatInit(UNITE_MAILLAGE)

    # Lecture du maillage de seg2 contenant toutes les lignes de coupe
    __macou = LIRE_MAILLAGE(FORMAT='ASTER',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'] in ('GROUP_NO', 'GROUP_MA'):
            motscles['CREA_GROUP_NO'].append(
                _F(GROUP_MA=m[m['TYPE']].ljust(24),))
        else:
            motscles['CREA_GROUP_NO'].append(_F(GROUP_MA='LICOU' + str(iocc),))
            iocc = iocc + 1

    __macou = DEFI_GROUP(reuse=__macou, MAILLAGE=__macou, **motscles)

    if AsType(RESULTAT).__name__ in ('evol_elas', 'evol_noli', 'mode_meca',
                                     'comb_fourier', 'mult_elas', 'fourier_elas'):
        __mocou = AFFE_MODELE(MAILLAGE=__macou,
                              AFFE=_F(TOUT='OUI',
                                      PHENOMENE='MECANIQUE',
                                      MODELISATION='BARRE',),
                              DISTRIBUTION=_F(METHODE='CENTRALISE'),
                              )
    elif AsType(RESULTAT).__name__ in ('evol_ther', 'evol_varc',):
        __mocou = AFFE_MODELE(MAILLAGE=__macou,
                              AFFE=_F(TOUT='OUI',
                                      PHENOMENE='THERMIQUE',
                                      MODELISATION='PLAN',),)

    motscles = {}
    motscles['VIS_A_VIS'] = []
    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 NOM_CHAM[5:9] == 'ELGA':
        UTMESS('A', 'POST0_18', valk=[NOM_CHAM, ])

    if (l_mode_meca_sans_modele == False):
        # on utilise le modèle pour projeter le champ
        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='COLLOCATION',
                             RESULTAT=RESULTAT,
                             MODELE_1=MODELE_1,
                             DISTANCE_MAX=m['DISTANCE_MAX'],
                             MODELE_2=__mocou,
                             TYPE_CHAM='NOEU',
                             NOM_CHAM=NOM_CHAM, **motscles)

    else:
        # on utilise directement le maillage (ou squelette) pour projeter le
        # champ
        if n_mailla in self.get_global_contexte().keys():
            MAILLAGE_1 = self.get_global_contexte()[n_mailla]
        else:
            MAILLAGE_1 = self.jdc.current_context[n_mailla]

        __recou = PROJ_CHAMP(METHODE='COLLOCATION',
                             RESULTAT=RESULTAT,
                             MAILLAGE_1=MAILLAGE_1,
                             DISTANCE_MAX=m['DISTANCE_MAX'],
                             MODELE_2=__mocou,
                             TYPE_CHAM='NOEU',
                             NOM_CHAM=NOM_CHAM, **motscles)

    __remodr = __recou
    icham = 0
    ioc2 = 0
    mcACTION = []
    angtab = []

    if AsType(RESULTAT).__name__ in ('evol_ther', 'evol_elas', 'evol_noli', 'mode_meca', 'evol_varc',
                                     'comb_fourier', 'mult_elas', 'fourier_elas'):

        if NOM_CHAM in ('DEPL', 'SIEF_ELNO', 'SIGM_NOEU', 'SIGM_ELNO', 'FLUX_ELNO', 'FLUX_NOEU'):
            icham = 1
        iocc = 0
        for m in LIGN_COUPE:

            iocc = iocc + 1
            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)
                nomgrma = groupe
            else:
                ioc2 = ioc2 + 1
                groupe = 'LICOU' + str(ioc2)
                nomgrma = ' '
                newgrp = 'LICOF' + str(ioc2)
                crea_grp_matiere(
                    self, groupe, newgrp, iocc, m, __remodr, NOM_CHAM, LIGN_COUPE, __macou)
                groupe = newgrp

            # 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, **motscles),)
                    else:
                        __remodr = crea_resu_local(
                            self, dime, NOM_CHAM, m, __recou, __macou, nomgrma)
                        mcACTION.append(_F(INTITULE=intitl,
                                        RESULTAT=__remodr,
                                        GROUP_NO=groupe,
                                        NOM_CHAM=NOM_CHAM, **motscles),)

                else:
                    UTMESS('A', 'POST0_17', valk=[NOM_CHAM, m['REPERE']])
                    mcACTION.append(_F(INTITULE=intitl,
                                       RESULTAT=__recou,
                                       GROUP_NO=groupe,
                                       NOM_CHAM=NOM_CHAM, **motscles),)

            # 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, **motscles),)

    else:
        assert 0

    __tabitm = POST_RELEVE_T(ACTION=mcACTION,)

    # on repasse par les tables python pour supprimer les paramètres inutiles
    # NOEUD (car il est propre au maillage de la ligne) et RESU

    self.DeclareOut('nomres', self.sd)
    dictab = __tabitm.EXTR_TABLE()
    # Ajout de la colonne theta
    if len(arcgma) > 0:
        coltab = []
        val = dictab['ABSC_CURV'].values()['ABSC_CURV']
        nbi = len(val) / nbno
        nba = len(angles)
        tmp = []
        for k in range(nba):
            for j in range(nbi):
                for i in range(len(angles[k])):
                    tmp.append(angles[k][i])
        dictab['ANGLE'] = tmp

    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)

    RetablirAlarme('ALGORITH12_43')
    RetablirAlarme('CALCULEL2_63')
    RetablirAlarme('CALCULEL2_64')
    RetablirAlarme('MODELISA5_53')
    RetablirAlarme('MODELE1_58')
    RetablirAlarme('MODELE1_63')
    RetablirAlarme('MODELE1_64')
    return ier
Пример #13
0
def lire_fonction_ops(self, FORMAT, TYPE, SEPAR, INDIC_PARA, UNITE,
                      NOM_PARA, NOM_RESU, INTERPOL, PROL_DROITE,
                      PROL_GAUCHE, VERIF, INFO, TITRE, **args):
    """Méthode corps de la macro
    """
    from code_aster.Cata.Syntax import _F
    from Utilitai.Utmess import UTMESS
    from Utilitai.UniteAster import UniteAster

    ier = 0
    # La macro compte pour 1 dans la numerotation des commandes
    self.set_icmd(1)

    # On recopie le mot cle defi_fonction pour le proteger
    if TYPE == 'NAPPE':
        mc_DEFI_FONCTION = args['DEFI_FONCTION']

    # On importe les definitions des commandes a utiliser dans la macro
    DEFI_FONCTION = self.get_cmd('DEFI_FONCTION')
    DEFI_NAPPE = self.get_cmd('DEFI_NAPPE')
    assert FORMAT in ('LIBRE', 'NUMPY')

    nompro = 'LIRE_FONCTION'

    # Lecture de la fonction dans un fichier d unité logique UNITE
    UL = UniteAster()
    nomfich = UL.Nom(UNITE)
    if not osp.isfile(nomfich):
        UTMESS('F', 'FONCT0_41', valk=nomfich)

    # fonction(_c) ou nappe en sortie
    self.DeclareOut('ut_fonc', self.sd)

    if TYPE == 'FONCTION':
        values = function_values(FORMAT, nomfich, INDIC_PARA,
                                 args['INDIC_RESU'], SEPAR, INFO)
        # création de la fonction ASTER :
        ut_fonc = DEFI_FONCTION(NOM_PARA=NOM_PARA,
                                NOM_RESU=NOM_RESU,
                                PROL_DROITE=PROL_DROITE,
                                PROL_GAUCHE=PROL_GAUCHE,
                                INTERPOL=INTERPOL,
                                INFO=INFO,
                                TITRE=TITRE,
                                VERIF=VERIF,
                                VALE=values)

    elif TYPE == 'FONCTION_C':
        # mise en forme de la liste de valeurs suivant le format choisi :
        if FORMAT == 'LIBRE':
            if 'INDIC_REEL' in args:
                indic1 = args['INDIC_REEL']
                indic2 = args['INDIC_IMAG']
            if 'INDIC_MODU' in args:
                indic1 = args['INDIC_MODU']
                indic2 = args['INDIC_PHAS']
            try:
                liste_vale_r = liste_double(nomfich, INDIC_PARA, indic1, SEPAR, INFO)
            except LectureBlocError, exc:
                UTMESS('F', 'FONCT0_42', valk=exc.args)

            try:
                liste_vale_i = liste_double(nomfich, INDIC_PARA, indic2, SEPAR, INFO)
            except LectureBlocError, exc:
                UTMESS('F', 'FONCT0_42', valk=exc.args)

            liste = []
            if 'INDIC_REEL' in args:
                for i in range(len(liste_vale_r) / 2):
                    liste.extend(
                        [liste_vale_r[2 * i], liste_vale_r[2 * i + 1], liste_vale_i[2 * i + 1]])
            elif 'INDIC_MODU' in args:
                for i in range(len(liste_vale_r) / 2):
                    module = liste_vale_r[2 * i + 1]
                    phase = liste_vale_i[2 * i + 1]
                    liste.extend(
                        [liste_vale_r[2 * i], module * cos(phase), module * sin(phase)])
Пример #14
0
def post_endo_fiss_ops(self, TABLE, OUVERTURE, NOM_CMP, NOM_CHAM, RECHERCHE,
                       **args):

    import aster
    from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
    from code_aster.Cata.Syntax import _F

    # --------------------------------------------------
    # DEVELOPER OPTIONS
    #
    # "strong_flag" must be set to True if computing crack opening with the "strong" method
    strong_flag = False

    ier = 0
    # La macro compte pour 1 dans la numerotation des commandes
    self.set_icmd(1)

    MasquerAlarme('CALCULEL5_48')
    MasquerAlarme('ALGORITH12_43')
    MasquerAlarme('CALCULEL2_12')
    MasquerAlarme('CALCULEL5_7')

    # --------------------------------------------------
    # OUTPUT DECLARATION
    #
    self.DeclareOut('MAFISS', self.sd)
    self.DeclareOut('tabRes', TABLE)

    # --------------------------------------------------
    # IMPORT OF ASTER COMMANDS
    #
    LIRE_MAILLAGE = self.get_cmd('LIRE_MAILLAGE')
    IMPR_TABLE = self.get_cmd('IMPR_TABLE')
    CREA_TABLE = self.get_cmd('CREA_TABLE')
    CREA_CHAMP = self.get_cmd('CREA_CHAMP')
    CO = self.get_cmd('CO')
    IMPR_RESU = self.get_cmd('IMPR_RESU')
    RECU_TABLE = self.get_cmd('RECU_TABLE')

    # --------------------------------------------------
    #  INPUT PARAMETERS
    #
    l_dRECHERCHE = []
    for recherche in RECHERCHE:
        dRECHERCHE = recherche.cree_dict_valeurs(recherche.mc_liste)
        for i in dRECHERCHE.keys():
            if dRECHERCHE[i] == None:
                del dRECHERCHE[i]
        l_dRECHERCHE.append(dRECHERCHE)

    # --------------------------------------------------
    # INPUT PARAMETERS, MESH AND MODEL
    #
    motscles = {}

    for dRECHERCHE in l_dRECHERCHE:
        if (OUVERTURE == 'OUI') and ('BORNE_MAX' not in dRECHERCHE.keys()):
            UTMESS('F', 'POST0_44')

    if args['CHAM_GD'] != None:
        build = 'champ'
        __ENDO = args['CHAM_GD']
        inst = 1.
        motscles['INST'] = inst

        n_mail = __ENDO.sdj.REFE.get()[0].strip()
        __mail = self.get_concept(n_mail)

    else:
        build = 'resu'
        __RESUIN = args['RESULTAT']
        nomresu = __RESUIN.nom
        dicResu = __RESUIN.LIST_PARA()
        dicVarAcc = __RESUIN.LIST_VARI_ACCES()
        if args['NUME_ORDRE'] != None:
            nume_ordre = args['NUME_ORDRE']
            if nume_ordre not in dicVarAcc['NUME_ORDRE']:
                UTMESS('F', 'POST0_41')
            else:
                inst = (dicVarAcc['INST'])[nume_ordre]
            motscles['NUME_ORDRE'] = nume_ordre
        else:
            inst = args['INST']
            motscles['INST'] = inst
            nume_ordre = None
            for champ_inst_index, champ_inst in enumerate(dicVarAcc['INST']):
                if round(champ_inst, 12) == round(inst, 12):
                    nume_ordre = dicVarAcc['NUME_ORDRE'][champ_inst_index]
                    break
            if nume_ordre is None:
                UTMESS('F', 'POST0_41')

        # Maillage pour projections
        iret, ibid, n_mail = aster.dismoi('NOM_MAILLA', __RESUIN.nom,
                                          'RESULTAT', 'F')
        __mail = self.get_concept(n_mail)

    dime = __mail.sdj.DIME.get()[5]

    # --------------------------------------------------
    # CONTROLS ON THE INPUT FIELDS
    #
    if build == 'resu':
        ChampsResu = __RESUIN.LIST_CHAMPS()
        lstChampsResu = ChampsResu.keys()
        if (NOM_CHAM not in lstChampsResu):
            UTMESS('F', 'POST0_42')
        elif (nume_ordre not in ChampsResu[NOM_CHAM]):
            UTMESS('F', 'POST0_41')
        else:
            pass

    if build == 'champ' and OUVERTURE == 'OUI':
        UTMESS('F', 'POST0_43')

    if ('NOEU' in NOM_CHAM) or (NOM_CHAM == 'DEPL'):
        typeChampTrajet = 'NOEU' + '_' + NOM_CHAM[0:4] + '_R'
        if NOM_CHAM == 'VARI_NOEU':
            typeChampTrajet = 'NOEU_VAR2_R'
    else:
        UTMESS('F', 'POST0_35')

    # --------------------------------------------------
    # QUANTITIES FOR THE 2D PROCEDURE
    #
    __TABG = RECU_TABLE(
        CO=__mail,
        NOM_TABLE='CARA_GEOM',
    )

    xmin = __TABG['X_MIN', 1]
    xmax = __TABG['X_MAX', 1]
    ymin = __TABG['Y_MIN', 1]
    ymax = __TABG['Y_MAX', 1]
    zmin = __TABG['Z_MIN', 1]
    zmax = __TABG['Z_MAX', 1]

    nbPrec = NP.finfo(NP.float).precision
    delta_x = NP.round(xmax - xmin, nbPrec)
    delta_y = NP.round(ymax - ymin, nbPrec)
    delta_z = NP.round(zmax - zmin, nbPrec)

    Ddim = [delta_x, delta_y, delta_z]
    delta_min = min(Ddim)
    if NP.round(delta_min, nbPrec - 2) != 0.:
        UTMESS('F', 'POST0_34')
    else:
        idx_plan = Ddim.index(delta_min)

    # PLAN == 'XY' :
    if idx_plan == 2:
        coorIni1 = 0
        coorIni2 = 1
        dnor = NP.array([0., 0., 1.], float)
        dplan1 = NP.array([1., 0., 0.], float)
        dplan2 = NP.array([0., 1., 0.], float)
    # PLAN == 'XZ':
    elif idx_plan == 1:
        coorIni1 = 0
        coorIni2 = 2
        dnor = NP.array([0., 1., 0.], float)
        dplan1 = NP.array([1., 0., 0.], float)
        dplan2 = NP.array([0., 0., 1.], float)
    # PLAN == 'YZ':
    else:
        coorIni1 = 1
        coorIni2 = 2
        dnor = NP.array([1., 0., 0.], float)
        dplan1 = NP.array([0., 1., 0.], float)
        dplan2 = NP.array([0., 0., 1.], float)

    infoPlan = (coorIni1, coorIni2, dnor, dplan1, dplan2)

    # --------------------------------------------------
    # FIELD FOR CRACK PATH SEARCH
    #
    if build == 'resu':
        __ENDO = CREA_CHAMP(TYPE_CHAM=typeChampTrajet,
                            OPERATION='EXTR',
                            RESULTAT=__RESUIN,
                            NOM_CHAM=NOM_CHAM,
                            **motscles)

    # --------------------------------------------------
    # LOOP ON THE FPZs (INSTANCES OF KEYWORD "RECHERCHE")
    #
    XcreteTot = []
    YcreteTot = []
    ZcreteTot = []
    ConnTot = []
    EndocreteTot = []
    lstFissure = []
    lstOuverture = []
    lstErreur = []
    lstNomFiss = []

    for idxRech in range(len(l_dRECHERCHE)):

        dRECHERCHE = l_dRECHERCHE[idxRech]

        (CoxCrete, CoyCrete, CozCrete, EndoCrete,
         Connex) = cherche_trajet(self, NOM_CMP, NOM_CHAM, dRECHERCHE, __ENDO,
                                  __mail, typeChampTrajet, infoPlan, inst)
        if OUVERTURE == 'OUI':
            if strong_flag == False:
                lstOuvFiss = calcul_ouverture(self, NOM_CHAM, NOM_CMP,
                                              dRECHERCHE, __RESUIN, __mail,
                                              infoPlan, inst, CoxCrete,
                                              CoyCrete, CozCrete, dime,
                                              strong_flag)
            else:
                lstOuvFiss, lstErr = calcul_ouverture(self, NOM_CHAM, NOM_CMP,
                                                      dRECHERCHE, __RESUIN,
                                                      __mail, infoPlan, inst,
                                                      nume_ordre, CoxCrete,
                                                      CoyCrete, CozCrete, dime,
                                                      strong_flag)
        XcreteTot.append(CoxCrete)
        YcreteTot.append(CoyCrete)
        ZcreteTot.append(CozCrete)
        EndocreteTot.append(EndoCrete)
        ConnTot.append(Connex)
        if 'GROUP_MA' in dRECHERCHE.keys():
            nomFissure = dRECHERCHE['GROUP_MA']
        else:
            nomFissure = 'FISS' + str(idxRech + 1)
        lstFissure = lstFissure + ([nomFissure] * len(CoxCrete))
        lstNomFiss.append(nomFissure)

        if OUVERTURE == 'OUI':
            if '-' in lstOuvFiss:
                UTMESS('A', 'POST0_33', nomFissure)
            lstOuverture.append(lstOuvFiss)
            if strong_flag == True:
                lstErreur.append(lstErr)

    lstX = []
    lstY = []
    lstZ = []
    lstEndo = []
    if OUVERTURE == 'OUI':
        lstO = []
        if strong_flag == True:
            lstE = []

    for i in range(len(XcreteTot)):
        lstX = lstX + XcreteTot[i]
        lstY = lstY + YcreteTot[i]
        lstZ = lstZ + ZcreteTot[i]
        lstEndo = lstEndo + EndocreteTot[i]
        if OUVERTURE == 'OUI':
            lstO = lstO + lstOuverture[i]
            if strong_flag == True:
                lstE = lstE + lstErreur[i]

# -----------------------------------------------------
# CREATION OF A TABLE TO STOCK CRACK PATH COORDINATES
#   AND CRACK OPENING
#
    if OUVERTURE == 'NON':
        tabRes = CREA_TABLE(LISTE=(
            _F(PARA='FISSURE', LISTE_K=lstFissure),
            _F(PARA='COORX', LISTE_R=lstX),
            _F(PARA='COORY', LISTE_R=lstY),
            _F(PARA='COORZ', LISTE_R=lstZ),
            _F(PARA='CHAMP', LISTE_R=lstEndo),
        ), )

    else:
        if strong_flag == False:
            tabRes = CREA_TABLE(LISTE=(
                _F(PARA='FISSURE', LISTE_K=lstFissure),
                _F(PARA='COORX', LISTE_R=lstX),
                _F(PARA='COORY', LISTE_R=lstY),
                _F(PARA='COORZ', LISTE_R=lstZ),
                _F(PARA='CHAMP', LISTE_R=lstEndo),
                _F(PARA='OUVERTURE', LISTE_R=lstO),
            ), )

        else:  # STRONG Method
            tabRes = CREA_TABLE(LISTE=(
                _F(PARA='FISSURE', LISTE_K=lstFissure),
                _F(PARA='COORX', LISTE_R=lstX),
                _F(PARA='COORY', LISTE_R=lstY),
                _F(PARA='COORZ', LISTE_R=lstZ),
                _F(PARA='CHAMP', LISTE_R=lstEndo),
                _F(PARA='OUVERTURE', LISTE_R=lstO),
                _F(PARA='ERREUR', LISTE_R=lstE),
            ), )

    # --------------------------------------------------
    # CREATION OF DATA STRUCTURE "MESH"
    #
    resu_mail0 = crea_mail_lin(XcreteTot, YcreteTot, ZcreteTot, ConnTot,
                               lstNomFiss, dime)
    nomFichierSortie = os.path.join(os.getcwd(), 'maillage.mail')
    fproc = open(nomFichierSortie, 'w')
    fproc.write(resu_mail0)
    fproc.close()
    UL = UniteAster()
    uniteMail = UL.Libre(action='ASSOCIER', nom=nomFichierSortie)
    MAFISS = LIRE_MAILLAGE(
        FORMAT='ASTER',
        UNITE=uniteMail,
    )
    UL.EtatInit(uniteMail)

    RetablirAlarme('CALCULEL5_48')
    RetablirAlarme('ALGORITH12_43')
    RetablirAlarme('CALCULEL2_12')
    RetablirAlarme('CALCULEL5_7')

    return ier
Пример #15
0
def simu_point_mat_ops(self, MATER, INCREMENT, SIGM_IMPOSE, EPSI_IMPOSE,
                       SIGM_INIT, EPSI_INIT, VARI_INIT, NEWTON, CONVERGENCE,
                       MASSIF, ANGLE, COMPORTEMENT, INFO, ARCHIVAGE, SUPPORT,
                       **args):
    """Simulation de la reponse d'un point materiel"""

    ier = 0
    # La macro compte pour 1 dans la numerotation des commandes
    self.set_icmd(1)
    import math

    # On importe les definitions des commandes a utiliser dans la macro
    # Le nom de la variable doit etre obligatoirement le nom de la commande
    AFFE_CARA_ELEM = self.get_cmd('AFFE_CARA_ELEM')
    AFFE_CHAR_MECA = self.get_cmd('AFFE_CHAR_MECA')
    AFFE_MATERIAU = self.get_cmd('AFFE_MATERIAU')
    AFFE_MODELE = self.get_cmd('AFFE_MODELE')
    CALC_CHAMP = self.get_cmd('CALC_CHAMP')
    CALC_TABLE = self.get_cmd('CALC_TABLE')
    CREA_CHAMP = self.get_cmd('CREA_CHAMP')
    CREA_RESU = self.get_cmd('CREA_RESU')
    DEFI_FONCTION = self.get_cmd('DEFI_FONCTION')
    IMPR_TABLE = self.get_cmd('IMPR_TABLE')
    LIRE_MAILLAGE = self.get_cmd('LIRE_MAILLAGE')
    MODI_MAILLAGE = self.get_cmd('MODI_MAILLAGE')
    MODI_REPERE = self.get_cmd('MODI_REPERE')
    POST_RELEVE_T = self.get_cmd('POST_RELEVE_T')
    STAT_NON_LINE = self.get_cmd('STAT_NON_LINE')
    IMPR_RESU = self.get_cmd('IMPR_RESU')
    from Contrib.calc_point_mat import CALC_POINT_MAT

    from code_aster.Cata.Syntax import _F
    from Utilitai.UniteAster import UniteAster
    from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
    from Noyau.N_types import is_sequence

    # alarme de STAT_NON_LINE si les mot-cles de COMPORTEMENT sont renseignes
    # a tort
    MasquerAlarme('COMPOR4_70')

    # -- Tests de cohérence
    __fonczero = DEFI_FONCTION(NOM_PARA='INST',
                               VALE=(0, 0, 10, 0),
                               PROL_DROITE='CONSTANT',
                               PROL_GAUCHE='CONSTANT')
    EPS = {}
    SIG = {}
    itetra = 0
    CMP_EPS = ['EPXX', 'EPYY', 'EPZZ', 'EPXY', 'EPXZ', 'EPYZ']
    CMP_SIG = ['SIXX', 'SIYY', 'SIZZ', 'SIXY', 'SIXZ', 'SIYZ']

    if COMPORTEMENT:
        lcomp = COMPORTEMENT.List_F()[0]

    if SUPPORT != None:
        if SUPPORT == 'ELEMENT':
            itetra = 1
    if itetra == 0:
        if lcomp['DEFORMATION'] != 'PETIT':
            if args.has_key('GRAD_IMPOSE'):
                if args['GRAD_IMPOSE'] != None:
                    if lcomp['DEFORMATION'] != 'SIMO_MIEHE':
                        UTMESS('F', 'COMPOR2_22', valk=lcomp['DEFORMATION'])
                    itetra = 0
                else:
                    itetra = 1
                    UTMESS('A', 'COMPOR2_1', valk=lcomp['DEFORMATION'])

#===============================================================
# cas ou il n'y a pas d'élement fini : appel à CALC_POINT_MAT
#===============================================================
    if itetra == 0:

        isig = 0
        ieps = 0
        igrd = 0
        ic1c2 = 0
        if SIGM_IMPOSE:
            SIG = SIGM_IMPOSE[0].cree_dict_valeurs(SIGM_IMPOSE[0].mc_liste)
            isig = 1
        if EPSI_IMPOSE:
            EPS = EPSI_IMPOSE[0].cree_dict_valeurs(EPSI_IMPOSE[0].mc_liste)
            ieps = 1
        if args.has_key('GRAD_IMPOSE'):
            if args['GRAD_IMPOSE'] != None:
                FIJ = args['GRAD_IMPOSE'][0].cree_dict_valeurs(
                    args['GRAD_IMPOSE'][0].mc_liste)
                igrd = 1
        if args.has_key('MATR_C1'):
            if args['MATR_C1'] != None:
                ic1c2 = 1
        if args.has_key('MATR_C2'):
            if args['MATR_C2'] != None:
                ic1c2 = 1

        motscles = {}
        if igrd:
            for i in FIJ.keys():
                motscles[i] = FIJ[i]
        elif ic1c2:
            if args.has_key('MATR_C1'):
                if args['MATR_C1'] != None:
                    motscles['MATR_C1'] = args['MATR_C1'].List_F()
            if args.has_key('MATR_C2'):
                if args['MATR_C2'] != None:
                    motscles['MATR_C2'] = args['MATR_C2'].List_F()
            if args.has_key('VECT_IMPO'):
                if args['VECT_IMPO'] != None:
                    motscles['VECT_IMPO'] = args['VECT_IMPO'].List_F()
        else:
            nbsig = 6
            for index in range(nbsig):
                iks = CMP_SIG[index]
                ike = CMP_EPS[index]
                inds = 0
                inde = 0
                if ieps:
                    if EPS[ike] != None:
                        inde = 1
                if isig:
                    if SIG[iks] != None:
                        inds = 1
                if inde * inds != 0:
                    UTMESS('F', 'COMPOR2_2', valk=iks)
                if inde == 1:
                    motscles[ike] = EPS[ike]
                elif inds == 1:
                    motscles[iks] = SIG[iks]
                else:
                    motscles[iks] = __fonczero
#      Etat initial
        etatinit = 0
        if SIGM_INIT != None:
            motscles['SIGM_INIT'] = SIGM_INIT.List_F()
        if EPSI_INIT != None:
            motscles['EPSI_INIT'] = EPSI_INIT.List_F()
        if VARI_INIT != None:
            motscles['VARI_INIT'] = VARI_INIT.List_F()
        if NEWTON != None:
            motscles['NEWTON'] = NEWTON.List_F()
        if CONVERGENCE != None:
            motscles['CONVERGENCE'] = CONVERGENCE.List_F()
        if MASSIF != None:
            motscles['MASSIF'] = MASSIF.List_F()
        if COMPORTEMENT:
            motscles['COMPORTEMENT'] = COMPORTEMENT.List_F()
#      -- Deroulement du calcul
        motscles['INCREMENT'] = INCREMENT.List_F()

        if args.has_key('FORMAT_TABLE'):
            if args['FORMAT_TABLE'] != None:
                motscles['FORMAT_TABLE'] = args['FORMAT_TABLE']

        if args.has_key('OPER_TANGENT'):
            if args['OPER_TANGENT'] != None:
                motscles['OPER_TANGENT'] = args['OPER_TANGENT']

        if args.has_key('NB_VARI_TABLE'):
            if args['NB_VARI_TABLE'] != None:
                motscles['NB_VARI_TABLE'] = args['NB_VARI_TABLE']

        if ARCHIVAGE:
            motscles['ARCHIVAGE'] = ARCHIVAGE.List_F()

            #     variables de commande
        if args.has_key('AFFE_VARC'):
            if args['AFFE_VARC'] != None:
                lvarc = args['AFFE_VARC'].List_F()
                nbvarc = len(lvarc)
                lmotcle = []
                for ivarc in range(nbvarc):
                    dico = {}
                    if (str(lvarc[ivarc]['NOM_VARC']) == 'M_ZIRC'):
                        dico['NOM_VARC'] = 'ALPHPUR'
                        dico['VALE_FONC'] = lvarc[ivarc]['V1']
                        lmotcle.append(dico)
                        dico = {}
                        dico['NOM_VARC'] = 'ALPHBETA'
                        dico['VALE_FONC'] = lvarc[ivarc]['V2']
                        lmotcle.append(dico)
                    elif (str(lvarc[ivarc]['NOM_VARC']) == 'M_ACIER'):
                        dico['NOM_VARC'] = 'PFERRITE'
                        dico['VALE_FONC'] = lvarc[ivarc]['V1']
                        lmotcle.append(dico)
                        dico = {}
                        dico['NOM_VARC'] = 'PPERLITE'
                        dico['VALE_FONC'] = lvarc[ivarc]['V2']
                        lmotcle.append(dico)
                        dico = {}
                        dico['NOM_VARC'] = 'PBAINITE'
                        dico['VALE_FONC'] = lvarc[ivarc]['V3']
                        lmotcle.append(dico)
                        dico = {}
                        dico['NOM_VARC'] = 'PMARTENS'
                        dico['VALE_FONC'] = lvarc[ivarc]['V4']
                        lmotcle.append(dico)
                    else:
                        dico['NOM_VARC'] = lvarc[ivarc]['NOM_VARC']
                        dico['VALE_FONC'] = lvarc[ivarc]['VALE_FONC']

                        if str(lvarc[ivarc]['NOM_VARC']) == 'TEMP' or str(
                                lvarc[ivarc]['NOM_VARC']) == 'SECH':
                            dico['VALE_REF'] = lvarc[ivarc]['VALE_REF']
                        lmotcle.append(dico)
                motscles['AFFE_VARC'] = lmotcle
        if lcomp['RELATION'] == 'META_LEMA_ANI':
            UTMESS('F', 'COMPOR2_91', valk=lcomp['RELATION'])
        self.DeclareOut('REPONSE', self.sd)

        Titre = 'CALC_POINT_MAT'
        if ARCHIVAGE != None:
            #         on ne prend en compte que ARCHIVAGE / LIST_INST
            if ARCHIVAGE['LIST_INST'] != None:
                __REP1 = CALC_POINT_MAT(INFO=INFO,
                                        MATER=MATER,
                                        ANGLE=ANGLE,
                                        **motscles)
                lr8 = ARCHIVAGE['LIST_INST']
                lr = lr8.Valeurs()
                REPONSE = CALC_TABLE(
                    TABLE=__REP1,
                    TITRE=Titre,
                    ACTION=_F(OPERATION='FILTRE',
                              NOM_PARA='INST',
                              VALE=lr,
                              PRECISION=ARCHIVAGE['PRECISION']),
                )
            else:
                REPONSE = CALC_POINT_MAT(INFO=INFO,
                                         MATER=MATER,
                                         ANGLE=ANGLE,
                                         **motscles)
        else:
            REPONSE = CALC_POINT_MAT(INFO=INFO,
                                     MATER=MATER,
                                     ANGLE=ANGLE,
                                     **motscles)

#===============================================================
# cas ou on fait le calcul sur un TETRA4 A UN SEUL POINT DE GAUSS
#===============================================================
    elif itetra == 1:

        EPS = {}
        SIG = {}
        MODELISATION = "3D"
        if args.has_key('MODELISATION'):
            if args['MODELISATION'] != None:
                MODELISATION = args['MODELISATION']

        if MODELISATION == "3D":
            nbsig = 6
            CMP_EPS = ['EPXX', 'EPYY', 'EPZZ', 'EPXY', 'EPXZ', 'EPYZ']
            CMP_SIG = ['SIXX', 'SIYY', 'SIZZ', 'SIXY', 'SIXZ', 'SIYZ']
        else:
            nbsig = 3
            CMP_EPS = ['EPXX', 'EPYY', 'EPXY']
            CMP_SIG = ['SIXX', 'SIYY', 'SIXY']

        if SIGM_IMPOSE:
            SIG = SIGM_IMPOSE[0].cree_dict_valeurs(SIGM_IMPOSE[0].mc_liste)
            for i in SIG.keys():
                if SIG[i] == None:
                    SIG[i] = __fonczero
        else:
            for i in range(nbsig):
                SIG[CMP_SIG[i]] = __fonczero

        if EPSI_IMPOSE:
            EPS = EPSI_IMPOSE[0].cree_dict_valeurs(EPSI_IMPOSE[0].mc_liste)
        else:
            for i in range(nbsig):
                EPS[CMP_EPS[i]] = None

        for index in range(nbsig):
            iks = CMP_SIG[index]
            ike = CMP_EPS[index]
            if EPS[ike] != None and SIG[iks] != __fonczero:
                UTMESS('F', 'COMPOR2_3', valk=str(iks) + ' ' + str(ike))

#     -- Definition du maillage
        if MODELISATION == "3D":

            texte_ma = """
           COOR_3D
             P0  0.0   0.0   0.0
             P1  1.0   0.0   0.0
             P2  0.0   1.0   0.0
             P3  0.0   0.0   1.0
           FINSF
           TRIA3
             F1   P0 P3 P2
             F2   P0 P1 P3
             F3   P0 P2 P1
             F4   P1 P2 P3
           FINSF
           TETRA4
             VOLUME = P0 P1 P2 P3
           FINSF
           GROUP_MA
           TOUT  VOLUME
           FINSF
           GROUP_NO
           TOUT  P1 P2 P0 P3
           FINSF
           FIN
         """

        else:

            texte_ma = """
           COOR_2D
             P0  0.0   0.0
             P1  1.0   0.0
             P2  0.0   1.0
           FINSF
           SEG2
             S1   P2 P0
             S2   P0 P1
             S3   P1 P2
           FINSF
           TRIA3
             VOLUME = P0 P1 P2
           FINSF
           GROUP_MA
           TOUT  VOLUME
           FINSF
           GROUP_NO
           TOUT  P1 P2 P0
           FINSF
           FIN
         """

        fi_mail = open('simu.mail', 'w')
        fi_mail.write(texte_ma)
        fi_mail.close()

        UL = UniteAster()
        umail = UL.Libre(action='ASSOCIER', nom='simu.mail')

        __MA = LIRE_MAILLAGE(FORMAT='ASTER', UNITE=umail)
        UL.EtatInit()

        if MODELISATION == "3D":
            __MO = AFFE_MODELE(MAILLAGE=__MA,
                               AFFE=_F(
                                   MAILLE=('VOLUME', 'F1', 'F2', 'F3', 'F4'),
                                   PHENOMENE='MECANIQUE',
                                   MODELISATION='3D',
                               ))
            # ANGLE : rotation de ANGLE autour de Z uniquement, et seulement pour les déformations
            # imposées.
            if ANGLE != 0.:
                __MA = MODI_MAILLAGE(
                    reuse=__MA,
                    MAILLAGE=__MA,
                    ROTATION=_F(POIN_1=(0., 0.), ANGLE=ANGLE),
                )
                c = math.cos(ANGLE * math.pi / 180.)
                s = math.sin(ANGLE * math.pi / 180.)
                __C_RIGIDE = AFFE_CHAR_MECA(
                    MODELE=__MO,
                    DDL_IMPO=_F(NOEUD='P0', DX=0, DY=0., DZ=0.),
                    LIAISON_DDL=(
                        _F(NOEUD=('P1', 'P1', 'P2', 'P2'),
                           DDL=('DX', 'DY', 'DX', 'DY'),
                           COEF_MULT=(s, -c, c, s),
                           COEF_IMPO=0),
                        _F(NOEUD=('P1', 'P3', 'P3'),
                           DDL=('DZ', 'DX', 'DY'),
                           COEF_MULT=(-1.0, c, s),
                           COEF_IMPO=0),
                        _F(NOEUD=('P2', 'P3', 'P3'),
                           DDL=('DZ', 'DX', 'DY'),
                           COEF_MULT=(-1.0, -s, c),
                           COEF_IMPO=0),
                    ),
                )
            else:
                #     -- Mouvement de corps rigide
                __C_RIGIDE = AFFE_CHAR_MECA(MODELE=__MO,
                                            DDL_IMPO=_F(NOEUD='P0',
                                                        DX=0,
                                                        DY=0,
                                                        DZ=0),
                                            LIAISON_DDL=(
                                                _F(NOEUD=('P2', 'P1'),
                                                   DDL=('DX', 'DY'),
                                                   COEF_MULT=(1, -1),
                                                   COEF_IMPO=0),
                                                _F(NOEUD=('P3', 'P1'),
                                                   DDL=('DX', 'DZ'),
                                                   COEF_MULT=(1, -1),
                                                   COEF_IMPO=0),
                                                _F(NOEUD=('P3', 'P2'),
                                                   DDL=('DY', 'DZ'),
                                                   COEF_MULT=(1, -1),
                                                   COEF_IMPO=0),
                                            ))
        else:
            # MODELISATION 2D
            __MO = AFFE_MODELE(MAILLAGE=__MA,
                               AFFE=_F(MAILLE=('VOLUME', 'S1', 'S2', 'S3'),
                                       PHENOMENE='MECANIQUE',
                                       MODELISATION=MODELISATION))
            # ANGLE : rotation de ANGLE autour de Z uniquement, et seulement pour les déformations
            # imposées.
            if ANGLE != 0.:
                __MA = MODI_MAILLAGE(
                    reuse=__MA,
                    MAILLAGE=__MA,
                    ROTATION=_F(POIN_1=(0., 0.), ANGLE=ANGLE),
                )
                c = math.cos(ANGLE * math.pi / 180.)
                s = math.sin(ANGLE * math.pi / 180.)
                __C_RIGIDE = AFFE_CHAR_MECA(
                    MODELE=__MO,
                    DDL_IMPO=_F(NOEUD='P0', DX=0, DY=0.),
                    LIAISON_DDL=(_F(NOEUD=('P1', 'P1', 'P2', 'P2'),
                                    DDL=('DX', 'DY', 'DX', 'DY'),
                                    COEF_MULT=(s, -c, c, s),
                                    COEF_IMPO=0), ),
                )
            else:
                __C_RIGIDE = AFFE_CHAR_MECA(MODELE=__MO,
                                            DDL_IMPO=_F(NOEUD='P0', DX=0,
                                                        DY=0),
                                            LIAISON_DDL=(_F(NOEUD=('P2', 'P1'),
                                                            DDL=('DX', 'DY'),
                                                            COEF_MULT=(1, -1),
                                                            COEF_IMPO=0), ))

#     --MASSIF : orientation du materiau (monocristal, orthotropie)
        if MASSIF:
            ANGMAS = MASSIF[0].cree_dict_valeurs(MASSIF[0].mc_liste)
            if ANGMAS["ANGL_REP"] == None:
                __CARA = AFFE_CARA_ELEM(
                    MODELE=__MO,
                    MASSIF=_F(MAILLE='VOLUME',
                              ANGL_EULER=ANGMAS["ANGL_EULER"]),
                )
            else:
                __CARA = AFFE_CARA_ELEM(
                    MODELE=__MO,
                    MASSIF=_F(MAILLE='VOLUME', ANGL_REP=ANGMAS["ANGL_REP"]),
                )

#     -- Chargement en deformation

        __E = [None] * nbsig

        __E[0] = AFFE_CHAR_MECA(MODELE=__MO,
                                LIAISON_OBLIQUE=_F(NOEUD='P1',
                                                   DX=1,
                                                   ANGL_NAUT=ANGLE))

        __E[1] = AFFE_CHAR_MECA(MODELE=__MO,
                                LIAISON_OBLIQUE=_F(NOEUD='P2',
                                                   DY=1,
                                                   ANGL_NAUT=ANGLE))

        if MODELISATION == "3D":

            __E[2] = AFFE_CHAR_MECA(MODELE=__MO,
                                    LIAISON_OBLIQUE=_F(NOEUD='P3',
                                                       DZ=1,
                                                       ANGL_NAUT=ANGLE))

            __E[3] = AFFE_CHAR_MECA(MODELE=__MO,
                                    LIAISON_OBLIQUE=_F(NOEUD='P1',
                                                       DY=1,
                                                       ANGL_NAUT=ANGLE))

            __E[4] = AFFE_CHAR_MECA(MODELE=__MO,
                                    LIAISON_OBLIQUE=_F(NOEUD='P1',
                                                       DZ=1,
                                                       ANGL_NAUT=ANGLE))

            __E[5] = AFFE_CHAR_MECA(MODELE=__MO,
                                    LIAISON_OBLIQUE=_F(NOEUD='P2',
                                                       DZ=1,
                                                       ANGL_NAUT=ANGLE))

        else:
            c = math.cos(ANGLE * math.pi / 180.)
            s = math.sin(ANGLE * math.pi / 180.)
            __E[2] = AFFE_CHAR_MECA(
                MODELE=__MO,
                LIAISON_OBLIQUE=_F(NOEUD='P1', DY=1, ANGL_NAUT=ANGLE),
            )

#     -- Chargement en contrainte

        __S = [None] * nbsig

        if MODELISATION == "3D":

            r33 = 3**-0.5
            __S[0] = AFFE_CHAR_MECA(MODELE=__MO,
                                    FORCE_FACE=(
                                        _F(MAILLE='F1', FX=-1),
                                        _F(MAILLE='F4', FX=r33),
                                    ))

            __S[1] = AFFE_CHAR_MECA(MODELE=__MO,
                                    FORCE_FACE=(
                                        _F(MAILLE='F2', FY=-1),
                                        _F(MAILLE='F4', FY=r33),
                                    ))

            __S[2] = AFFE_CHAR_MECA(MODELE=__MO,
                                    FORCE_FACE=(
                                        _F(MAILLE='F3', FZ=-1),
                                        _F(MAILLE='F4', FZ=r33),
                                    ))

            __S[3] = AFFE_CHAR_MECA(MODELE=__MO,
                                    FORCE_FACE=(
                                        _F(MAILLE='F1', FY=-1),
                                        _F(MAILLE='F2', FX=-1),
                                        _F(MAILLE='F4', FX=r33, FY=r33),
                                    ))

            __S[4] = AFFE_CHAR_MECA(MODELE=__MO,
                                    FORCE_FACE=(
                                        _F(MAILLE='F1', FZ=-1),
                                        _F(MAILLE='F3', FX=-1),
                                        _F(MAILLE='F4', FX=r33, FZ=r33),
                                    ))

            __S[5] = AFFE_CHAR_MECA(MODELE=__MO,
                                    FORCE_FACE=(
                                        _F(MAILLE='F2', FZ=-1),
                                        _F(MAILLE='F3', FY=-1),
                                        _F(MAILLE='F4', FY=r33, FZ=r33),
                                    ))

        else:
            r22 = 2**-0.5
            __S[0] = AFFE_CHAR_MECA(MODELE=__MO,
                                    FORCE_CONTOUR=(
                                        _F(MAILLE='S1', FX=-1),
                                        _F(MAILLE='S3', FX=r22),
                                    ))

            __S[1] = AFFE_CHAR_MECA(MODELE=__MO,
                                    FORCE_CONTOUR=(
                                        _F(MAILLE='S2', FY=-1),
                                        _F(MAILLE='S3', FY=r22),
                                    ))

            __S[2] = AFFE_CHAR_MECA(MODELE=__MO,
                                    FORCE_CONTOUR=(
                                        _F(MAILLE='S1', FY=-1),
                                        _F(MAILLE='S2', FX=-1),
                                        _F(MAILLE='S3', FX=r22, FY=r22),
                                    ))

#     -- Construction de la charge

        l_char = [_F(CHARGE=__C_RIGIDE)]

        for i in xrange(nbsig):
            ike = CMP_EPS[i]
            if EPS[ike]:
                l_char.append(_F(CHARGE=__E[i], FONC_MULT=EPS[ike]))

        for i in xrange(nbsig):
            iks = CMP_SIG[i]
            l_char.append(_F(CHARGE=__S[i], FONC_MULT=SIG[iks]))

#     variables de commande
        mcvarc = []
        if args.has_key('AFFE_VARC'):
            if args['AFFE_VARC'] != None:
                lvarc = args['AFFE_VARC'].List_F()
                nbvarc = len(lvarc)
                for ivarc in range(nbvarc):
                    dico = {}
                    if (str(lvarc[ivarc]['NOM_VARC']) == 'SECH'):
                        typech = 'NOEU_TEMP_R'
                        labsc = lvarc[ivarc]['VALE_FONC'].Absc()
                        lordo = lvarc[ivarc]['VALE_FONC'].Ordo()
                        l_affe_cham = []
                        __CHV = [None] * len(labsc)
                        for it, time in enumerate(labsc):
                            __CHV[it] = CREA_CHAMP(
                                TYPE_CHAM=typech,
                                OPERATION='AFFE',
                                MAILLAGE=__MA,
                                AFFE=_F(
                                    MAILLE='VOLUME',
                                    NOM_CMP='TEMP',
                                    VALE=lordo[it],
                                ),
                            ),
                            dicoch = {}
                            dicoch["CHAM_GD"] = __CHV[it]
                            dicoch["INST"] = time
                            l_affe_cham.append(dicoch)
                        __EVOV = CREA_RESU(OPERATION='AFFE',
                                           TYPE_RESU='EVOL_VARC',
                                           NOM_CHAM='TEMP',
                                           AFFE=l_affe_cham)
                    elif (str(lvarc[ivarc]['NOM_VARC']) == 'M_ZIRC'):
                        typech = 'ELNO_NEUT_R'
                        labsc = lvarc[ivarc]['V1'].Absc()
                        lordo1 = lvarc[ivarc]['V1'].Ordo()
                        lordo2 = lvarc[ivarc]['V2'].Ordo()
                        lordo3 = lvarc[ivarc]['V3'].Ordo()
                        lordo4 = lvarc[ivarc]['V4'].Ordo()
                        l_affe_cham = []
                        __CHV = [None] * len(labsc)
                        __CHN = [None] * len(labsc)
                        for it, time in enumerate(labsc):
                            __CHN[it] = CREA_CHAMP(
                                TYPE_CHAM=typech,
                                OPERATION='AFFE',
                                PROL_ZERO='OUI',
                                MODELE=__MO,
                                AFFE=(
                                    _F(
                                        MAILLE='VOLUME',
                                        NOM_CMP='X1',
                                        VALE=lordo1[it],
                                    ),
                                    _F(
                                        MAILLE='VOLUME',
                                        NOM_CMP='X2',
                                        VALE=lordo2[it],
                                    ),
                                    _F(
                                        MAILLE='VOLUME',
                                        NOM_CMP='X3',
                                        VALE=lordo3[it],
                                    ),
                                    _F(
                                        MAILLE='VOLUME',
                                        NOM_CMP='X4',
                                        VALE=lordo4[it],
                                    ),
                                ),
                            ),
                            dicoch = {}
                            __CHV[it] = CREA_CHAMP(OPERATION='ASSE',
                                                   TYPE_CHAM='ELNO_VARI_R',
                                                   MODELE=__MO,
                                                   PROL_ZERO='OUI',
                                                   ASSE=(
                                                       _F(CHAM_GD=__CHN[it],
                                                          NOM_CMP='X1',
                                                          NOM_CMP_RESU='V1',
                                                          GROUP_MA='TOUT'),
                                                       _F(CHAM_GD=__CHN[it],
                                                          NOM_CMP='X2',
                                                          NOM_CMP_RESU='V2',
                                                          GROUP_MA='TOUT'),
                                                       _F(CHAM_GD=__CHN[it],
                                                          NOM_CMP='X3',
                                                          NOM_CMP_RESU='V3',
                                                          GROUP_MA='TOUT'),
                                                       _F(CHAM_GD=__CHN[it],
                                                          NOM_CMP='X4',
                                                          NOM_CMP_RESU='V4',
                                                          GROUP_MA='TOUT'),
                                                   ))
                            dicoch["CHAM_GD"] = __CHV[it]
                            dicoch["INST"] = time
                            l_affe_cham.append(dicoch)
                        __EVOV = CREA_RESU(OPERATION='AFFE',
                                           TYPE_RESU='EVOL_THER',
                                           NOM_CHAM=str('META_ELNO'),
                                           AFFE=l_affe_cham)
                        IMPR_RESU(FORMAT='RESULTAT', RESU=_F(RESULTAT=__EVOV))
                    elif (str(lvarc[ivarc]['NOM_VARC']) == 'M_ACIER'):
                        typech = 'ELNO_NEUT_R'
                        labsc = lvarc[ivarc]['V1'].Absc()
                        lordo1 = lvarc[ivarc]['V1'].Ordo()
                        lordo2 = lvarc[ivarc]['V2'].Ordo()
                        lordo3 = lvarc[ivarc]['V3'].Ordo()
                        lordo4 = lvarc[ivarc]['V4'].Ordo()
                        lordo5 = lvarc[ivarc]['V5'].Ordo()
                        lordo6 = lvarc[ivarc]['V6'].Ordo()
                        lordo7 = lvarc[ivarc]['V7'].Ordo()
                        l_affe_cham = []
                        __CHV = [None] * len(labsc)
                        __CHN = [None] * len(labsc)
                        for it, time in enumerate(labsc):
                            __CHN[it] = CREA_CHAMP(
                                TYPE_CHAM=typech,
                                OPERATION='AFFE',
                                PROL_ZERO='OUI',
                                MODELE=__MO,
                                AFFE=(
                                    _F(
                                        MAILLE='VOLUME',
                                        NOM_CMP='X1',
                                        VALE=lordo1[it],
                                    ),
                                    _F(
                                        MAILLE='VOLUME',
                                        NOM_CMP='X2',
                                        VALE=lordo2[it],
                                    ),
                                    _F(
                                        MAILLE='VOLUME',
                                        NOM_CMP='X3',
                                        VALE=lordo3[it],
                                    ),
                                    _F(
                                        MAILLE='VOLUME',
                                        NOM_CMP='X4',
                                        VALE=lordo4[it],
                                    ),
                                    _F(
                                        MAILLE='VOLUME',
                                        NOM_CMP='X5',
                                        VALE=lordo5[it],
                                    ),
                                    _F(
                                        MAILLE='VOLUME',
                                        NOM_CMP='X6',
                                        VALE=lordo6[it],
                                    ),
                                    _F(
                                        MAILLE='VOLUME',
                                        NOM_CMP='X7',
                                        VALE=lordo7[it],
                                    ),
                                ),
                            ),
                            dicoch = {}
                            __CHV[it] = CREA_CHAMP(OPERATION='ASSE',
                                                   TYPE_CHAM='ELNO_VARI_R',
                                                   MODELE=__MO,
                                                   PROL_ZERO='OUI',
                                                   ASSE=(
                                                       _F(CHAM_GD=__CHN[it],
                                                          NOM_CMP='X1',
                                                          NOM_CMP_RESU='V1',
                                                          GROUP_MA='TOUT'),
                                                       _F(CHAM_GD=__CHN[it],
                                                          NOM_CMP='X2',
                                                          NOM_CMP_RESU='V2',
                                                          GROUP_MA='TOUT'),
                                                       _F(CHAM_GD=__CHN[it],
                                                          NOM_CMP='X3',
                                                          NOM_CMP_RESU='V3',
                                                          GROUP_MA='TOUT'),
                                                       _F(CHAM_GD=__CHN[it],
                                                          NOM_CMP='X4',
                                                          NOM_CMP_RESU='V4',
                                                          GROUP_MA='TOUT'),
                                                       _F(CHAM_GD=__CHN[it],
                                                          NOM_CMP='X5',
                                                          NOM_CMP_RESU='V5',
                                                          GROUP_MA='TOUT'),
                                                       _F(CHAM_GD=__CHN[it],
                                                          NOM_CMP='X6',
                                                          NOM_CMP_RESU='V6',
                                                          GROUP_MA='TOUT'),
                                                       _F(CHAM_GD=__CHN[it],
                                                          NOM_CMP='X7',
                                                          NOM_CMP_RESU='V7',
                                                          GROUP_MA='TOUT'),
                                                   ))
                            dicoch["CHAM_GD"] = __CHV[it]
                            dicoch["INST"] = time
                            l_affe_cham.append(dicoch)
                        __EVOV = CREA_RESU(OPERATION='AFFE',
                                           TYPE_RESU='EVOL_THER',
                                           NOM_CHAM=str('META_ELNO'),
                                           AFFE=l_affe_cham)
                        IMPR_RESU(FORMAT='RESULTAT', RESU=_F(RESULTAT=__EVOV))
                    else:
                        typech = 'NOEU_' + str(lvarc[ivarc]['NOM_VARC']) + '_R'
                        labsc = lvarc[ivarc]['VALE_FONC'].Absc()
                        lordo = lvarc[ivarc]['VALE_FONC'].Ordo()
                        l_affe_cham = []
                        __CHV = [None] * len(labsc)
                        for it, time in enumerate(labsc):
                            __CHV[it] = CREA_CHAMP(
                                TYPE_CHAM=typech,
                                OPERATION='AFFE',
                                MAILLAGE=__MA,
                                AFFE=_F(
                                    MAILLE='VOLUME',
                                    NOM_CMP=lvarc[ivarc]['NOM_VARC'],
                                    VALE=lordo[it],
                                ),
                            ),
                            dicoch = {}
                            dicoch["CHAM_GD"] = __CHV[it]
                            dicoch["INST"] = time
                            l_affe_cham.append(dicoch)
                        __EVOV = CREA_RESU(OPERATION='AFFE',
                                           TYPE_RESU='EVOL_VARC',
                                           NOM_CHAM=str(
                                               lvarc[ivarc]['NOM_VARC']),
                                           AFFE=l_affe_cham)
                    dico["MAILLE"] = 'VOLUME'
                    dico["EVOL"] = __EVOV
                    if (str(lvarc[ivarc]['NOM_VARC']) == 'M_ZIRC'):
                        dico["NOM_VARC"] = "M_ZIRC"
                    elif (str(lvarc[ivarc]['NOM_VARC']) == 'M_ACIER'):
                        dico["NOM_VARC"] = "M_ACIER"
                    else:
                        dico["NOM_VARC"] = lvarc[ivarc]['NOM_VARC']
                        if lvarc[ivarc]['VALE_REF'] != None:
                            dico["VALE_REF"] = lvarc[ivarc]['VALE_REF']
                    mcvarc.append(dico)
#      -- Materiau et modele
        if len(mcvarc) > 0:
            __CHMAT = AFFE_MATERIAU(
                MAILLAGE=__MA,
                AFFE=_F(MAILLE='VOLUME', MATER=MATER),
                AFFE_VARC=mcvarc,
            )
        else:
            __CHMAT = AFFE_MATERIAU(MAILLAGE=__MA,
                                    AFFE=_F(MAILLE='VOLUME', MATER=MATER))

#     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)
            if (not is_sequence(VARINI['VALE'])):
                VARINI['VALE'] = [
                    VARINI['VALE'],
                ]
            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_N480_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

        # --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

#     -- Deroulement du calcul
        motscles = {}
        if COMPORTEMENT:
            motscles['COMPORTEMENT'] = COMPORTEMENT.List_F()

        if lcomp['RELATION'] == 'META_LEMA_ANI':
            UTMESS('A', 'COMPOR2_92', valk=lcomp['RELATION'])

        motscles['CONVERGENCE'] = CONVERGENCE.List_F()

        motscles['NEWTON'] = NEWTON.List_F()

        if args.has_key('RECH_LINEAIRE'):
            if args['RECH_LINEAIRE'] != None:
                motscles['RECH_LINEAIRE'] = args['RECH_LINEAIRE'].List_F()

        motscles['INCREMENT'] = INCREMENT.List_F()

        if ARCHIVAGE:
            motscles['ARCHIVAGE'] = ARCHIVAGE.List_F()

        if args.has_key('SUIVI_DDL'):
            if args['SUIVI_DDL'] != None:
                motscles['SUIVI_DDL'] = args['SUIVI_DDL'].List_F()

        if etatinit == 1:

            if MASSIF:
                __EVOL1 = STAT_NON_LINE(INFO=INFO,
                                        CARA_ELEM=__CARA,
                                        MODELE=__MO,
                                        CHAM_MATER=__CHMAT,
                                        ETAT_INIT=init_dico,
                                        EXCIT=l_char,
                                        **motscles)
            else:
                __EVOL1 = STAT_NON_LINE(INFO=INFO,
                                        MODELE=__MO,
                                        CHAM_MATER=__CHMAT,
                                        ETAT_INIT=init_dico,
                                        EXCIT=l_char,
                                        **motscles)

        else:

            if MASSIF:
                __EVOL1 = STAT_NON_LINE(INFO=INFO,
                                        MODELE=__MO,
                                        CARA_ELEM=__CARA,
                                        CHAM_MATER=__CHMAT,
                                        EXCIT=l_char,
                                        **motscles)
            else:
                __EVOL1 = STAT_NON_LINE(INFO=INFO,
                                        MODELE=__MO,
                                        CHAM_MATER=__CHMAT,
                                        EXCIT=l_char,
                                        **motscles)

        if lcomp['DEFORMATION'] != 'PETIT':
            nomepsi = 'EPSG_ELNO'
        else:
            nomepsi = 'EPSI_ELNO'

        __EVOL1 = CALC_CHAMP(
            reuse=__EVOL1,
            RESULTAT=__EVOL1,
            CONTRAINTE='SIGM_ELNO',
            DEFORMATION=nomepsi,
            VARI_INTERNE='VARI_ELNO',
        )

        if MODELISATION == "3D":
            angles = (ANGLE, 0, 0)
            __EVOL = MODI_REPERE(
                RESULTAT=__EVOL1,
                MODI_CHAM=(
                    _F(
                        NOM_CHAM='DEPL',
                        NOM_CMP=('DX', 'DY', 'DZ'),
                        TYPE_CHAM='VECT_3D',
                    ),
                    _F(
                        NOM_CHAM='SIGM_ELNO',
                        NOM_CMP=('SIXX', 'SIYY', 'SIZZ', 'SIXY', 'SIXZ',
                                 'SIYZ'),
                        TYPE_CHAM='TENS_3D',
                    ),
                    _F(
                        NOM_CHAM=nomepsi,
                        NOM_CMP=('EPXX', 'EPYY', 'EPZZ', 'EPXY', 'EPXZ',
                                 'EPYZ'),
                        TYPE_CHAM='TENS_3D',
                    ),
                ),
                REPERE='UTILISATEUR',
                AFFE=_F(ANGL_NAUT=angles),
            )
        else:
            angles = ANGLE
            __EVOL = MODI_REPERE(
                RESULTAT=__EVOL1,
                MODI_CHAM=(
                    _F(
                        NOM_CHAM='DEPL',
                        NOM_CMP=('DX', 'DY'),
                        TYPE_CHAM='VECT_2D',
                    ),
                    _F(
                        NOM_CHAM='SIGM_ELNO',
                        NOM_CMP=('SIXX', 'SIYY', 'SIZZ', 'SIXY'),
                        TYPE_CHAM='TENS_2D',
                    ),
                    _F(
                        NOM_CHAM=nomepsi,
                        NOM_CMP=('EPXX', 'EPYY', 'EPZZ', 'EPXY'),
                        TYPE_CHAM='TENS_2D',
                    ),
                ),
                REPERE='UTILISATEUR',
                AFFE=_F(ANGL_NAUT=angles),
            )

#     -- Recuperation des courbes

        __REP_VARI = POST_RELEVE_T(ACTION=(_F(INTITULE='VARI_INT',
                                              RESULTAT=__EVOL1,
                                              NOM_CHAM='VARI_ELNO',
                                              TOUT_CMP='OUI',
                                              OPERATION='EXTRACTION',
                                              NOEUD='P0'), ))

        __REP_EPSI = POST_RELEVE_T(ACTION=(_F(INTITULE='EPSILON',
                                              RESULTAT=__EVOL,
                                              NOM_CHAM=nomepsi,
                                              TOUT_CMP='OUI',
                                              OPERATION='EXTRACTION',
                                              NOEUD='P0'), ))

        __REP_SIGM = POST_RELEVE_T(ACTION=(_F(INTITULE='SIGMA',
                                              RESULTAT=__EVOL,
                                              NOM_CHAM='SIGM_ELNO',
                                              TOUT_CMP='OUI',
                                              OPERATION='EXTRACTION',
                                              NOEUD='P0'), ))

        __REP_INV = POST_RELEVE_T(ACTION=(_F(INTITULE='INV',
                                             RESULTAT=__EVOL,
                                             NOM_CHAM='SIGM_ELNO',
                                             INVARIANT='OUI',
                                             OPERATION='EXTRACTION',
                                             NOEUD='P0'), ))

        __REP_INV = CALC_TABLE(TABLE=__REP_INV,
                               reuse=__REP_INV,
                               ACTION=_F(
                                   OPERATION='EXTR',
                                   NOM_PARA=('INST', 'TRACE', 'VMIS'),
                               ))

        self.DeclareOut('REPONSE', self.sd)

        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'),
                                 ),
                                 _F(
                                     OPERATION='COMB',
                                     TABLE=__REP_VARI,
                                     NOM_PARA=('INST'),
                                 ),
                             ))

    RetablirAlarme('COMPOR4_70')
    return ier
Пример #16
0
def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args):
    """
    Macro IMPR_FONCTION permettant d'imprimer dans un fichier des fonctions,
    colonnes de table...
    Erreurs<S> dans IMPR_FONCTION pour ne pas perdre la base.
    """
    macro = 'IMPR_FONCTION'
    import pprint
    import aster
    from code_aster.Cata.Syntax import _F
    from code_aster.Cata.DataStructure import (nappe_sdaster, fonction_c,
                                               formule, formule_c)
    from Utilitai import Graph
    from Utilitai.Utmess import UTMESS
    from Utilitai.UniteAster import UniteAster

    ier = 0
    # La macro compte pour 1 dans la numerotation des commandes
    self.set_icmd(1)

    # On importe les definitions des commandes a utiliser dans la macro
    # Le nom de la variable doit etre obligatoirement le nom de la commande
    CALC_FONC_INTERP = self.get_cmd('CALC_FONC_INTERP')
    DEFI_LIST_REEL = self.get_cmd('DEFI_LIST_REEL')

    #----------------------------------------------
    # 0. Traitement des arguments, initialisations
    # unité logique des fichiers réservés
    ul_reserve = (8, )
    UL = UniteAster()

    # 0.1. Fichier
    nomfich = None
    if args['UNITE'] and args['UNITE'] != 6:
        nomfich = UL.Nom(args['UNITE'])
        if INFO == 2:
            aster.affiche('MESSAGE', ' Nom du fichier :' + nomfich)
    if nomfich and os.path.exists(nomfich) and os.stat(nomfich).st_size != 0:
        if FORMAT == 'XMGRACE':
            niv = 'I'
        else:
            niv = 'I'
        UTMESS(niv, 'FONCT0_1', valk=nomfich)

    # 0.2. Récupération des valeurs sous COURBE
    unparmi = ('FONCTION', 'LIST_RESU', 'FONC_X', 'ABSCISSE', 'NAPPE',
               'NAPPE_LISSEE')

    # i0 : indice du mot-clé facteur qui contient LIST_PARA, sinon i0=0
    i0 = 0
    Courbe = []
    iocc = -1
    for Ci in COURBE:
        iocc += 1
        dC = Ci.cree_dict_valeurs(Ci.mc_liste)
        if dC.has_key('LIST_PARA') and dC['LIST_PARA'] != None and i0 == 0:
            i0 = iocc
        for mc in dC.keys():
            if dC[mc] == None:
                del dC[mc]
        Courbe.append(dC)
    if INFO == 2:
        aster.affiche('MESSAGE',
                      ' Nombre de fonctions à analyser : ' + str(len(Courbe)))

    # 0.3. Devra-t-on interpoler globalement ?
    #      Dans ce cas, __linter est le LIST_PARA
    #      ou, à défaut, les abscisses de la première courbe
    interp = False
    if FORMAT == 'TABLEAU':
        interp = True
        dCi = Courbe[i0]
        if dCi.has_key('LIST_PARA'):
            __linter = dCi['LIST_PARA']
        else:
            obj = None
            for typi in unparmi:
                if dCi.has_key(typi):
                    obj = dCi[typi]
                    break
            if obj == None:
                UTMESS('S', 'SUPERVIS_56')
            if typi == 'FONCTION' or typi == 'NAPPE' or typi == 'NAPPE_LISSEE':
                if isinstance(obj, nappe_sdaster):
                    lpar, lval = obj.Valeurs()
                    linterp = lval[0][0]
                else:
                    linterp = obj.Valeurs()[0]
            elif typi == 'FONC_X':
                lbid, linterp = obj.Valeurs()
            elif typi == 'ABSCISSE':
                linterp = obj
            __linter = DEFI_LIST_REEL(VALE=linterp)
        if INFO == 2:
            aster.affiche('MESSAGE', ' Interpolation globale sur la liste :')
            aster.affiche('MESSAGE', pprint.pformat(__linter.Valeurs()))

    #----------------------------------------------
    # 1. Récupération des valeurs des N courbes sous forme
    #    d'une liste de N listes
    #----------------------------------------------
    graph = Graph.Graph()
    iocc = -1
    for dCi in Courbe:
        iocc += 1

        # 1.1. Type d'objet à traiter
        obj = None
        for typi in unparmi:
            if dCi.has_key(typi):
                obj = dCi[typi]
                break
        if not dCi.has_key('LEGENDE') and hasattr(obj, 'get_name'):
            dCi['LEGENDE'] = obj.get_name()
        if obj == None:
            UTMESS('S', 'SUPERVIS_56')

        # 1.2. Extraction des valeurs

        # 1.2.1. Mot-clé FONCTION
        if typi == 'FONCTION' or typi == 'NAPPE' or typi == 'NAPPE_LISSEE':
            # formule à un paramètre seulement
            if isinstance(obj, formule):
                dpar = obj.Parametres()
                if len(dpar['NOM_PARA']) != 1:
                    UTMESS('S',
                           'FONCT0_50',
                           valk=obj.nom,
                           vali=len(dpar['NOM_PARA']))

            if isinstance(obj, nappe_sdaster):
                lpar, lval = obj.Valeurs()
                dico, ldicf = obj.Parametres()
                Leg = dCi['LEGENDE']
                for i in range(len(lpar)):
                    p = lpar[i]
                    lx = lval[i][0]
                    ly = lval[i][1]
                    # sur quelle liste interpoler chaque fonction
                    if i == 0:
                        if interp:
                            __li = __linter
                        elif dCi.has_key('LIST_PARA'):
                            __li = dCi['LIST_PARA']
                        else:
                            __li = DEFI_LIST_REEL(VALE=lx)
                    # compléter les paramètres d'interpolation
                    dic = dico.copy()
                    dic.update(ldicf[i])

                    if (interp or dCi.has_key('LIST_PARA')) and i > 0:

                        try:
                            __ftmp = CALC_FONC_INTERP(FONCTION=obj,
                                                      VALE_PARA=p,
                                                      LIST_PARA_FONC=__li,
                                                      **dic)
                            pv, lv2 = __ftmp.Valeurs()
                            lx = lv2[0][0]
                            ly = lv2[0][1]
                        except aster.error, err:
                            # on verifie que la bonne exception a ete levee
                            assert err.id_message == "FONCT0_9", 'unexpected id : %s' % err.id_message
                            continue

                    # on stocke les données dans le Graph
                    nomresu = dic['NOM_RESU'].strip() + '_' + str(
                        len(graph.Legendes))
                    dicC = {
                        'Val': [lx, ly],
                        'Lab': [dic['NOM_PARA_FONC'], nomresu]
                    }
                    # ajoute la valeur du paramètre
                    dCi['LEGENDE'] = '%s %s=%g' % (Leg,
                                                   dic['NOM_PARA'].strip(), p)
                    if typi == 'NAPPE':
                        dCi['LEGENDE'] = '%s %s=%g' % (
                            Leg, dic['NOM_PARA'].strip(), p)
                    if typi == 'NAPPE_LISSEE':
                        dCi['LEGENDE'] = 'NAPPE_LISSEE %s %s=%g' % (
                            Leg, dic['NOM_PARA'].strip(), p)
                    Graph.AjoutParaCourbe(dicC, args=dCi)
                    graph.AjoutCourbe(**dicC)
            else:
                __ftmp = obj
                dpar = __ftmp.Parametres()
                # pour les formules à un paramètre (test plus haut)
                if type(dpar['NOM_PARA']) in (list, tuple):
                    dpar['NOM_PARA'] = dpar['NOM_PARA'][0]
                if interp:
                    try:
                        __ftmp = CALC_FONC_INTERP(FONCTION=obj,
                                                  LIST_PARA=__linter,
                                                  **dpar)
                    except aster.error, err:

                        # on verifie que la bonne exception a ete levee
                        assert err.id_message == "FONCT0_9", 'unexpected id : %s' % err.id_message
                        continue
                elif dCi.has_key('LIST_PARA'):
                    try:
                        __ftmp = CALC_FONC_INTERP(FONCTION=obj,
                                                  LIST_PARA=dCi['LIST_PARA'],
                                                  **dpar)
                    except aster.error, err:
                        # on verifie que la bonne exception a ete levee
                        assert err.id_message == "FONCT0_9", 'unexpected id : %s' % err.id_message
                        continue