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