Пример #1
0
def recu_coor_z(noma, group, typ_group, tole_r):

    import aster
    from Utilitai.Utmess import UTMESS

    collcnx = aster.getcolljev(noma.nom.ljust(8) + '.CONNEX')
    coord = aster.getvectjev(noma.nom.ljust(8) + '.COORDO    .VALE')
    cnom = aster.getvectjev(noma.nom.ljust(8) + '.NOMNOE')

    coor_z = []

    if typ_group == 'group_ma':
        nomgrma = group
        collgrma = aster.getcolljev(noma.nom.ljust(8) + '.GROUPEMA')
        if nomgrma.ljust(24) not in collgrma:
            UTMESS("F", "MISS0_26", valk=group)
        else:
            numa = collgrma[nomgrma.ljust(24)]
            for ima in numa:
                n = collcnx[ima][0]
                uzmin = round(coord[3 * (n - 1) + 2], tole_r)
                uzmax = round(coord[3 * (n - 1) + 2], tole_r)
                for i in range(len(collcnx[ima])):
                    n = collcnx[ima][i]
                    uzmin = min(uzmin, round(coord[3 * (n - 1) + 2], tole_r))
                    uzmax = max(uzmax, round(coord[3 * (n - 1) + 2], tole_r))
                if uzmin not in coor_z:
                    coor_z.append(uzmin)
                if uzmax not in coor_z:
                    coor_z.append(uzmax)
    elif typ_group == 'group_no':
        collgrno = aster.getcolljev(noma.nom.ljust(8) + '.GROUPENO')
        nomgrno = group
        if nomgrno.ljust(24) not in collgrno:
            UTMESS("F", "MISS0_26", valk=group)
        else:
            grpn = collgrno[nomgrno.ljust(24)]
            l_coor_group = []
            i = 0
            for node in grpn:
                l_coor_group.append(
                    aster.getvectjev(
                        noma.nom.ljust(8) + '.COORDO    .VALE', 3 * (node - 1),
                        3))
                uz = round(l_coor_group[i][2], tole_r)
                i += 1
                if uz not in coor_z:
                    coor_z.append(uz)
    else:
        assert 0, 'recu_coor_z : erreur argument typ_group'

    prov = sorted(coor_z)
    coor_z = prov[::-1]

    return coor_z
Пример #2
0
    def EXTR_TABLE(self, para=None):
        """Produit un objet Table à partir du contenu d'une table Aster.
        On peut limiter aux paramètres listés dans 'para'.
        """
        def Nonefy(l1, l2):
            if l2 == 0:
                return None
            else:
                return l1

        if not self.accessible():
            raise AsException("Erreur dans table.EXTR_TABLE en PAR_LOT='OUI'")
        from Utilitai.Table import Table
        # titre
        titr = self.TITRE()
        # récupération des paramètres
        #v_tblp = aster.getvectjev('%-19s.TBLP' % self.get_name())
        v_tblp = self.sdj.TBLP.get()
        if v_tblp == None:
            # retourne une table vide
            return Table(titr=titr, nom=self.nom)
        tabnom = list(v_tblp)
        nparam = len(tabnom) / 4
        lparam = [tabnom[4 * i:4 * i + 4] for i in range(nparam)]
        # restriction aux paramètres demandés
        if para is not None:
            if type(para) not in (list, tuple):
                para = [
                    para,
                ]
            para = [p.strip() for p in para]
            restr = []
            for ip in lparam:
                if ip[0].strip() in para:
                    restr.append(ip)
            lparam = restr
        dval = {}
        # liste des paramètres et des types
        lpar = []
        ltyp = []
        for i in lparam:
            value = list(aster.getvectjev(i[2]))
            exist = aster.getvectjev(i[3])
            dval[i[0].strip()] = map(Nonefy, value, exist)
            lpar.append(i[0].strip())
            ltyp.append(i[1].strip())
        n = len(dval[lpar[0]])
        # contenu : liste de dict
        lisdic = []
        for i in range(n):
            d = {}
            for p in lpar:
                d[p] = dval[p][i]
            lisdic.append(d)
        return Table(lisdic, lpar, ltyp, titr, self.nom)
Пример #3
0
    def EXTR_TABLE(self, para=None):
        """Produit un objet TablePy à partir du contenu d'une table Aster.
        On peut limiter aux paramètres listés dans 'para'.
        """
        def Nonefy(l1, l2):
            if l2 == 0:
                return None
            else:
                return l1

        # titre
        titr = self.TITRE()
        # récupération des paramètres
        #v_tblp = aster.getvectjev('%-19s.TBLP' % self.getName())
        v_tblp = self.sdj.TBLP.get()
        if v_tblp == None:
            # retourne une table vide
            return TablePy(titr=titr, nom=self.getName())
        tabnom = list(v_tblp)
        nparam = len(tabnom) // 4
        lparam = [tabnom[4 * i:4 * i + 4] for i in range(nparam)]
        # restriction aux paramètres demandés
        if para is not None:
            if not isinstance(para, (list, tuple)):
                para = [
                    para,
                ]
            para = [p.strip() for p in para]
            restr = []
            for ip in lparam:
                if ip[0].strip() in para:
                    restr.append(ip)
            lparam = restr
        dval = {}
        # liste des paramètres et des types
        lpar = []
        ltyp = []
        for i in lparam:
            value = list(aster.getvectjev(i[2]))
            if i[1].strip().startswith("K"):
                value = [j.strip() for j in value]
            exist = aster.getvectjev(i[3])
            dval[i[0].strip()] = list(map(Nonefy, value, exist))
            lpar.append(i[0].strip())
            ltyp.append(i[1].strip())
        n = len(dval[lpar[0]])
        # contenu : liste de dict
        lisdic = []
        for i in range(n):
            d = {}
            for p in lpar:
                d[p] = dval[p][i]
            lisdic.append(d)
        return TablePy(lisdic, lpar, ltyp, titr, self.getName())
Пример #4
0
 def get_maillage(self):
     for ind_cham in range(3):
         # on ne s'interesse qu'aux champ 'DEPL','VITE' et 'ACCE' pour
         # gagner du temps
         if self.obj.sdj.TACH.get():
             tach = self.obj.sdj.TACH.get()[ind_cham + 1][0]
             if tach.strip():
                 refe = self.nom.ljust(
                     8) + ".%03i.000001.REFE" % (ind_cham + 1)
                 if aster.getvectjev(refe):
                     self.maya_name = aster.getvectjev(refe)[0].strip()
                 self.maya = self.objects.maillages[self.maya_name]
Пример #5
0
def dist_min_deux_points(mail):
    nno = aster.getvectjev(mail.getName().ljust(8) + '.DIME')[0]
    l_coor1 = []
    l_coor2 = []
    for i in range(nno - 1):
        l_coor1 = aster.getvectjev(
            mail.getName().ljust(8) + '.COORDO    .VALE', 3 * (i), 3)
        l_coor2 = aster.getvectjev(
            mail.getName().ljust(8) + '.COORDO    .VALE', 3 * (i + 1), 3)
        d = sqrt((l_coor1[0] - l_coor2[0])**2 + (l_coor1[1] - l_coor2[1])**2 +
                 (l_coor1[2] - l_coor2[2])**2)
        if i == 0:
            dist = d
        else:
            dist = min(d, dist)
    return dist
Пример #6
0
    def get_nume(self):
        """ Recherche d'un nume_ddl. Le pb est qu'il n'est pas necessaire
            d'avoir un nume_ddl pour faire un dyna_harmo. On cherche donc
            le maillage associe au resultat et on regarde quel nume
            possede ce meme maillage"""

        self.get_maillage()
        for nume in list(self.objects.nume_ddl.keys()):
            refe = nume.ljust(14) + '.NUME.REFN'
            if aster.getvectjev(refe):
                nom_maya = aster.getvectjev(
                    refe)[0].strip()  # maillage associe au nume_ddl
                if nom_maya == self.maya_name:
                    self.nume_ddl_name = nume
                    self.nume_ddl = self.objects.nume_ddl[nume]
        return self.nume_ddl
Пример #7
0
 def Parametres(self):
     """
     Retourne un dictionnaire contenant les parametres de la nappe,
     le type jeveux (NAPPE) n'est pas retourne,
     le dictionnaire peut ainsi etre fourni a CALC_FONC_INTERP tel quel,
     et une liste de dictionnaire des parametres de chaque fonction.
     """
     from Utilitai.Utmess import UTMESS
     if not self.accessible():
         raise AsException(
             "Erreur dans nappe.Parametres en PAR_LOT='OUI'")
     TypeProl = {'E': 'EXCLU', 'L': 'LINEAIRE', 'C': 'CONSTANT'}
     objev = '%-19s.PROL' % self.get_name()
     prol = aster.getvectjev(objev)
     if prol == None:
         UTMESS('F', 'SDVERI_2', valk=[objev])
     dico = {
         'INTERPOL': [prol[1][0:3], prol[1][4:7]],
        'NOM_PARA': prol[2][0:16].strip(),
        'NOM_RESU': prol[3][0:16].strip(),
        'PROL_DROITE': TypeProl[prol[4][1]],
        'PROL_GAUCHE': TypeProl[prol[4][0]],
        'NOM_PARA_FONC': prol[6][0:4].strip(),
     }
     lparf = []
     nbf = (len(prol) - 7) / 2
     for i in range(nbf):
         dicf = {
             'INTERPOL_FONC': [prol[7 + i * 2][0:3], prol[7 + i * 2][4:7]],
            'PROL_DROITE_FONC': TypeProl[prol[8 + i * 2][1]],
            'PROL_GAUCHE_FONC': TypeProl[prol[8 + i * 2][0]],
         }
         lparf.append(dicf)
     return [dico, lparf]
Пример #8
0
 def LIST_SOUS_STRUCT(self):
     """ retourne la liste des sous structures du modele generalise
         la liste des macro-elements sous-jacents"""
     nommodgen = self.getName()
     ncham = nommodgen + (8 - len(nommodgen)) * ' '
     ssno = aster.getvectjev(ncham + (14 - len(ncham)) * ' ' + '.MODG.SSNO')
     ssme = aster.getcolljev(ncham + (14 - len(ncham)) * ' ' + '.MODG.SSME')
     return [([ssno[ind], ssme[ind + 1]]) for ind in range(len(ssno))]
Пример #9
0
def ecri_rela_cine_old(cabl_precont, MAILLAGE):
    """
    Ecriture des relations cinematiques contenues dans le concept cabl_precont
    """
    from Calc_epx.calc_epx_cata import cata_compo

    l_cara = []
    dic_ddl_impo = cata_compo['DEPL']

    nomnoe = aster.getvectjev(MAILLAGE.nom.ljust(8) + ".NOMNOE")
    dic_nomnoe = {}
    for i, noeu in enumerate(nomnoe):
        dic_nomnoe[noeu] = i + 1

    nom_cabl_pr = cabl_precont.nom.ljust(8)
    nb_rela = aster.getvectjev(nom_cabl_pr + '.LIRELA    .RLNR')[0]

    typ_coef = aster.getvectjev(nom_cabl_pr + '.LIRELA    .RLTC')[0]
    if typ_coef[:4] != 'REEL':
        raise Exception("Coefficients non reels")

    vec_sm = aster.getvectjev(nom_cabl_pr + '.LIRELA    .RLBE')
    vec_nb_coef = aster.getvectjev(nom_cabl_pr + '.LIRELA    .RLNT')
    pointeur = aster.getvectjev(nom_cabl_pr + '.LIRELA    .RLPO')
    vec_coef = aster.getvectjev(nom_cabl_pr + '.LIRELA    .RLCO')
    vec_nomnoe = aster.getvectjev(nom_cabl_pr + '.LIRELA    .RLNO')
    vec_nomddl = aster.getvectjev(nom_cabl_pr + '.LIRELA    .RLDD')

    for i_rela in range(nb_rela):
         #le second membre doit etre nul
        if vec_sm[i_rela] != 0.E0:
            raise Exception("Second memnbre non nul")
         #nb de coefficient de la relation
        nb_coef = vec_nb_coef[i_rela]
        nb_coef_temp = nb_coef
         #position du dernier terme de la realtion
        adr = pointeur[i_rela]
        for i_coef in range(nb_coef):
            if vec_coef[adr - nb_coef + i_coef] == 0.E0:
                nb_coef_temp -= 1
        l_cara.append('1 %s' % nb_coef_temp)
        for i_coef in range(nb_coef):
            coeff = vec_coef[adr - nb_coef + i_coef]
            if coeff != 0.E0:
                nomnoe_coef = vec_nomnoe[adr - nb_coef + i_coef]
                nomddl_coef = vec_nomddl[adr - nb_coef + i_coef]
                l_cara.append(' ' * 4 + str(coeff) + ' '
                              + str(dic_ddl_impo[nomddl_coef.rstrip()])
                              + ' ' + str(dic_nomnoe[nomnoe_coef]) + ' 0')
    return nb_rela, l_cara
Пример #10
0
 def get_nume(self):
     """Recuperation de la numerotation et du nume_ddl"""
     indi = aster.getvectjev(self.nom.ljust(19) + '.INDI')
     if indi:
         iret, ibid, toto = aster.dismoi('NUME_DDL', self.nom, 'RESU_DYNA',
                                         'C')
         self.nume_name = toto.strip()
         if self.nume_name:
             self.nume = self.objects.nume_ddl[self.nume_name]
Пример #11
0
 def maillages(self):
     maillages = []
     for carte in CaraElem.CARTES:
         ncham = self.nom.ljust(8) + "." + carte.ljust(10) + ".NOMA"
         maill = aster.getvectjev(ncham.ljust(32))
         if maill:
             for m in maill:
                 if m not in maillages:
                     maillages.append(m)
     return maillages
Пример #12
0
 def get(self):
     nomj = self.nomj()
     if aster.jeveux_exists(nomj):
         obj_simple = aster.jeveux_getattr(nomj, 'XOUS')[1].strip() == 'S'
         if obj_simple:
             return aster.getvectjev(nomj)
         else:
             return aster.getcolljev(nomj)
     else:
         return None
Пример #13
0
    def EXTR_COMP(self, comp, lgma=[], topo=0):
        """Retourne les valeurs de la composante comp du champ sur la liste
        de groupes de mailles lgma avec eventuellement l'info de la
        topologie si topo>0. Si lgma est une liste vide, c'est equivalent
        a un TOUT='OUI' dans les commandes aster

        Arguments:
            comp (str): Name of the component.
            lgma (list[str]): List of groups of elements.
            topo (int): ``topo == 1`` means to return informations about the
                support of the field.

        Returns:
            :py:class:`.post_comp_cham_el`: Object containing the values and,
            eventually, the topological informations of the support.
        """

        ncham = self.getName()
        ncham = ncham + (19 - len(ncham)) * ' '
        nchams = aster.get_nom_concept_unique('_')
        ncmp = comp + (8 - len(comp)) * ' '

        aster.prepcompcham(ncham, nchams, ncmp, "EL      ", topo, lgma)

        valeurs = numpy.array(
            aster.getvectjev(nchams + (19 - len(nchams)) * ' ' + '.V'))

        if (topo > 0):
            maille = (aster.getvectjev(nchams + (19 - len(nchams)) * ' ' +
                                       '.M'))
            point = (aster.getvectjev(nchams + (19 - len(nchams)) * ' ' +
                                      '.P'))
            sous_point = (aster.getvectjev(nchams + (19 - len(nchams)) * ' ' +
                                           '.SP'))
        else:
            maille = None
            point = None
            sous_point = None

        aster.prepcompcham("__DETR__", nchams, ncmp, "EL      ", topo, lgma)

        return post_comp_cham_el(valeurs, maille, point, sous_point)
Пример #14
0
    def EXTR_COMP(self, comp=' ', lgno=[], topo=0):
        """ retourne les valeurs de la composante comp du champ sur la liste
        de groupes de noeuds lgno avec eventuellement l'info de la
        topologie si topo>0. Si lgno est une liste vide, c'est equivalent
        a un TOUT='OUI' dans les commandes aster

        Arguments:
            comp (str): Name of the component.
            lgno (list[str]): List of groups of nodes.
            topo (int): ``topo == 1`` means to return informations about the
                support of the field.

        Returns:
            :py:class:`.post_comp_cham_no`: Object containing the values and,
            eventually, the topological informations of the support.
        """

        ncham = self.getName()
        ncham = ncham + (19 - len(ncham)) * ' '
        nchams = aster.get_nom_concept_unique('_')
        ncmp = comp + (8 - len(comp)) * ' '

        aster.prepcompcham(ncham, nchams, ncmp, "NO      ", topo, lgno)

        valeurs = numpy.array(
            aster.getvectjev(nchams + (19 - len(nchams)) * ' ' + '.V'))

        if (topo > 0):
            noeud = (
                aster.getvectjev(nchams + (19 - len(nchams)) * ' ' + '.N'))
        else:
            noeud = None

        if comp[:1] == ' ':
            comp = (aster.getvectjev(nchams + (19 - len(nchams)) * ' ' + '.C'))
            aster.prepcompcham(
                "__DETR__", nchams, ncmp, "NO      ", topo, lgno)
            return post_comp_cham_no(valeurs, noeud, comp)
        else:
            aster.prepcompcham(
                "__DETR__", nchams, ncmp, "NO      ", topo, lgno)
            return post_comp_cham_no(valeurs, noeud)
Пример #15
0
 def LIST_SOUS_STRUCT(self):
     """ retourne la liste des sous structures du modele generalise
      la liste des macro-elements sous-jacents"""
     if not self.accessible():
         raise AsException(
             "Erreur dans modele_gene.LIST_SOUS_STRUCT en PAR_LOT='OUI'")
     nommodgen = self.get_name()
     ncham = nommodgen + (8 - len(nommodgen)) * ' '
     ssno = aster.getvectjev(ncham + (14 - len(ncham)) * ' ' + '.MODG.SSNO')
     ssme = aster.getcolljev(ncham + (14 - len(ncham)) * ' ' + '.MODG.SSME')
     return [([ssno[ind], ssme[ind + 1]]) for ind in range(len(ssno))]
Пример #16
0
 def __getitem__(self, key):
     """Retourne la valeur d'une cellule de la table.
     Exemple : TAB['INST', 1] retourne la 1ère valeur de la colonne 'INST'."""
     try:
         para, numlign = key
     except (TypeError, ValueError):
         raise RuntimeError("Table.__getitem__ takes exactly 2 arguments.")
     tabnom = self.sdj.TBLP.get()
     try:
         i = tabnom.index('%-24s' % para)
         resu = aster.getvectjev(tabnom[i + 2])
         exist = aster.getvectjev(tabnom[i + 3])
         assert resu is not None
         assert exist is not None
         assert exist[numlign - 1] != 0
         res = resu[numlign - 1]
     except (ValueError, IndexError, AssertionError):
         # pour __getitem__, il est plus logique de retourner KeyError.
         raise KeyError
     return res
Пример #17
0
 def Aster(self, suffixe='MATA'):
     """lit la matrice depuis l'espace Aster.
     nom : suffixe de l'objet jeveux
     """
     import aster
     nom_obj_jeveux = string.ljust('PYTHON.TANGENT.' + suffixe, 24)
     obj_jeveux = aster.getvectjev(nom_obj_jeveux)
     if not obj_jeveux:
         raise RuntimeError('TANGENT : OBJET JEVEUX DE SUFFIXE ' + suffixe +
                            ' INEXISTANT')
     self.Matrice(obj_jeveux)
Пример #18
0
def sdu_verif_nom_gd(nomgd):
    """vérifie que nomgd est bien un nom de grandeur"""
    nomgd2 = nomgd.strip()
    ptn = aster.getvectjev('&CATA.GD.NOMGD')
    ok = False
    for x in ptn:
        if x.strip() == nomgd2:
            ok = True
            break
    if not ok:
        checker.err(ojb, "condition non respectée : " +
                    nomgd + " n'est pas un nom de grandeur.")
Пример #19
0
 def __getitem__(self, key):
     """Retourne la valeur d'une cellule de la table.
     Exemple : TAB['INST', 1] retourne la 1ère valeur de la colonne 'INST'."""
     from Utilitai.Utmess import UTMESS
     if not self.accessible():
         raise AsException("Erreur dans table.__getitem__ en PAR_LOT='OUI'")
     assert len(key) == 2
     para, numlign = key
     tabnom = self.sdj.TBLP.get()
     try:
         i = tabnom.index('%-24s' % para)
         resu = aster.getvectjev(tabnom[i + 2])
         exist = aster.getvectjev(tabnom[i + 3])
         assert resu is not None
         assert exist is not None
         assert exist[numlign - 1] != 0
         res = resu[numlign - 1]
     except (IndexError, AssertionError):
         # pour __getitem__, il est plus logique de retourner KeyError.
         raise KeyError
     return res
Пример #20
0
def Valeurs(surface):
    # TODO : dirty workarround for this macro, until Surface.getValues()
    # implementaiton in c++
    nsd = '%-19s' % surface.getName()
    dicv = aster.getcolljev(nsd + '.VALE')
    lpar = aster.getvectjev(nsd + '.PARA')
    lval = []
    for k in range(len(dicv)):
        lbl = dicv[k + 1]
        dim = len(lbl) // 2
        lval.append([lbl[0:dim], lbl[dim:2 * dim]])
    return [list(lpar), lval]
Пример #21
0
    def extr_nume_ordr(self):
        """! Extraction des numeros d'ordre de l'inter-spectre"""
        coupl_ddl = []

        # Cas ou l'inter-spectre est defini par ses noeuds et composantes
        noeudi = aster.getvectjev(self.obj.nom.ljust(8) + '.NOEI')
        noeudj = aster.getvectjev(self.obj.nom.ljust(8) + '.NOEJ')
        cmpi = aster.getvectjev(self.obj.nom.ljust(8) + '.CMPI')
        cmpj = aster.getvectjev(self.obj.nom.ljust(8) + '.CMPJ')

        # l'inter-spectre n'est defini qu'avec des numeros d'ordre independants
        # du modele
        numi = aster.getvectjev(self.obj.nom.ljust(8) + '.NUMI')
        numj = aster.getvectjev(self.obj.nom.ljust(8) + '.NUMJ')

        if noeudi:
            self.isnume = 1
            for ind in range(len(noeudi)):
                coupl_ddl.append(
                    (noeudi[ind].split()[0] + '_' + cmpi[ind].split()[0],
                     noeudj[ind].split()[0] + '_' + cmpj[ind].split()[0]))
        elif numi:
            self.isnume = 0
            for ind in range(len(numi)):
                coupl_ddl.append((numi[ind], numj[ind]))

        return coupl_ddl
Пример #22
0
    def EXTR_COMP(self, comp=' ', lgno=[], topo=0):
        """ retourne les valeurs de la composante comp du champ sur la liste
        de groupes de noeuds lgno avec eventuellement l'info de la
        topologie si topo>0. Si lgno est une liste vide, c'est equivalent
        a un TOUT='OUI' dans les commandes aster
        Attributs retourne
          - self.valeurs : numpy.array contenant les valeurs
        Si on a demande la topo (i.e. self.topo = 1) :
          - self.noeud  : numero de noeud
        Si on demande toutes les composantes (comp = ' ') :
          - self.comp : les composantes associees a chaque grandeur pour chaque noeud
      """
        import numpy
        if not self.accessible():
            raise AsException("Erreur dans cham_no.EXTR_COMP en PAR_LOT='OUI'")

        ncham = self.get_name()
        ncham = ncham + (8 - len(ncham)) * ' '
        nchams = ncham[0:7] + 'S'
        ncmp = comp + (8 - len(comp)) * ' '

        aster.prepcompcham(ncham, nchams, ncmp, "NO      ", topo, lgno)

        valeurs = numpy.array(
            aster.getvectjev(nchams + (19 - len(ncham)) * ' ' + '.V'))

        if (topo > 0):
            noeud = (aster.getvectjev(nchams + (19 - len(ncham)) * ' ' + '.N'))
        else:
            noeud = None

        if comp[:1] == ' ':
            comp = (aster.getvectjev(nchams + (19 - len(ncham)) * ' ' + '.C'))
            aster.prepcompcham("__DETR__", nchams, ncmp, "NO      ", topo,
                               lgno)
            return post_comp_cham_no(valeurs, noeud, comp)
        else:
            aster.prepcompcham("__DETR__", nchams, ncmp, "NO      ", topo,
                               lgno)
            return post_comp_cham_no(valeurs, noeud)
Пример #23
0
    def EXTR_COMP(self, comp, lgma, topo=0):
        """ retourne les valeurs de la composante comp du champ sur la liste
        de groupes de mailles lgma avec eventuellement l'info de la
        topologie si topo>0. Si lgma est une liste vide, c'est equivalent
        a un TOUT='OUI' dans les commandes aster
        Attributs retourne
          - self.valeurs : numpy.array contenant les valeurs
        Si on a demande la topo  :
          - self.maille  : numero de mailles
          - self.point   : numero du point dans la maille
          - self.sous_point : numero du sous point dans la maille """
        import numpy
        if not self.accessible():
            raise AsException(
                "Erreur dans cham_elem.EXTR_COMP en PAR_LOT='OUI'")

        ncham = self.get_name()
        ncham = ncham + (8 - len(ncham)) * ' '
        nchams = ncham[0:7] + 'S'
        ncmp = comp + (8 - len(comp)) * ' '

        aster.prepcompcham(ncham, nchams, ncmp, "EL      ", topo, lgma)

        valeurs = numpy.array(
            aster.getvectjev(nchams + (19 - len(ncham)) * ' ' + '.V'))

        if (topo > 0):
            maille = (aster.getvectjev(nchams + (19 - len(ncham)) * ' ' +
                                       '.M'))
            point = (aster.getvectjev(nchams + (19 - len(ncham)) * ' ' + '.P'))
            sous_point = (aster.getvectjev(nchams + (19 - len(ncham)) * ' ' +
                                           '.SP'))
        else:
            maille = None
            point = None
            sous_point = None

        aster.prepcompcham("__DETR__", nchams, ncmp, "EL      ", topo, lgma)

        return post_comp_cham_el(valeurs, maille, point, sous_point)
Пример #24
0
def recup_modele_partition(MATR_RIGI, dbg):

    nommod = None
    old_prtk1 = None
    # Recuperation de la sd_modele a partir de la matrice de rigidite
    # sur le schema des routines DISMOI/DISMMO/DISMMS/DISMNU/DISMPN/DISMLG
    matr_refa = MATR_RIGI.sdj.REFA.get()
    nume_lili = matr_refa[1][0:14] + '.NUME.LILI'
    vlili = aster.getvectjev(nume_lili[0:24])
    buff_ligrel = vlili[1]
    if (buff_ligrel == 'LIAISONS'):
        UTMESS('F', 'MODAL_18')
    vlgrf = buff_ligrel[0:19] + '.LGRF'
    buff_modele = aster.getvectjev(vlgrf[0:24])
    nommod = buff_modele[1]

    if (dbg):
        aster.affiche('MESSAGE', "Nom du modele retenu: " + str(nommod))

    # Si parallele non centralise recuperation de lasd_partition et de son
    # option de partitionnement: old_prtk1
    sd_partitb = None
    nompart = None
    vprtk = None
    vpartit = nommod[0:8] + '.PARTIT'
    sd_partitb = aster.getvectjev(vpartit)
    if (sd_partitb != None):
        nompart = sd_partitb[0]
        if (nompart != None):
            vprtk = aster.getvectjev(nompart[0:8] + '.PRTK')
            if (vprtk != None):
                old_prtk_buff = vprtk[0]
                old_prtk1 = old_prtk_buff.strip()
    if (dbg):
        aster.affiche(
            'MESSAGE', "Nom de la partition retenue: " + str(nompart))
        aster.affiche(
            'MESSAGE', "Ancienne option de distribution: " + str(old_prtk1))

    return nommod, old_prtk1
Пример #25
0
 def get_maillage(self):
     """Recherche du maillage associe au resultat"""
     if not self.nume_name:
         self.get_nume()
     if self.nume_name:  # methode 1
         maillage = aster.getvectjev(self.nume_name[0:8].ljust(14) +
                                     ".NUME.REFN")
         self.maya_name = maillage[0].strip()
         self.maya = self.objects.maillages[self.maya_name]
     else:  # methode 2
         resu = self.nom
         liste_ordre = aster.getvectjev(resu.ljust(19) + '.ORDR')
         if not liste_ordre:
             return
         for j in liste_ordre:
             if j == 0:
                 continue
             ordr = "%s.001.%06d" % (resu.ljust(8), j)
             info = aster.getvectjev(ordr.ljust(19) + ".REFE")
             if info is not None:
                 if info[1].strip():
                     self.maya_name = info[0].strip()
                     self.maya = self.objects.maillages[self.maya_name]
Пример #26
0
 def get_nume(self):
     """Recherche des nume_ddl qui dependent de ce modele
        NB : attention, si plusieurs nume_ddl en dependent, seul le premier
        deviendra self.nume_ddl. C'est utile pour les modeles experimentaux
        pour lesquels le ddl est pipo.
     """
     if self.nume_ddl is None:
         for nume_name, nume in list(self.objects.nume_ddl.items()):
             model = aster.getvectjev(nume_name.ljust(14) + ".NUME.LILI")
             if not model:
                 pass
             elif model[1][:8] == self.nom:
                 self.nume_ddl = nume
                 self.nume_ddl_name = nume_name
                 return
Пример #27
0
 def LIST_GROUP_MA(self) :
    """ retourne la liste des groupes de mailles sous la forme :
      [ (gma1, nb mailles gma1, dime max des mailles gma1), ...] """
    if not self.accessible():
       raise AsException("Erreur dans maillage.LIST_GROUP_MA en PAR_LOT='OUI'")
    ltyma = aster.getvectjev("&CATA.TM.NOMTM")
    catama = aster.getcolljev("&CATA.TM.TMDIM")
    dic_gpma = self.sdj.GROUPEMA.get()
    if dic_gpma is None:
        return []
    dimama = [catama[ltyma[ma-1].ljust(24)][0] for ma in self.sdj.TYPMAIL.get()]
    ngpma = []
    for grp in dic_gpma.keys():
       dim = max([dimama[ma-1] for ma in dic_gpma[grp]])
       ngpma.append((grp.strip(), len(dic_gpma[grp]),dim))
    return ngpma
Пример #28
0
def extr_matr_elim_lagr(self, matr_asse):
    import aster
    import numpy as NP

    matr_lagr=matr_asse.EXTR_MATR()  # function EXTR_MATR available in the official source code
    #-----------------------------------------------------#
    #--                                                 --#
    #-- Elimination des degres de libertes de Lagranges --#
    #--                                                 --#
    #--        c.f. doc R4.06.02   - section 2.5        --#
    #--        + commentaires dans sdll123a.comm        --#
    #--                                                 --#
    #-----------------------------------------------------#
    
    iret,ibid,nom_nume = aster.dismoi('NOM_NUME_DDL',matr_asse.nom,'MATR_ASSE','F')
    Nume=aster.getvectjev(nom_nume.ljust(8)+'      .NUME.DELG        ' )
    ind_lag1=[]
    ind_nolag=[]
    
    for i1 in range(len(Nume)) :
        if Nume[i1] > -0.5 :
            ind_nolag.append(i1)
        if (Nume[i1] < -0.5) & (Nume[i1] > -1.5):
            ind_lag1.append(i1)
        
    nlag1=len(ind_lag1)
    nnolag=len(ind_nolag)
    
    Z=NP.zeros((nnolag-nlag1,nnolag))
    C=NP.vstack((matr_lagr[ind_lag1][:,ind_nolag],Z))
    Q,R = NP.linalg.qr(NP.transpose(C))
    
    dR=[]
    for i1 in range(len(R)) :
        dR.append(NP.abs(R[i1,i1]))
      
    mdR=NP.max(dR)
    indz=[]
    for i1 in range(len(R)) :
        if NP.abs(R[i1,i1]) <= mdR*1.e-16 :
            indz.append(i1)
        
    matr_sans_lagr=NP.dot(NP.transpose(Q[:][:,indz]),NP.dot(matr_lagr[ind_nolag][:,ind_nolag],Q[:][:,indz]))
    
    #-- Fin elimination

    return matr_sans_lagr
Пример #29
0
 def LIST_GROUP_MA(self):
     """ retourne la liste des groupes de mailles sous la forme :
         [ (gma1, nb mailles gma1, dime max des mailles gma1), ...] """
     ltyma = aster.getvectjev("&CATA.TM.NOMTM")
     catama = aster.getcolljev("&CATA.TM.TMDIM")
     dic_gpma = self.sdj.GROUPEMA.get()
     if dic_gpma is None:
         return []
     dimama = [
         catama[ltyma[ma - 1].ljust(24)][0]
         for ma in self.sdj.TYPMAIL.get()
     ]
     ngpma = []
     for grp in list(dic_gpma.keys()):
         dim = max([dimama[ma - 1] for ma in dic_gpma[grp]])
         ngpma.append((grp.strip(), len(dic_gpma[grp]), dim))
     return ngpma
Пример #30
0
 def get_matrices(self):
     """ recuperation des matrices du REFD et du nume_ddl"""
     indi = aster.getvectjev(self.nom.ljust(19) + '.INDI')
     if indi:
         iret, ibid, self.kass_name = aster.dismoi('REF_RIGI_PREM',
                                                   self.nom, 'RESU_DYNA',
                                                   'C')
         iret, ibid, self.mass_name = aster.dismoi('REF_MASS_PREM',
                                                   self.nom, 'RESU_DYNA',
                                                   'C')
         iret, ibid, self.cass_name = aster.dismoi('REF_AMOR_PREM',
                                                   self.nom, 'RESU_DYNA',
                                                   'C')
         try:
             self.kass = self.objects.matrices[self.kass_name]
             self.mass = self.objects.matrices[self.mass_name]
             self.cass = self.objects.matrices[self.cass_name]
         except KeyError:
             pass