Esempio n. 1
0
    def check_champ_1(self, checker):
        # est-ce  un sd_cham_no, un sd_cham_elem, ... ?
        nom = self.nomj()[:19]
        nom1 = nom + '.CELD'
        iexi = aster.jeveux_exists(nom1)
        if iexi:
            nom2 = nom + '.CELD'
        else:
            nom2 = nom + '.DESC'
            iexi2 = aster.jeveux_exists(nom2)
            if not iexi2:
                if not self.optional and not checker.optional:
                    checker.err(self, "n'existe pas (%r)" % self._parent)
                return

        docu = aster.jeveux_getattr(nom2, 'DOCU')[1].strip()
        if docu == 'CHNO':
            sd2 = sd_cham_no(nom)
        elif docu == 'CART':
            sd2 = sd_carte(nom)
        elif docu == 'CHML':
            sd2 = sd_cham_elem(nom)
        elif docu == 'RESL':
            sd2 = sd_resuelem(nom)
        elif docu == 'VGEN':
            sd2 = sd_cham_gene(nom)
        else:
            assert 0, docu
        sd2.check(checker)
Esempio n. 2
0
class sd_modele_xfem(AsBase):
    nomj = SDNom(fin=8)

#   nom du modele sain
    MODELE_SAIN = AsVK8(lonmax=1,)

# II.1) objets relatifs aux sous-elements

    TOPOSE_PIN = sd_cham_elem(SDNom(nomj='.TOPOSE.PIN'))
    TOPOSE_CNS = sd_cham_elem(SDNom(nomj='.TOPOSE.CNS'))
    TOPOSE_HEA = sd_cham_elem(SDNom(nomj='.TOPOSE.HEA'))
    TOPOSE_LON = sd_cham_elem(SDNom(nomj='.TOPOSE.LON'))
    TOPOSE_AIN = sd_cham_elem(SDNom(nomj='.TOPOSE.PAI'))
    TOPOSE_PMI = sd_cham_elem(SDNom(nomj='.TOPOSE.PMI'))
    TOPOSE_PJO = Facultatif(sd_cham_elem(SDNom(nomj='.TOPOSE.PJO')))
    TOPOSE_CRI = Facultatif(sd_cham_elem(SDNom(nomj='.TOPOSE.CRI')))

# II.2) objets relatifs aux facettes de contact
    TOPOFAC_PI = sd_cham_elem(SDNom(nomj='.TOPOFAC.PI'))
    TOPOFAC_AI = sd_cham_elem(SDNom(nomj='.TOPOFAC.AI'))
    TOPOFAC_CF = sd_cham_elem(SDNom(nomj='.TOPOFAC.CF'))
    TOPOFAC_LO = sd_cham_elem(SDNom(nomj='.TOPOFAC.LO'))
    TOPOFAC_BA = sd_cham_elem(SDNom(nomj='.TOPOFAC.BA'))
    TOPOFAC_HE = Facultatif(sd_cham_elem(SDNom(nomj='.TOPOFAC.HE')))
    TOPOFAC_OE = sd_cham_elem(SDNom(nomj='.TOPOFAC.OE'))

# II.3) objets relatifs a l'enrichissement heaviside

    TOPONO_HNO  = sd_cham_elem(SDNom(nomj='.TOPONO.HNO'))
    TOPONO_HSE  = sd_cham_elem(SDNom(nomj='.TOPONO.HSE'))
    TOPONO_HFA  = sd_cham_elem(SDNom(nomj='.TOPONO.HFA'))

# II.4) objets concatenes relatifs aux level sets

    LNNO = sd_cham_elem(SDNom(nomj='.LNNO'))
    LTNO = sd_cham_elem(SDNom(nomj='.LTNO'))
    BASLOC = sd_cham_elem(SDNom(nomj='.BASLOC'))
    STNO = sd_cham_elem(SDNom(nomj='.STNO'))
    FISSNO = sd_cham_elem(SDNom(nomj='.FISSNO'))
    FISSCO = sd_cham_elem(SDNom(nomj='.FISSCO'))
    HEAVNO = sd_cham_elem(SDNom(nomj='.HEAVNO'))
    NOXFEM = sd_cham_no()

# II.5) autres objets

    XFEM_CONT = AsVI(lonmax=1)  # contact ou pas
    FISS = AsVK8()             # noms des fissures
    NFIS = AsVI(lonmax=1,)     # nombre de fissures
    XMAFIS = sd_cham_elem(SDNom(nomj='.XMAFIS'))
                          # pour chaque maille : nom de(s) fissure(s)
    PRE_COND = AsVK8(lonmax=1)  # preconditionnement ou pas

    # si le modele a ete cree par MODI_MODELE_XFEM / MODELE_THER
    MODELE_THER = Facultatif( AsVK8(lonmax=1,) )
Esempio n. 3
0
 def check_matr_elem_i_RELR(self, checker):
     if not self.RELR.exists:
         return
     lnom = self.RELR.get_stripped()
     for nom in lnom:
         if nom != '':
             # le nom est celui d'un resuelem ou parfois d'un cham_no
             # (VECT_ASSE):
             sd2 = sd_resuelem(nom)
             if sd2.RESL.exists:
                 sd2.check(checker)
             else:
                 sd2 = sd_cham_no(nom)
                 sd2.check(checker)
Esempio n. 4
0
class sd_fond_fiss(AsBase):
    nomj = SDNom(fin=8)
    LEVREINF_MAIL = Facultatif(AsVK8(SDNom(nomj='.LEVREINF.MAIL'), ))
    NORMALE = Facultatif(AsVR(lonmax=3, ))
    BASEFOND = Facultatif(AsVR())
    FOND_TYPE = AsVK8(
        SDNom(nomj='.FOND.TYPE'),
        lonmax=1,
    )
    FOND_NOEU = Facultatif(AsVK8(SDNom(nomj='.FOND.NOEU'), ))
    FONDSUP_NOEU = Facultatif(AsVK8(SDNom(nomj='.FOND_SUP.NOEU'), ))
    FONDINF_NOEU = Facultatif(AsVK8(SDNom(nomj='.FOND_INF.NOEU'), ))
    DTAN_EXTREMITE = Facultatif(AsVR(lonmax=3, ))
    INFNORM_NOEU = Facultatif(AsVK8(SDNom(nomj='.INFNORM.NOEU'), ))
    DTAN_ORIGINE = Facultatif(AsVR(lonmax=3, ))
    SUPNORM_NOEU = Facultatif(AsVK8(SDNom(nomj='.SUPNORM.NOEU'), ))
    LEVRESUP_MAIL = Facultatif(AsVK8(SDNom(nomj='.LEVRESUP.MAIL'), ))
    INFO = AsVK8(
        SDNom(nomj='.INFO'),
        lonmax=3,
    )
    FOND_TAILLE_R = Facultatif(AsVR(SDNom(nomj='.FOND.TAILLE_R'), ))
    FONDFISS = AsVR()
    LNNO = Facultatif(sd_cham_no())
    LTNO = Facultatif(sd_cham_no())
    BASLOC = Facultatif(sd_cham_no())
    FONDFISG = Facultatif(AsVR())

    def check_BASEFOND(self, checker):
        info = self.INFO.get_stripped()
        config = info[1]
        basefond = self.BASEFOND.get()
        if config == 'DECOLLEE':
            assert basefond is None, config
        else:
            pass
Esempio n. 5
0
    def check_veri1(self, checker):
        remf = self.REMF.get()
        desc = self.DESC.get_stripped()

        # calcul de itypfl (type d'interaction fluide / structure) :
        typfl = sd_type_flui_stru(remf[0])
        itypfl = typfl.FSIC.get()[0]  # 1 -> FAISCEAU_TRANS
                                    # 3 -> FAISCEAU_AXIAL
        couplage = typfl.FSIC.get()[1]  # 1 -> prise en compte du couplage
        assert itypfl > 0, remf

        # calcul de nbmode (nombre de modes) :
        nbmode = self.NUMO.lonmax
        assert nbmode > 0

        # calcul de nbvite (nombre de vitesses) :
        nbvite = self.VITE.lonmax
        assert nbvite > 0

        # vérification de l'objet .DESC :
        #--------------------------------
        assert len(desc) == 1, desc
        assert desc[0] == 'DEPL', desc

        # vérification de l'objet .NUMO :
        #--------------------------------
        for x in self.NUMO.get():
            assert x >= 1, numo

        # vérification de l'objet .FACT :
        #--------------------------------
        if itypfl == 3:  # faisceau axial
            assert self.FACT.lonmax == 3 * nbmode * nbvite
        else:
            assert self.FACT.lonmax == 3 * nbmode

        # vérification de l'objet .MASG :
        #--------------------------------
        if itypfl == 3:  # faisceau axial
            assert self.MASG.lonmax == nbmode * nbvite
        else:
            assert self.MASG.lonmax == nbmode

        # vérification de l'objet .FREQ :
        #--------------------------------
        assert self.FREQ.lonmax == 2 * nbmode * nbvite

        # vérification existence .VCN et .VEN:
        #-------------------------------------
        if self.VCN.exists:
            assert self.VEN.exists
        if self.VEN.exists:
            assert self.VCN.exists
        if self.VEN.exists:
            assert itypfl == 1 and couplage == 1
        if self.RAP.exists:
            assert (self.VEN.exists and self.VCN.exists)

        # vérification de l'objet .VCN :
        #--------------------------------
        if self.VCN.exists:
            fsvi = typfl.FSVI.get()
            nbzone = fsvi[1]
            nbval = 0
            for i in range(nbzone):
                nbval = nbval + fsvi[2 + nbzone + i]
            assert self.VCN.lonmax == nbmode * nbval * 2

        # vérification de l'objet .VEN :
        #--------------------------------
        if self.VEN.exists:
            assert self.VEN.lonmax == nbmode * 2

        # vérification de l'objet .RAP :
        #--------------------------------
        if self.RAP.exists:
            fsvi = typfl.FSVI.get()
            nbzone = fsvi[1]
            nbval = 0
            for i in range(nbzone):
                nbval = nbval + fsvi[2 + nbzone + i]
            assert self.RAP.lonmax == nbmode * nbval * 2

        # vérification de la SD table contenant les cham_no :
        #----------------------------------------------------
        tcham = self.sd_table
        assert tcham.nb_column() == 1, tcham
        col1_d, col1_m = tcham.get_column_name('NOM_CHAM')
        assert col1_d, "Il manque la colonne NOM_CHAM"

        data = col1_d.data.get()
        mask = col1_m.mask.get()
        profchno = ''
        for k in range(len(mask)):
            if not mask[k]:
                continue
            ch1 = sd_cham_no(data[k])
            ch1.check(checker)

            # Tous les cham_no doivent avoir le meme prof_chno :
            profchn1 = ch1.REFE.get()[1]
            if profchno == '':
                profchno = profchn1
            else:
                assert profchn1 == profchno, (profchn1, profchno)

        # vérification de la SD l_table :
        #--------------------------------
        if self.sd_l_table.LTNT.exists:
            assert itypfl == 3   # FAISCEAU_AXIAL
        if itypfl == 3:
            assert self.sd_l_table.LTNT.exists

        if self.sd_l_table.LTNT.exists:
            l_table = self.sd_l_table
            l_table.check(checker)

            # la l_table ne contient qu'une seule table nommée 'MATR_GENE'
            sdu_compare(
                l_table.LTNT, checker, l_table.LTNT.lonuti, '==', 1, "LONUTI(LTNT)==1")
            sdu_compare(l_table.LTNT, checker, l_table.LTNT.get()[
                        0].strip(), '==', 'MATR_GENE', "LTNT[0]==MATR_GENE")

            # vérification de la table 'MATR_GENE' :
            tmatgen = sd_table(l_table.LTNS.get()[0])
            col1, dummy = tmatgen.get_column_name('NUME_VITE')
            sdu_assert(None, checker, col1, "Manque colonne NUME_VITE")
            col1, dummy = tmatgen.get_column_name('VITE_FLUI')
            sdu_assert(None, checker, col1, "Manque colonne VITE_FLUI")

            for x in 'MATR_RIGI', 'MATR_MASS', 'MATR_AMOR':
                col1_d, col1_m = tmatgen.get_column_name(x)
                sdu_assert(None, checker, col1, "Manque colonne : " + x)
                data = col1_d.data.get()
                mask = col1_m.mask.get()
                for k in range(len(mask)):
                    if not mask[k]:
                        continue
                    matgen = sd_matr_asse_gene(data[k])
                    matgen.check(checker)
Esempio n. 6
0
class sd_fiss_xfem(AsBase):
    nomj = SDNom(fin=8)

    INFO = AsVK16(lonmax=3,)   # info discontinuite et type de fissure
    MAILLAGE = AsVK8(lonmax=1,)

# I.1) objets relatifs aux level sets

    LNNO = sd_cham_no()
    LTNO = sd_cham_no()
    GRLNNO = sd_cham_no()
    GRLTNO = sd_cham_no()
    BASLOC = sd_cham_no()
    FONDFISS = Facultatif(AsVR())
    NOFACPTFON = Facultatif(AsVI())
    BASEFOND = Facultatif(AsVR())
    FOND_TAILLE_R = Facultatif(AsVR(SDNom(nomj='.FOND.TAILLE_R'),))
    FONDMULT = Facultatif(AsVI())
    CARAFOND = Facultatif(AsVR(lonmax=2,))
    JONFISS = Facultatif(AsVK8())
    JONCOEF = Facultatif(AsVI())
    CHAMPS_LVS = Facultatif(AsVL(SDNom(nomj='.CHAMPS.LVS'), lonmax=1))
#   objets relatifs a la grille auxiliaire
    GRILLE_MAILLAGE = Facultatif(AsVK8(SDNom(nomj='.GRI.MAILLA'), lonmax=1,))
    GRILLE_LNNO = Facultatif(sd_cham_no(SDNom(nomj='.GRI.LNNO')))
    GRILLE_LTNO = Facultatif(sd_cham_no(SDNom(nomj='.GRI.LTNO')))
    GRILLE_GRLNNO = Facultatif(sd_cham_no(SDNom(nomj='.GRI.GRLNNO')))
    GRILLE_GRLTNO = Facultatif(sd_cham_no(SDNom(nomj='.GRI.GRLTNO')))
    FONDFISG = Facultatif(AsVR())

# I.2) objets relatifs a l'enrichissement

    GROUP_MA_ENRI = AsVI()
    GROUP_NO_ENRI = AsVI()
    STNO = sd_cham_no()
    STNOR = sd_cham_no()

    MAILFISS_CTIP = Facultatif(AsVI(SDNom(nomj='.MAILFISS.CTIP')))
    MAILFISS_HEAV = Facultatif(AsVI(SDNom(nomj='.MAILFISS.HEAV')))
    MAILFISS_HECT = Facultatif(AsVI(SDNom(nomj='.MAILFISS.HECT')))
    MAILFISS_MAFOND = Facultatif(AsVI(SDNom(nomj='.MAILFISS.MAFOND')))
    MAILFISS_CONT = Facultatif(AsVI(SDNom(nomj='.MAILFISS.CONT')))

# I.3) objets relatifs a la propagation

#   objets relatifs a la localisation du domaine de calcul
    PRO_RAYON_TORE = Facultatif(
        AsVR(SDNom(nomj='.PRO.RAYON_TORE'), lonmax=1,))
    PRO_NOEUD_TORE = Facultatif(AsVL(SDNom(nomj='.PRO.NOEUD_TORE')))
    PRO_NOEUD_PROJ = Facultatif(AsVL(SDNom(nomj='.PRO.NOEUD_PROJ')))

# I.4) objets relatifs au contact

    LISEQ = Facultatif(AsVI(SDNom(nomj='.LISEQ')))
    LISEQ_LAGR = Facultatif(AsVI(SDNom(nomj='.LISEQ_LAGR')))

# I.4) objets relatifs au contact
    # une sd_modele peut avoir une "sd_l_table" contenant des grandeurs
    # caracteristiques de l'etude :
    lt = Facultatif(sd_l_table(SDNom(nomj='')))

# 1.5) verifications d'existence :

    def check_existence(self, checker):
        # si un fond existe alors ...
# sdu_ensemble((self.FONDFISS, self.FONDMULT, self.BASEFOND,
# self.MAILFISS_MAFOND))
        sdu_ensemble((self.FONDFISS, self.FONDMULT, self.BASEFOND))

        # si ....
        sdu_ensemble((self.PRO_RAYON_TORE, self.PRO_NOEUD_TORE))
        sdu_ensemble(
            (self.GRILLE_MAILLAGE, self.GRILLE_LNNO.DESC, self.GRILLE_GRLNNO.DESC))
        sdu_ensemble((self.GRILLE_LTNO.DESC, self.GRILLE_GRLTNO.DESC))
Esempio n. 7
0
class sd_maillage(sd_titre):
    #-------------------------------
    nomj = SDNom(fin=8)

    DIME = AsVI(lonmax=6, )

    # un sd_maillage a toujours des noeuds :
    NOMNOE = AsPn(ltyp=8)
    COORDO = sd_cham_no()

    # normalement, un sd_maillage a toujours une "sd_l_table" contenant des
    # caractéristiques géométriques :
    lt = sd_l_table(SDNom(nomj=''))

    # si le sd_maillage a des groupes :
    GROUPENO = Facultatif(
        AsColl(
            stockage='DISPERSE',
            modelong='VARIABLE',
            type='I',
        ))
    GROUPEMA = Facultatif(
        AsColl(
            stockage='DISPERSE',
            modelong='VARIABLE',
            type='I',
        ))
    PTRNOMNOE = Facultatif(AsPn(type='K', ltyp=24))
    PTRNOMMAI = Facultatif(AsPn(type='K', ltyp=24))

    # si le sd_maillage a des mailles :
    CONNEX = Facultatif(
        AsColl(
            acces='NU',
            stockage='CONTIG',
            modelong='VARIABLE',
            type='I',
        ))
    TYPMAIL = Facultatif(AsVI())
    NOMMAI = Facultatif(AsPn(ltyp=8))

    # si le sd_maillage a des patchs:
    PATCH = Facultatif(
        AsColl(
            acces='NU',
            stockage='CONTIG',
            modelong='VARIABLE',
            type='I',
        ))
    COMAPA = Facultatif(AsVI())
    CONOPA = Facultatif(AsVI())
    PTRNOMPAT = Facultatif(AsVK24())

    # si le sd_maillage a des super-mailles :
    NOMACR = Facultatif(AsVK8())
    SUPMAIL = Facultatif(
        AsColl(
            acces='NO',
            stockage='DISPERSE',
            modelong='VARIABLE',
            type='I',
        ))
    PARA_R = Facultatif(AsVR())
    TYPL = Facultatif(AsVI())

    # si le sd_maillage est linéique (tube_GV) :
    absc_curv = Facultatif(sd_carte(SDNom(nomj='.ABSC_CURV')))

    ADAPTATION = Facultatif(AsVI(lonmax=1, ))

    # Ces objets sont nécessaires pour CREA_MAILLAGE RESTREINT
    CRNO = Facultatif(AsVI())
    CRMA = Facultatif(AsVI())
    MAOR = Facultatif(AsVK8())

    def u_dime(self):
        dime = self.DIME.get()
        nb_no = dime[0]
        nb_nl = dime[1]
        nb_ma = dime[2]
        nb_sm = dime[3]
        nb_sm_mx = dime[4]
        dim_coor = dime[5]
        return nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor

# remarque :  la sd_maillage pouvant etre "volumineuse", on s'interdit (pour des raisons de temps CPU)
#             de vérifier le contenu des gros objets.

    def check_DIME(self, checker):
        nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
        assert nb_sm <= nb_sm_mx, (nb_sm, nb_sm_mx)
        if nb_nl > 0:
            assert nb_sm > 0
        assert nb_no > 0, nb_no
        assert dim_coor in (2, 3), dim_coor

    def check_NOEUDS(self, checker):
        nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
        assert self.NOMNOE.nomuti == nb_no + nb_nl, (nb_no, nb_nl)
        assert self.COORDO.VALE.lonmax == 3 * nb_no, nb_no

    def check_MAILLES(self, checker):
        nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
        if nb_ma == 0:
            return
        assert self.NOMMAI.nommax == nb_ma, nb_ma
        assert self.TYPMAIL.lonmax == nb_ma, nb_ma
        assert self.CONNEX.nmaxoc == nb_ma, nb_ma

    def check_SSS(self, checker):
        nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
        if nb_sm == 0:
            return
        assert self.NOMACR.lonmax == nb_sm, nb_sm
        assert self.PARA_R.lonmax == 14 * nb_sm, nb_sm
        assert self.SUPMAIL.nmaxoc == nb_sm, nb_sm

    def check_TYPL(self, checker):
        nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
        if nb_nl == 0:
            return
        assert self.TYPL.lonmax == nb_nl, nb_nl
        typl = self.TYPL.get()
        for k in typl:
            assert k in (-1, -2), typl