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