コード例 #1
0
class sd_modele(AsBase):
#-----------------------------
    nomj = SDNom(fin=8)

    MODELE = sd_ligrel()
    MAILLE = Facultatif(AsVI())
    PARTIT = Facultatif(AsVK8(lonmax=1))

    # une sd_modele peut avoir une "sd_l_table" contenant des grandeurs
    # caractéristiques de l'étude :
    lt = Facultatif(sd_l_table(SDNom(nomj='')))

    # Si le modèle vient de MODI_MODELE_XFEM :
    xfem = Facultatif(sd_modele_xfem(SDNom(nomj='')))

    def check_existence(self, checker):
        exi_liel = self.MODELE.LIEL.exists
        exi_maille = self.MAILLE.exists
        # si .LIEL => .MAILLE 
        if exi_liel:
            assert exi_maille

    def check_PARTIT(self, checker):
        if self.PARTIT.exists:
            partit = self.PARTIT.get_stripped()
            if partit[0] != '':
                sd2 = sd_partition(partit[0])
                sd2.check(checker)
コード例 #2
0
 def check_1(self, checker):
     if not self.exists():
         return
     celk = self.CELK.get_stripped()
     sd2 = sd_ligrel(celk[0])
     sd2.check(checker)
     assert celk[1] != '', celk
     assert celk[2] in ('ELNO', 'ELGA', 'ELEM'), celk
     assert celk[4] in ('', 'INF', 'MOY', 'SUP'), celk
     assert celk[5] != '', celk
     assert celk[6] in ('MPI_COMPLET', 'MPI_INCOMPLET'), celk
コード例 #3
0
class sd_char_acou(AsBase):
    nomj = SDNom(fin=8)
    chac_vitfa = Facultatif(sd_carte(SDNom(nomj='.CHAC.VITFA', fin=19)))
    CHAC_MODEL_NOMO = AsVK8(
        SDNom(nomj='.CHAC.MODEL.NOMO'),
        lonmax=1,
    )
    chac_cmult = Facultatif(sd_carte(SDNom(nomj='.CHAC.CMULT', fin=19)))
    chac_cimpo = Facultatif(sd_carte(SDNom(nomj='.CHAC.CIMPO', fin=19)))
    chac_imped = Facultatif(sd_carte(SDNom(nomj='.CHAC.IMPED', fin=19)))
    chac_ligre = Facultatif(sd_ligrel(SDNom(nomj='.CHAC.LIGRE', fin=19)))
    TYPE = AsVK8(lonmax=1, )
コード例 #4
0
class sd_char_chme(AsBase):
    nomj = SDNom(fin=13)

    MODEL_NOMO = AsVK8(
        SDNom(nomj='.MODEL.NOMO'),
        lonmax=1,
    )

    LIGRE = Facultatif(sd_ligrel())

    CIMPO = Facultatif(sd_carte())
    CMULT = Facultatif(sd_carte())
    EPSIN = Facultatif(sd_carte())
    F1D1D = Facultatif(sd_carte())
    F1D2D = Facultatif(sd_carte())
    F1D3D = Facultatif(sd_carte())
    F2D2D = Facultatif(sd_carte())
    F2D3D = Facultatif(sd_carte())
    F3D3D = Facultatif(sd_carte())
    FCO2D = Facultatif(sd_carte())
    FCO3D = Facultatif(sd_carte())
    FELEC = Facultatif(sd_carte())
    FL101 = Facultatif(sd_carte())
    FL102 = Facultatif(sd_carte())
    FLUX = Facultatif(sd_carte())
    FORNO = Facultatif(sd_carte())
    IMPE = Facultatif(sd_carte())
    ONDE = Facultatif(sd_carte())
    PESAN = Facultatif(sd_carte())
    PRESS = Facultatif(sd_carte())
    PREFF = Facultatif(sd_carte())
    ROTAT = Facultatif(sd_carte())
    SIGIN = Facultatif(sd_carte())
    SIINT = Facultatif(sd_carte())
    VNOR = Facultatif(sd_carte())
    ONDPL = Facultatif(sd_carte())
    ONDPR = Facultatif(sd_carte())
    EFOND = Facultatif(sd_carte())

    VEASS = Facultatif(AsVK8(lonmax=1, ))
    VEISS = Facultatif(AsVK24(lonmax=8, ))
    EVOL_CHAR = Facultatif(AsVK8(
        SDNom(nomj='.EVOL.CHAR'),
        lonmax=1,
    ))
    TEMPE_TEMP = Facultatif(AsVK8(
        SDNom(nomj='.TEMPE.TEMP'),
        lonmax=1,
    ))
コード例 #5
0
ファイル: sd_resuelem.py プロジェクト: jacojvr/Code_Aster
    def check_1(self, checker):
        if not self.exists():
            return
        noli = self.NOLI.get_stripped()
        sd2 = sd_ligrel(noli[0])
        sd2.check(checker)
        assert noli[1] != '', noli
        assert noli[2] in ('MPI_COMPLET', 'MPI_INCOMPLET'), noli
        assert noli[3] == '', noli

        desc = self.DESC.get()
        assert desc[0] > 0 and desc[0] < 1000, desc
        nbgr = desc[1]
        assert nbgr > 0, desc
        assert len(desc) == nbgr + 2, desc
        assert self.RESL.nmaxoc == nbgr, desc
        for k in desc:
            assert k >= 0, desc
コード例 #6
0
class sd_char_chth(AsBase):
    #--------------------------------
    nomj = SDNom(fin=13)

    CONVE_VALE = Facultatif(AsVK8(SDNom(nomj='.CONVE.VALE'), lonmax=1))
    MODEL_NOMO = AsVK8(SDNom(nomj='.MODEL.NOMO'), lonmax=1)
    LIGRE = Facultatif(sd_ligrel())

    SOURE = Facultatif(sd_champ(SDNom(nomj='.SOURE')))
    # pour l'instant : sd_carte ou sd_cham_elem

    CIMPO = Facultatif(sd_carte())
    CMULT = Facultatif(sd_carte())
    COEFH = Facultatif(sd_carte())
    FLUNL = Facultatif(sd_carte())
    SOUNL = Facultatif(sd_carte())
    FLUR2 = Facultatif(sd_carte())
    FLURE = Facultatif(sd_carte())
    GRAIN = Facultatif(sd_carte())
    HECHP = Facultatif(sd_carte())
    RAYO = Facultatif(sd_carte())
    T_EXT = Facultatif(sd_carte())
    EVOL_CHAR = Facultatif(AsVK8(
        SDNom(nomj='.EVOL.CHAR'),
        lonmax=1,
    ))

    # parfois, TEMP_IMPO crée une carte de sd_fonction :
    # il faut alors vérifier ces sd_fonction
    def check_CIMPO_FONC(self, checker):
        if self.CIMPO.VALE.ltyp != 24:
            return
        vale = self.CIMPO.VALE.get()
        for x in vale:
            if x.strip() == '':
                continue
            nomfon = x[:19]
            sd2 = sd_fonction(nomfon)
            sd2.check(checker)
コード例 #7
0
ファイル: sd_contact.py プロジェクト: jacojvr/Code_Aster
class sd_contact(AsBase):

    #   Nom des objets préfixé par le nom du concept (8 premiers caractères)
    nomj = SDNom(fin=8)

    #   Longueurs des vecteurs fixes (voir CFMMVD.F)
    zpari = 29
    zparr = 5
    zdime = 18
    zmeth = 23
    zdirn = 6
    ztole = 3
    ztypn = 2
    ztypm = 2
    zmaes = 4
    zcmdf = 6
    zcmcf = 13
    zexcl = 3
    zcmxf = 16
    zmesx = 5

    # --------------------------------------------------------------------------------------------------#

    #   Objets présents quelle que soit la formulation
    MODELE = AsVK8(
        SDNom(nomj='.CHME.MODEL.NOMO'),
        lonmax=1,
    )
    PARACI = AsVI(
        SDNom(nomj='.CONTACT.PARACI'),
        lonmax=zpari,
    )
    PARACR = AsVR(
        SDNom(nomj='.CONTACT.PARACR'),
        lonmax=zparr,
    )
    TYPE = AsVK8(
        SDNom(nomj='.TYPE'),
        lonmax=1,
    )

    # --------------------------------------------------------------------------------------------------#

    #   Méthodes pour connaître la formulation
    def type_form(self):
        iform = self.PARACI.get()[-1 + 4]
        assert iform in (1, 2, 3, 4, 5)
        return iform

    def formulation_disc(self):
        return self.type_form() == 1

    def formulation_cont(self):
        return self.type_form() == 2 or self.type_form() == 5

    def formulation_xfem(self):
        return self.type_form() == 3

    def formulation_unil(self):
        return self.type_form() == 4

    def formulation_mail(self):
        return self.formulation_disc() or self.formulation_cont()

    def contact_resolu(self):
        if not self.formulation_mail():
            return True
        iallverif = self.PARACI.get()[-1 + 8]
        return iallverif == 0

# --------------------------------------------------------------------------------------------------#

#   Formulation unilatérale

    NDIMCU = Facultatif(AsVI(SDNom(nomj='.UNILATE.NDIMCU')))
    CMPGCU = Facultatif(AsVK8(SDNom(nomj='.UNILATE.CMPGCU')))
    COEFD = Facultatif(AsVK8(SDNom(nomj='.UNILATE.COEFD')))
    COEFG = Facultatif(AsVK8(SDNom(nomj='.UNILATE.COEFG')))
    LISNOE = Facultatif(AsVI(SDNom(nomj='.UNILATE.LISNOE')))
    POINOE = Facultatif(AsVI(SDNom(nomj='.UNILATE.POINOE')))

    #   Infos sur la formulation unilatérale
    def dimeCU(self):
        if (self.formulation_unil()):
            para = self.NDIMCU.get()
            nnocu = para[-1 + 1]
            ncmpg = para[-1 + 2]
            return nnocu, ncmpg
        return

#   Vérification de la formulation unilatérale

    def check_formulation_unil(self, checker):
        if (self.formulation_unil()):
            nnocu, ncmpg = self.dimeCU()
            assert self.NDIMCU.lonmax == 2
            assert self.CMPGCU.lonmax == ncmpg
            assert self.COEFD.lonmax == nnocu
            assert self.COEFG.lonmax == ncmpg
            assert self.LISNOE.lonmax == nnocu
            assert self.POINOE.lonmax == nnocu + 1
        return

# --------------------------------------------------------------------------------------------------#

#   Formulations DISCRETE/CONTINUE/XFEM
#   Objet commun

    NDIMCO = Facultatif(AsVI(SDNom(nomj='.CONTACT.NDIMCO')))

    def dimeCO(self):
        if (not self.formulation_unil()):
            para = self.NDIMCO.get()
            nzoco = para[-1 + 2]
            nsuco = para[-1 + 3]
            nmaco = para[-1 + 4]
            nnoco = para[-1 + 5]
            ntnoe = para[-1 + 8]
            ntmae = para[-1 + 9]
            ntpt = para[-1 + 16]
            ntelno = para[-1 + 18]
            return nzoco, nsuco, nmaco, nnoco, ntnoe, ntmae, ntpt, ntelno
        return

    def check_dimeco(self, checker):
        if (not self.formulation_unil()):
            nzoco, nsuco, nmaco, nnoco, ntnoe, ntmae, ntpt, ntelno = self.dimeCO(
            )
            assert self.NDIMCO.lonmax == self.zdime
        return

# --------------------------------------------------------------------------------------------------#

#   Formulations maillées (DISCRETE/CONTINUE)
#   Objets communs

#   Objets par zone

    METHCO = Facultatif(AsVI(SDNom(nomj='.CONTACT.METHCO')))
    DIRAPP = Facultatif(AsVR(SDNom(nomj='.CONTACT.DIRAPP')))
    DIRNOR = Facultatif(AsVR(SDNom(nomj='.CONTACT.DIRNOR')))
    JEUFO1 = Facultatif(AsVK8(SDNom(nomj='.CONTACT.JFO1CO')))
    JEUFO2 = Facultatif(AsVK8(SDNom(nomj='.CONTACT.JFO2CO')))
    TOLECO = Facultatif(AsVR(SDNom(nomj='.CONTACT.TOLECO')))

    #   Objets par maille esclave
    JEUCOQ = Facultatif(AsVR(SDNom(nomj='.CONTACT.JEUCOQ')))
    JEUPOU = Facultatif(AsVR(SDNom(nomj='.CONTACT.JEUPOU')))

    #   Objets de description des zones de contact
    PZONE = Facultatif(AsVI(SDNom(nomj='.CONTACT.PZONECO')))
    PSURMA = Facultatif(AsVI(SDNom(nomj='.CONTACT.PSUMACO')))
    PSURNO = Facultatif(AsVI(SDNom(nomj='.CONTACT.PSUNOCO')))
    CONTMA = Facultatif(AsVI(SDNom(nomj='.CONTACT.MAILCO')))
    CONTNO = Facultatif(AsVI(SDNom(nomj='.CONTACT.NOEUCO')))
    PMANO = Facultatif(AsVI(SDNom(nomj='.CONTACT.PMANOCO')))
    MANOCO = Facultatif(AsVI(SDNom(nomj='.CONTACT.MANOCO')))
    PNOMA = Facultatif(AsVI(SDNom(nomj='.CONTACT.PNOMACO')))
    NOMACO = Facultatif(AsVI(SDNom(nomj='.CONTACT.NOMACO')))

    #   Objets pour l'exclusion de noeuds
    PSANS = Facultatif(AsVI(SDNom(nomj='.CONTACT.PSSNOCO')))
    SANSN = Facultatif(AsVI(SDNom(nomj='.CONTACT.SSNOCO')))

    #   Objets d'information sur les noeuds/mailles
    TYPEMA = Facultatif(AsVI(SDNom(nomj='.CONTACT.TYPEMA')))
    TYPENO = Facultatif(AsVI(SDNom(nomj='.CONTACT.TYPENO')))
    MAESCL = Facultatif(AsVI(SDNom(nomj='.CONTACT.MAESCL')))

    def check_mail(self, checker):
        if (self.formulation_mail()):
            nzoco, nsuco, nmaco, nnoco, ntnoe, ntmae, ntpt, ntelno = self.dimeCO(
            )
            assert self.METHCO.lonmax == self.zmeth * nzoco
            assert self.DIRAPP.lonmax == 3 * nzoco
            assert self.DIRNOR.lonmax == self.zdirn * nzoco
            assert self.JEUFO1.lonmax == nzoco
            assert self.JEUFO2.lonmax == nzoco
            assert self.TOLECO.lonmax == self.ztole * nzoco

            if (self.type_form() != 5):
                assert self.JEUCOQ.lonmax == nmaco
                assert self.JEUPOU.lonmax == nmaco
            return

            assert self.PZONE.lonmax == nzoco + 1
            assert self.PSURMA.lonmax == nsuco + 1
            assert self.PSURNO.lonmax == nsuco + 1
            # On utilise lonuti car on a pu éliminer des noeuds/mailles
            assert self.CONTMA.lonuti == nmaco
            assert self.CONTNO.lonuti == nnoco

            assert self.MANOCO.lonmax == 20 * max(nnoco, nmaco)
            assert self.PMANO.lonmax == nnoco + 1

            assert self.NOMACO.lonmax == 20 * max(nnoco, nmaco)
            assert self.PNOMA.lonmax == nmaco + 1

            assert self.PSANS.lonmax == nzoco + 1
            assert self.SANSN.lonmax >= 1

            assert self.TYPENO.lonmax == self.ztypn * nnoco
            assert self.TYPEMA.lonmax == self.ztypm * nmaco
            assert self.MAESCL.lonmax == self.zmaes * ntmae
        return

# --------------------------------------------------------------------------------------------------#

#   Formulation DISCRETE

#   Caractéristisques diverses

    CARADF = Facultatif(AsVR(SDNom(nomj='.CONTACT.CARADF')))

    #   Relations linéaires pour QUAD8
    RELLIN = Facultatif(sd_char_chme(SDNom(nomj='.CHME')))

    def check_form_disc(self, checker):
        if (self.formulation_disc()):
            nzoco, nsuco, nmaco, nnoco, ntnoe, ntmae, ntpt, ntelno = self.dimeCO(
            )
            assert self.CARADF.lonmax == self.zcmdf * nzoco
            assert ntnoe == ntpt
        return

# --------------------------------------------------------------------------------------------------#

#   Formulation CONTINUE

#   Caractéristiques diverses

    CARACF = Facultatif(AsVR(SDNom(nomj='.CONTACT.CARACF')))

    #   Objets pour l'exclusion des noeuds du frottement seulement
    PFROT = Facultatif(AsVI(SDNom(nomj='.CONTACT.PSANOFR')))
    FROTNO = Facultatif(AsVI(SDNom(nomj='.CONTACT.SANOFR')))
    EXCLFR = Facultatif(AsVR(SDNom(nomj='.CONTACT.EXCLFR')))

    #   Ligrel tardif pour l'ajout des modélisations du contact continu
    LIGRE = Facultatif(sd_ligrel(SDNom(nomj='.CHME.LIGRE')))

    def check_form_cont(self, checker):
        if (self.formulation_cont()):
            nzoco, nsuco, nmaco, nnoco, ntnoe, ntmae, ntpt, ntelno = self.dimeCO(
            )
            assert self.CARACF.lonmax == self.zcmcf * nzoco

            if (self.type_form() != 5):
                assert self.PFROT.lonmax == nzoco + 1
                assert self.FROTNO.lonmax >= 1
                assert self.EXCLFR.lonmax == self.zexcl * nzoco
            return

            if self.contact_resolu():
                # ne pas oublier les () car sd_ligrel.exists est une méthode
                assert self.LIGRE.exists()
        return

# --------------------------------------------------------------------------------------------------#

#   Formulation CONTINUE

#   Pointeur d'index DECOUPE_LAC<=>DEFI_CONTACT

    PTRDCLC = Facultatif(AsVI(SDNom(nomj='.CONTACT.PTRDCLC')))

    # --------------------------------------------------------------------------------------------------#

    #   Formulation XFEM

    CARAXF = Facultatif(AsVR(SDNom(nomj='.CONTACT.CARAXF')))
    XFIMAI = Facultatif(AsVK8(SDNom(nomj='.CONTACT.XFIMAI')))
    XNRELL = Facultatif(AsVK24(SDNom(nomj='.CONTACT.XNRELL')))

    #   Relations linéaires pour LBB
    RELLBB = Facultatif(sd_char_dual(SDNom(nomj='.DUAL')))

    #   Objet spécifique grands glissements
    MAESCX = Facultatif(AsVI(SDNom(nomj='.CONTACT.MAESCX')))

    def check_form_xfem(self, checker):
        if (self.formulation_xfem()):
            nzoco, nsuco, nmaco, nnoco, ntnoe, ntmae, ntpt, ntelno = self.dimeCO(
            )
            assert self.CARAXF.lonmax == self.zcmxf * nzoco
            assert self.XFIMAI.lonmax == nzoco
            assert self.XNRELL.exists
            paraci = self.PARACI.get()
            if (paraci[0] != 0):
                assert self.MAESCX.lonuti == self.zmesx * ntmae
        return

    def check_char_contact_xfem_XNRELL(self, checker):
        if (self.formulation_xfem()):
            lnom = self.XNRELL.get()
            nbnom = self.XNRELL.lonuti
            nom = lnom[0]
            if (nom[8:14] != '.LISEQ'):
                oo = AsObject(SDNom(nomj=nom, debut=0),
                              genr='V',
                              xous='S',
                              type=Parmi('I', 'R'))
                oo.check(checker)