From: Pascale Noyret Date: Thu, 30 Apr 2009 14:27:50 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: V0_a1_SEPQT4~8 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=88f54f7bc1d6ff224dfec0d95becc0a0e79b9e03;p=tools%2Feficas.git *** empty log message *** --- diff --git a/Aster/Cata/cataSTA8/Macro/ajout_quad_gmsh.py b/Aster/Cata/cataSTA8/Macro/ajout_quad_gmsh.py deleted file mode 100644 index e0d64393..00000000 --- a/Aster/Cata/cataSTA8/Macro/ajout_quad_gmsh.py +++ /dev/null @@ -1,252 +0,0 @@ -#@ MODIF ajout_quad_gmsh Macro DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS -# -*- coding: iso-8859-1 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT -# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF -# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# ====================================================================== - - - -# script PYTHON de modification d'un fichier de maillage GMSH (*.msh) -# pour transformer les mailles lineiques en mailles quadratiques -# SEG2->SEG3 / TRIA3->TRIA6 / QUAD4->QUAD8, -# TETRA4 -> TETRA10 / PENTA6 -> PENTA15 / PYRAM5 -> PYRAM13 - -def ajout_quad_gmsh(texte): - - import os,sys,copy - - try: -# construction du dictionnaire nom du noeud / coordonnees : dict_no -# construction de la liste des noeuds : l_no - - typ_mail={} - typ_mail['LI']=['1'] - typ_mail['2D']=['2','3'] - typ_mail['3D']=['4','5','6','7'] - typ_mail['PO']=['15'] - - texte_eclate=texte.split('\n') - nbno=int(texte_eclate[texte_eclate.index('$NOD')+1]) - l_no=texte_eclate[texte_eclate.index('$NOD')+2:texte_eclate.index('$ENDNOD')] - dict_no={} - for i in texte_eclate[texte_eclate.index('$NOD')+2:texte_eclate.index('$ENDNOD')]: - cc=i.split(' ') - dict_no[cc[0]]=[] - for j in cc[1:]:dict_no[cc[0]].append(float(j)) - - l_el1=texte_eclate[texte_eclate.index('$ELM')+2:texte_eclate.index('$ENDELM')] - nbel =texte_eclate[texte_eclate.index('$ELM')+1] - - -# construction du dictionnaire : element / liste des aretes de l'element : elems_aretes -# et de son inverse : aretes / elements contenant cette arete : aretes_elems - - aretes_elems={} - elems_aretes={} - l_el=[] - for elem in l_el1 : - connec0=elem.split(' ')[5:] - while '' in connec0 : connec0.remove('') - aa=elem.split(' ')[:4] - -# attention : indicateur de type de maille : ajouter 7 pour passer -# de TRIA3 a TRIA6, de SEG2 a SEG3, de QUAD4 a QUAD8 (voir inigms.f) - -# si maille POI1, on ne fait rien - - if aa[1] not in typ_mail['PO'] : typel=str(int(aa[1])+7) - else : typel=aa[1] - nom_elem=aa[0]+' '+typel+' '+aa[2]+' '+aa[3] - segments=[] - -# traitement des mailles lineaires : un seul segment - if aa[1] in typ_mail['LI']: - segments.append([int(connec0[0]),int(connec0[1])]) - -# traitement des mailles planes (TRI3 QUA4) : on cree les segments en prenant les noeuds consecutivement, puis on ferme - elif aa[1] in typ_mail['2D']: - for i in range(len(connec0)-1) : segments.append([int(connec0[i]),int(connec0[i+1])]) - segments.append([int(connec0[-1]),int(connec0[0])]) - -# traitement des mailles TETRA4 : pour comprendre, voir "fonctions de forme des elements isoparametriques" R3.01.01 - elif aa[1]=='4': - for i in range(0,2) : segments.append([int(connec0[i]),int(connec0[i+1])]) - segments.append([int(connec0[2]),int(connec0[0])]) - for i in range(0,3) : segments.append([int(connec0[3]),int(connec0[i])]) - -# traitement des mailles HEXA8 : pour comprendre, voir "fonctions de forme des elements isoparametriques" R3.01.01 - elif aa[1]=='5': - for i in range(0,3) : segments.append([int(connec0[i]),int(connec0[i+1])]) - segments.append([int(connec0[3]),int(connec0[0])]) - for i in range(4,7) : segments.append([int(connec0[i]),int(connec0[i+1])]) - segments.append([int(connec0[7]),int(connec0[4])]) - for i in range(0,4) : segments.append([int(connec0[i]),int(connec0[i+4])]) - -# traitement des mailles PENTA6 : pour comprendre, voir "fonctions de forme des elements isoparametriques" R3.01.01 - elif aa[1]=='6': - for i in range(0,2) : segments.append([int(connec0[i]),int(connec0[i+1])]) - segments.append([int(connec0[2]),int(connec0[0])]) - for i in range(3,5) : segments.append([int(connec0[i]),int(connec0[i+1])]) - segments.append([int(connec0[5]),int(connec0[3])]) - for i in range(0,3) : segments.append([int(connec0[i]),int(connec0[i+3])]) - -# traitement des mailles PYRA5 : pour comprendre, voir "fonctions de forme des elements isoparametriques" R3.01.01 - elif aa[1]=='7': - for i in range(0,3) : segments.append([int(connec0[i]),int(connec0[i+1])]) - segments.append([int(connec0[3]),int(connec0[0])]) - for i in range(0,4) : segments.append([int(connec0[4]),int(connec0[i])]) - - elems_aretes[nom_elem]=[] - for seg in segments : - elems_aretes[nom_elem].append(copy.copy(seg)) - seg.sort() - for seg in segments : - if aretes_elems.has_key(tuple(seg)):aretes_elems[tuple(seg)].append(nom_elem) - else :aretes_elems[tuple(seg)]=[nom_elem] - l_el.append(nom_elem) - -# construction de la liste complete des aretes - - l_ar=aretes_elems.keys() - l_ar.sort() - -# numero du plus grand noeud : - nmax=int(l_no[-1].split(' ')[0]) - -# nouveau nombre total de noeuds : - ndtot=nbno+len(l_ar) - -# insertion des noeuds milieux dans le dictionnaire "aretes" et la liste "l_no" : - ind=nmax - for i in l_ar: - ind=ind+1 - x=(dict_no[str(i[0])][0]+dict_no[str(i[1])][0])/2 - y=(dict_no[str(i[0])][1]+dict_no[str(i[1])][1])/2 - z=(dict_no[str(i[0])][2]+dict_no[str(i[1])][2])/2 - l_no.append(str(ind)+' '+str(x)+' '+str(y)+' '+str(z)) - for elem in aretes_elems[i]: - for ar in elems_aretes[elem]: - k=copy.copy(ar) - k.sort() - kk=tuple(k) - if i==kk: - ar.insert(1,ind) - -# re-ecriture du fichier avec les noeuds milieux : - - resu='$NOD\n'+str(ndtot)+'\n' - for i in l_no: - resu=resu+i+'\n' - resu=resu+'$ENDNOD\n'+'$ELM\n'+nbel+'\n' - for i in l_el: - aa=i.split(' ')[:4] - if aa[1] not in typ_mail['PO']: - typ=str(int(aa[1])-7) - else : typ=aa[1] - if elems_aretes[i]!=[]: - resu=resu+i - -# traitement des mailles lineaires : d'abord les noeuds sommets, puis le noeud milieu - if typ in typ_mail['LI']: - resu=resu+' 3 ' - for j in elems_aretes[i]: - resu=resu+str(j[0])+' '+str(j[2])+' '+str(j[1])+' ' - -# traitement des mailles planes (TRI3 QUA4) : d'abord les noeuds sommets, puis, dans le meme ordre, les noeuds milieux - elif typ in typ_mail['2D']: - resu=resu+' '+str(len(elems_aretes[i])*2)+' ' - for j in elems_aretes[i]: - resu=resu+str(j[0])+' ' - for j in elems_aretes[i]: - resu=resu+str(j[1])+' ' - -# traitement des mailles TETRA4 : pour comprendre, voir "fonctions de forme des elements isoparametriques" R3.01.01 - elif typ=='4': - resu=resu+' 10 ' - for j in elems_aretes[i][:4]: - resu=resu+str(j[0])+' ' - resu=resu+str(elems_aretes[i][0][1])+' ' - resu=resu+str(elems_aretes[i][1][1])+' ' - resu=resu+str(elems_aretes[i][2][1])+' ' - resu=resu+str(elems_aretes[i][3][1])+' ' - resu=resu+str(elems_aretes[i][4][1])+' ' - resu=resu+str(elems_aretes[i][5][1])+' ' - -# traitement des mailles HEXA8 : pour comprendre, voir "fonctions de forme des elements isoparametriques" R3.01.01 - elif typ=='5': - resu=resu+' 20 ' - for j in elems_aretes[i][:8]: - resu=resu+str(j[0])+' ' - resu=resu+str(elems_aretes[i][0][1])+' ' - resu=resu+str(elems_aretes[i][1][1])+' ' - resu=resu+str(elems_aretes[i][2][1])+' ' - resu=resu+str(elems_aretes[i][3][1])+' ' - - resu=resu+str(elems_aretes[i][8][1])+' ' - resu=resu+str(elems_aretes[i][9][1])+' ' - resu=resu+str(elems_aretes[i][10][1])+' ' - resu=resu+str(elems_aretes[i][11][1])+' ' - - resu=resu+str(elems_aretes[i][4][1])+' ' - resu=resu+str(elems_aretes[i][5][1])+' ' - resu=resu+str(elems_aretes[i][6][1])+' ' - resu=resu+str(elems_aretes[i][7][1])+' ' - -# traitement des mailles PENTA6 : pour comprendre, voir "fonctions de forme des elements isoparametriques" R3.01.01 - elif typ=='6': - resu=resu+' 15 ' - for j in elems_aretes[i][:6]: - resu=resu+str(j[0])+' ' - resu=resu+str(elems_aretes[i][0][1])+' ' - resu=resu+str(elems_aretes[i][1][1])+' ' - resu=resu+str(elems_aretes[i][2][1])+' ' - - resu=resu+str(elems_aretes[i][6][1])+' ' - resu=resu+str(elems_aretes[i][7][1])+' ' - resu=resu+str(elems_aretes[i][8][1])+' ' - - resu=resu+str(elems_aretes[i][3][1])+' ' - resu=resu+str(elems_aretes[i][4][1])+' ' - resu=resu+str(elems_aretes[i][5][1])+' ' - -# traitement des mailles PYRA5 : pour comprendre, voir "fonctions de forme des elements isoparametriques" R3.01.01 - elif typ=='7': - resu=resu+' 13 ' - for j in elems_aretes[i][:4]: - resu=resu+str(j[0])+' ' - resu=resu+str(elems_aretes[i][0][1])+' ' - resu=resu+str(elems_aretes[i][1][1])+' ' - resu=resu+str(elems_aretes[i][2][1])+' ' - - resu=resu+str(elems_aretes[i][6][1])+' ' - resu=resu+str(elems_aretes[i][7][1])+' ' - resu=resu+str(elems_aretes[i][8][1])+' ' - - resu=resu+str(elems_aretes[i][3][1])+' ' - resu=resu+str(elems_aretes[i][4][1])+' ' - resu=resu+str(elems_aretes[i][5][1])+' ' - - else: -# traitement des mailles POI1 : on recopie la connectivite telle quelle, sans ajouter de nouveau noeud - resu=resu+l_el1[l_el.index(i)] - - resu=resu+'\n' - - resu=resu+'$ENDELM\n' - return resu - except : - return 0