Beispiel #1
0
    def LIRE_GMSH(self,
                  UNITE_GMSH=19,
                  UNITE_MAILLAGE=20,
                  MODI_QUAD='NON',
                  CREA_GROUP_NO='OUI'):
        """
          Lecture du maillage (format Aster) a partir de sa definition
          (format sup_gmsh)
          UNITE_GMSH     = Numero d'unite logique pour le fichier msh
          UNITE_MAILLAGE = Numero d'unite logique pour le fichier mail
          MODI_QUAD      = 'OUI' si line->quad, 'NON' sinon
          CREA_GROUP_NO  = 'OUI' si on cree les group_no, 'NON' sinon
        """
        nom_gmsh = 'fort.' + repr(UNITE_GMSH)
        self.Create(nom_gmsh)

        PRE_GMSH(UNITE_GMSH=UNITE_GMSH, UNITE_MAILLAGE=UNITE_MAILLAGE)

        _SMESH00 = LIRE_MAILLAGE(FORMAT='ASTER', UNITE=UNITE_MAILLAGE)
        DEFI_FICHIER(ACTION='LIBERER', UNITE=UNITE_GMSH)
        DEFI_FICHIER(ACTION='LIBERER', UNITE=UNITE_MAILLAGE)

        if MODI_QUAD == 'OUI' and self.order == 2:
            raise Exception('The finite elements are already of second order')

        if MODI_QUAD == 'OUI' and self.order <> 2:
            _SMESH01 = CREA_MAILLAGE(MAILLAGE=_SMESH00,
                                     LINE_QUAD=_F(TOUT='OUI'))
            DETRUIRE(CONCEPT=_F(NOM=_SMESH00), INFO=1)
            _SMESH00 = _SMESH01

        _SMESH00 = self.Name(_SMESH00, CREA_GROUP_NO)

        return _SMESH00
 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)
def Auxi(E=100000., Nu=0.3, fx=0., fy=0.):

    ### Lecture du maillage
    asMeshA = LIRE_MAILLAGE(
        FORMAT='MED',
        UNITE=20,  # Unité logique du fichier de maillage
        NOM_MED='global',  # Nom du maillage au sein du fichier
        INFO=1,
    )
    # Nombre de noeuds physiques du maillage
    nbNoeudA = asMeshA.sdj.DIME.get()[0]
    dimA = 2  # Dimension du problème

    ### Affectation des modèles
    modA = AFFE_MODELE(
        MAILLAGE=asMeshG,
        AFFE=(
            _F(
                GROUP_MA='AuxiG',  # Modèle de la structure
                PHENOMENE='MECANIQUE',
                MODELISATION='C_PLAN',
            ), ))

    ### Définition des matériaux
    matA = DEFI_MATERIAU(ELAS=_F(
        E=100000.,
        NU=0.3,
    ), )

    ### Affectation des matériaux
    MatA = AFFE_MATERIAU(
        MAILLAGE=asMeshG,
        AFFE=(_F(
            GROUP_MA='AuxiG',
            MATER=matA,
        ), ),
    )

    # Calcul des matrices de rigidité élémentaires
    matElemA = CALC_MATR_ELEM(OPTION='RIGI_MECA', MODELE=modA, CHAM_MATER=MatA)

    # Calcul de la numérotation
    numDDLA = NUME_DDL(MATR_RIGI=matElemA, )

    # Assemblage de la matrice de rigidité
    matAssA = ASSE_MATRICE(MATR_ELEM=matElemA,
                           NUME_DDL=numDDLA)  #, CHAR_CINE=FixA)
    return matAssA
def Global(E=100000., Nu=0., fx=5., fy=0.):

    ### Lecture du maillage
    asMeshG = LIRE_MAILLAGE(
        FORMAT='MED',
        UNITE=20,  # Unité logique du fichier de maillage
        NOM_MED='global',  # Nom du maillage au sein du fichier
        INFO=1,
    )

    # Nombre de noeuds physiques du maillage
    nbNoeudG = asMeshG.sdj.DIME.get()[0]
    dimG = 2  # Dimension du problème

    ### Affectation des modèles
    modG = AFFE_MODELE(
        MAILLAGE=asMeshG,
        AFFE=(
            _F(
                TOUT='OUI',  # Modèle de la structure
                PHENOMENE='MECANIQUE',
                MODELISATION='C_PLAN',
            ), ))

    ### Définition des matériaux
    matG = DEFI_MATERIAU(ELAS=_F(
        E=E,
        NU=Nu,
    ), )

    ### Affectation des matériaux
    MatG = AFFE_MATERIAU(
        MAILLAGE=asMeshG,
        AFFE=(_F(
            TOUT='OUI',
            MATER=matG,
        ), ),
    )

    ### Affectation des conditions limites
    # Encastrement
    # GROUP_MA => group of edges
    FixG = AFFE_CHAR_CINE(MODELE=modG,
                          MECA_IMPO=(_F(GROUP_MA='Wd', DX=0., DY=0.), ))
    # Effort imposé
    FdG = AFFE_CHAR_MECA(
        MODELE=modG,
        FORCE_CONTOUR=_F(GROUP_MA='Fd', FX=fx, FY=fy),
        #FORCE_ARETE = _F(GROUP_MA='Fd',FX=0,FY=10),
        #PRES_REP = _F(GROUP_MA='Fd',PRES=10),
    )

    # Calcul des matrices de rigidité élémentaires
    matElemG = CALC_MATR_ELEM(OPTION='RIGI_MECA', MODELE=modG, CHAM_MATER=MatG)

    # Calcul de la numérotation
    numDDLG = NUME_DDL(MATR_RIGI=matElemG, )

    # Assemblage de la matrice de rigidité
    matAssG = ASSE_MATRICE(MATR_ELEM=matElemG,
                           NUME_DDL=numDDLG,
                           CHAR_CINE=FixG)

    # Calcul du second membre lié aux CL de Dirichlet
    vcineG = CALC_CHAR_CINE(
        NUME_DDL=numDDLG,
        CHAR_CINE=FixG,
    )

    # Calcul du second membre lié aux CL de Neumann
    vecElemG = CALC_VECT_ELEM(OPTION='CHAR_MECA', CHARGE=FdG, CHAM_MATER=MatG)
    vneumG = ASSE_VECTEUR(VECT_ELEM=vecElemG, NUME_DDL=numDDLG)

    # Factorisation de la matrice de rigidité et prise en compte des CL de
    # Dirichlet éliminées
    matAssG = FACTORISER(
        reuse=matAssG,
        MATR_ASSE=matAssG,
        METHODE='MUMPS',
    )

    matAssPG = matAssG.EXTR_MATR(sparse='True')
    matAssPG = sp.coo_matrix((matAssPG[0], (matAssPG[1], matAssPG[2])),
                             shape=(2 * nbNoeudG, 2 * nbNoeudG)).tocsc()

    return matAssG, vcineG, vneumG, MatG, modG, numDDLG, matAssPG
def Local(E=50000., Nu=0., fx=0., fy=0.):
    ### Lecture du maillage
    asMeshL = LIRE_MAILLAGE(
        FORMAT='MED',
        UNITE=21,  # Unité logique du fichier de maillage
        NOM_MED='local',  # Nom du maillage au sein du fichier
        INFO=1,
    )
    # Nombre de noeuds physiques du maillage
    nbNoeudL = asMeshL.sdj.DIME.get()[0]
    dim = 2  # Dimension du problème

    ### Affectation des modèles
    modL = AFFE_MODELE(
        MAILLAGE=asMeshL,
        AFFE=(
            _F(
                TOUT='OUI',  # Modèle de la structure
                PHENOMENE='MECANIQUE',
                MODELISATION='C_PLAN',
            ), ))

    ### Définition des matériaux
    matL = DEFI_MATERIAU(ELAS=_F(
        E=E,
        NU=Nu,
    ), )

    ### Affectation des matériaux
    MatL = AFFE_MATERIAU(
        MAILLAGE=asMeshL,
        AFFE=(_F(
            TOUT='OUI',
            MATER=matL,
        ), ),
    )

    # Effort imposé
    FdL = AFFE_CHAR_MECA(
        MODELE=modL,
        FORCE_CONTOUR=_F(GROUP_MA='Wd', FX=fx, FY=fy),
    )

    # Char_cine nul
    blank = AFFE_CHAR_CINE(MODELE=modL,
                           MECA_IMPO=_F(
                               GROUP_MA='Wd',
                               DX=0.,
                               DY=0.,
                           ))

    # Calcul des matrices de rigidité élémentaires
    matElemL = CALC_MATR_ELEM(OPTION='RIGI_MECA', MODELE=modL, CHAM_MATER=MatL)

    # Calcul de la numérotation
    numDDLL = NUME_DDL(MATR_RIGI=matElemL)

    matAssL = ASSE_MATRICE(
        MATR_ELEM=matElemL,
        NUME_DDL=numDDLL,
        CHAR_CINE=blank,
    )
    # Calcul du second membre force
    vecElemL = CALC_VECT_ELEM(OPTION='CHAR_MECA', CHARGE=FdL, CHAM_MATER=MatL)
    vneumL = ASSE_VECTEUR(VECT_ELEM=vecElemL, NUME_DDL=numDDLL)

    # Calcul du second membre cine nul
    vblank = CALC_CHAR_CINE(
        NUME_DDL=numDDLL,
        CHAR_CINE=blank,
    )

    # Assemblage de la matrice de rigidité

    matAssL = FACTORISER(
        reuse=matAssL,
        MATR_ASSE=matAssL,
        METHODE='MUMPS',
    )

    return matAssL, vneumL, MatL, modL, numDDLL
Beispiel #6
0
def make_mac_salome(mac, resu1, resu2, unite):

    from code_aster.Cata.Commands import (LIRE_MAILLAGE, AFFE_MODELE,
                                          CREA_CHAMP, DETRUIRE,
                                          INFO_EXEC_ASTER, IMPR_RESU,
                                          DEFI_FICHIER, CREA_RESU)
    import random
    # dimension du MAC

    nb_l = mac.shape[0] - 1
    nb_c = mac.shape[1] - 1
    # fabrication d'un maillage au format aster
    unite_mesh = make_mesh_mac(nb_l, nb_c)

    __MA = LIRE_MAILLAGE(UNITE=unite_mesh, FORMAT='ASTER')

    __MO = AFFE_MODELE(
        MAILLAGE=__MA,
        AFFE=(_F(TOUT='OUI', MODELISATION='PLAN_ELDI',
                 PHENOMENE='MECANIQUE'), ),
    )

    # affection avec CREA_CHAMP
    # mcfact = []
    # ii=0
    # for ind_l in range(1,nb_l+1):
    # for ind_c in range(1,nb_c+1):
    # mcfact.append({'MAILLE':'M%s_%s' %(ind_l,ind_c),'NOM_CMP':'X1','VALE':toto[ii]})
    # ii+=1
    mcfact = []
    # aller chercher les nume_ordre et les freq
    nume_ordre_1 = resu1.get_modes_data()['NUME_ORDRE']
    nume_ordre_2 = resu2.get_modes_data()['NUME_ORDRE']
    nb_mod1 = len(nume_ordre_1)
    nb_mod2 = len(nume_ordre_2)
    freq1 = resu1.get_modes_data()['FREQ']
    if not freq1:
        freq1 = [0.0 for kk in range(nb_mod1)]
    freq2 = resu2.get_modes_data()['FREQ']
    if not freq2:
        freq2 = [0.0 for kk in range(nb_mod2)]

    for ind_l in range(1, nb_l + 1):
        for ind_c in range(1, nb_c + 1):
            mcfact.append({
                'MAILLE': 'M%s_%s' % (ind_l, ind_c),
                'NOM_CMP': 'ERREST',
                'VALE': mac[ind_l, ind_c]
            })
            mcfact.append({
                'MAILLE': 'M%s_%s' % (ind_l, ind_c),
                'NOM_CMP': 'NUEST',
                'VALE': nume_ordre_1[ind_l]
            })
            mcfact.append({
                'MAILLE': 'M%s_%s' % (ind_l, ind_c),
                'NOM_CMP': 'SIGCAL',
                'VALE': freq1[ind_l]
            })
            mcfact.append({
                'MAILLE': 'M%s_%s' % (ind_l, ind_c),
                'NOM_CMP': 'TERMRE',
                'VALE': nume_ordre_2[ind_c]
            })
            mcfact.append({
                'MAILLE': 'M%s_%s' % (ind_l, ind_c),
                'NOM_CMP': 'TERMR2 ',
                'VALE': freq2[ind_c]
            })

    # __CHA = CREA_CHAMP( OPERATION= 'AFFE',
    # TYPE_CHAM='CART_NEUT_R' , MAILLAGE = MAIL,
    # AFFE=mcfact)

    __CHA = CREA_CHAMP(OPERATION='AFFE',
                       MODELE=__MO,
                       PROL_ZERO='OUI',
                       TYPE_CHAM='ELEM_ERRE_R',
                       AFFE=mcfact)

    IMPR_RESU(UNITE=unite, FORMAT='MED', RESU=_F(CHAM_GD=__CHA))

    DETRUIRE(CONCEPT=_F(NOM=(
        __MA,
        __MO,
        __CHA,
    )))

    DEFI_FICHIER(ACTION='LIBERER', UNITE=unite_mesh)

    return