X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FTools%2FblocFissure%2Fgmu%2FfissureCoude.py;h=48892cd62c2df760c02b824051a528bc088246ab;hb=b07ad0d79cc8e79896cc853193fd0afe4185e30d;hp=bf8e0e63927e700efe5d9b19805c4e5e27884784;hpb=5482b99d07dd144fd5be299e722f39a81de3b5be;p=modules%2Fsmesh.git diff --git a/src/Tools/blocFissure/gmu/fissureCoude.py b/src/Tools/blocFissure/gmu/fissureCoude.py index bf8e0e639..48892cd62 100644 --- a/src/Tools/blocFissure/gmu/fissureCoude.py +++ b/src/Tools/blocFissure/gmu/fissureCoude.py @@ -1,36 +1,55 @@ # -*- coding: utf-8 -*- +# Copyright (C) 2014-2021 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +"""Fissure dans un coude""" + +import os -from geomsmesh import geompy, smesh -from geomsmesh import geomPublish -from geomsmesh import geomPublishInFather -import initLog - +import logging import math import GEOM import SALOMEDS import SMESH -#import StdMeshers -#import GHS3DPlugin -#import NETGENPlugin -import logging -from fissureGenerique import fissureGenerique +from . import initLog + +from .geomsmesh import geompy, smesh +from .geomsmesh import geomPublish +from .geomsmesh import geomPublishInFather -from triedreBase import triedreBase -from genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut -from creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain -from construitFissureGenerale import construitFissureGenerale -from sortEdges import sortEdges +from .fissureGenerique import fissureGenerique + +from .triedreBase import triedreBase +from .genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut +from .creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain +from .construitFissureGenerale import construitFissureGenerale +from .sortEdges import sortEdges O, OX, OY, OZ = triedreBase() class fissureCoude(fissureGenerique): - """ - problème de fissure du Coude : version de base - maillage hexa - """ + """Problème de fissure du Coude : version de base - maillage hexa""" - nomProbleme = "tuyau_Coude" + nomProbleme = "fissureCoude" + longitudinale = None + circonferentielle = None + elliptique = None # --------------------------------------------------------------------------- def setParamGeometrieSaine(self): @@ -52,6 +71,7 @@ class fissureCoude(fissureGenerique): # --------------------------------------------------------------------------- def genereGeometrieSaine(self, geomParams): + """a écrire""" logging.info("genereGeometrieSaine %s", self.nomCas) angleCoude = geomParams['angleCoude'] @@ -178,10 +198,10 @@ class fissureCoude(fissureGenerique): # --- peau tube exterieur (PEAUEXT) - cercle1 = geompy.MakeCircle(centre, OZ, de/2.) - extru1 = geompy.MakePrismVecH(cercle1, OZ, l_tube_p1) - revol1 = geompy.MakeRevolution(cercle1, axe, angleCoude*math.pi/180.0) - rot1 = geompy.MakeRotation(cercle1, axe, angleCoude*math.pi/180.0) + Disk_3 = geompy.MakeDiskPntVecR(centre, OZ, de/2. +epais) + extru1 = geompy.MakePrismVecH(Disk_3, OZ, l_tube_p1) + revol1 = geompy.MakeRevolution(Disk_3, axe, angleCoude*math.pi/180.0) + rot1 = geompy.MakeRotation(Disk_3, axe, angleCoude*math.pi/180.0) extru2 = geompy.MakePrismVecH(rot1, Rotation_2, -l_tube_p2) externe = geompy.MakeFuse(extru1, revol1) externe = geompy.MakeFuse(extru2, externe) @@ -275,16 +295,23 @@ class fissureCoude(fissureGenerique): smesh.SetName(algo1d_long_p2, "algo1d_long_p2") smesh.SetName(hypo1d_long_p2, "hypo1d_long_p2") - isDone = maillageSain.Compute() - - mp1 = maillageSain.GroupOnGeom(P1,'P1',SMESH.NODE) - mp2 = maillageSain.GroupOnGeom(P2,'P2',SMESH.NODE) - ext = maillageSain.GroupOnGeom(EXTUBE,'EXTUBE',SMESH.FACE) - btu = maillageSain.GroupOnGeom(BORDTU,'BORDTU',SMESH.EDGE) - clg = maillageSain.GroupOnGeom(CLGV,'CLGV',SMESH.FACE) - pei = maillageSain.GroupOnGeom(PEAUINT,'PEAUINT',SMESH.FACE) - pex = maillageSain.GroupOnGeom(PEAUEXT,'PEAUEXT',SMESH.FACE) - cou = maillageSain.GroupOnGeom(COUDE,'COUDSAIN',SMESH.VOLUME) + is_done = maillageSain.Compute() + text = "maillageSain.Compute" + if is_done: + logging.info(text+" OK") + else: + text = "Erreur au calcul du maillage.\n" + text + logging.info(text) + raise Exception(text) + + _ = maillageSain.GroupOnGeom(P1,'P1',SMESH.NODE) + _ = maillageSain.GroupOnGeom(P2,'P2',SMESH.NODE) + _ = maillageSain.GroupOnGeom(EXTUBE,'EXTUBE',SMESH.FACE) + _ = maillageSain.GroupOnGeom(BORDTU,'BORDTU',SMESH.EDGE) + _ = maillageSain.GroupOnGeom(CLGV,'CLGV',SMESH.FACE) + _ = maillageSain.GroupOnGeom(PEAUINT,'PEAUINT',SMESH.FACE) + _ = maillageSain.GroupOnGeom(PEAUEXT,'PEAUEXT',SMESH.FACE) + _ = maillageSain.GroupOnGeom(COUDE,'COUDSAIN',SMESH.VOLUME) return [maillageSain, True] # True : maillage hexa @@ -317,14 +344,13 @@ class fissureCoude(fissureGenerique): externe = True) # --------------------------------------------------------------------------- - def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams): + def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \ + mailleur="MeshGems"): logging.info("genereShapeFissure %s", self.nomCas) logging.info("shapeFissureParams %s", shapeFissureParams) - angleCoude = geomParams['angleCoude'] r_cintr = geomParams['r_cintr'] l_tube_p1 = geomParams['l_tube_p1'] - l_tube_p2 = geomParams['l_tube_p2'] epais = geomParams['epais'] de = geomParams['de'] @@ -336,15 +362,13 @@ class fissureCoude(fissureGenerique): externe = shapeFissureParams['externe'] lgInfluence = shapeFissureParams['lgInfluence'] self.elliptique = False - if shapeFissureParams.has_key('elliptique'): + if 'elliptique' in shapeFissureParams: self.elliptique = shapeFissureParams['elliptique'] - - azimut = -azimut # axe inverse / ASCOUF axe = geompy.MakeTranslation(OY, -r_cintr, 0, -l_tube_p1) geomPublish(initLog.debug, axe,"axe") - + if not lgInfluence: lgInfluence = profondeur @@ -357,10 +381,8 @@ class fissureCoude(fissureGenerique): self.circonferentielle = False self.longitudinale = False if self.fissureLongue and not self.elliptique: - if abs(orientation) < 45 : - self.longitudinale = True - else: - self.circonferentielle = True + self.longitudinale = bool(abs(orientation) < 45) + self.circonferentielle = not bool(abs(orientation) < 45) nbp1 = 10 if self.circonferentielle: @@ -374,10 +396,10 @@ class fissureCoude(fissureGenerique): raybor = de/2. - epais rayint = raybor + profondeur rayext = raybor - profondeur/5.0 - lgfond = longueur -2*profondeur - angle = lgfond/(2*raybor) + lgfond = longueur -2.*profondeur + angle = lgfond/(2.*raybor) pb = geompy.MakeVertex(raybor, 0, 0) - pi = geompy.MakeVertex(rayint, 0, 0) + pi = geompy.MakeVertex(rayint, 0, 0) pbl = geompy.MakeRotation(pb, OZ, angle) pbr = geompy.MakeRotation(pb, OZ, -angle) geomPublish(initLog.debug, pbl,"pbl") @@ -395,7 +417,7 @@ class fissureCoude(fissureGenerique): pt = geompy.MakeRotation(pil, axl, angi) points.append(pt) for i in range(nbp): - angi = angle -2.0*i*angle/nbp + angi = angle -2.0*i*angle/nbp pt = geompy.MakeRotation(pi, OZ, angi) points.append(pt) for i in range(nbp+1): @@ -407,30 +429,30 @@ class fissureCoude(fissureGenerique): pt = geompy.MakeTranslation(pt, 0, 0, -l_tube_p1) pt = geompy.MakeRotation(pt, axe, alpha*math.pi/180.) points[i] = pt - wire0 = geompy.MakeInterpol(points[0:nbp+1]) - wire1 = geompy.MakeInterpol(points[nbp:2*nbp+1]) - wire2 = geompy.MakeInterpol(points[2*nbp:3*nbp+1]) + wire0 = geompy.MakeInterpol(points[0:nbp+1]) + wire1 = geompy.MakeInterpol(points[nbp:2*nbp+1]) + wire2 = geompy.MakeInterpol(points[2*nbp:3*nbp+1]) #wiretube = geompy.MakeInterpol(points) wiretube=geompy.MakeWire([wire0,wire1,wire2]) geomPublish(initLog.debug, wiretube,"wiretube") - + pe = geompy.MakeVertex(rayext, 0, 0) pe = geompy.MakeRotation(pe, OZ, azimut*math.pi/180.) pe = geompy.MakeTranslation(pe, 0, 0, -l_tube_p1) pe = geompy.MakeRotation(pe, axe, alpha*math.pi/180.) - + arce = geompy.MakeArc(points[0], pe, points[-1]) geomPublish(initLog.debug, arce,"arce") - + facefiss = geompy.MakeFaceWires([arce, wiretube], 1) geomPublish(initLog.debug, facefiss, 'facefissPlace' ) - + pc = geompy.MakeVertex((raybor + rayint)/2.0, 0, 0) centre = geompy.MakeRotation(pc, OZ, azimut*math.pi/180.) centre = geompy.MakeTranslation(centre, 0, 0, -l_tube_p1) centre = geompy.MakeRotation(centre, axe, alpha*math.pi/180.) geomPublish(initLog.debug, centre, 'centrefissPlace' ) - + wiretube = geompy.GetInPlace(facefiss, wiretube) geomPublish(initLog.debug, wiretube, 'wiretubePlace' ) try: @@ -449,7 +471,7 @@ class fissureCoude(fissureGenerique): else: raybor = de/2. - epais dp = +1.0 - prof = dp * profondeur + prof = dp * profondeur lgfond = longueur -2*profondeur cosaz = math.cos(azimut*math.pi/180.) sinaz = math.sin(azimut*math.pi/180.) @@ -477,9 +499,9 @@ class fissureCoude(fissureGenerique): for i in range(nbp+2): x = math.sin(i*math.pi/(nbp+1)) # fonction de répartition des points : distance relative x2 = x*x - totx += x2 + totx += x2 xs.append(totx) - logging.debug("x2: %s, totx: %s", x2, totx) + logging.debug("x2: %s, totx: %s", x2, totx) for i in range(nbp+1): #posi = nbp -i # répartition équidistante des points sur la courbe posi = nbp*(1 -xs[i]/totx) # points plus resserrés aux extrémités de la courbe @@ -501,11 +523,11 @@ class fissureCoude(fissureGenerique): x = math.sin(i*math.pi/nbp) #x = 1.0 # répartition équidistante des points sur la courbe x2 = x*x # points plus resserrés aux extrémités de la courbe - totx += x2 + totx += x2 xs.append(totx) - logging.debug("x2: %s, totx: %s", x2, totx) + logging.debug("x2: %s, totx: %s", x2, totx) for i in range(nbp): - angi = alfrd -angle +2.0*angle*xs[i]/totx + angi = alfrd -angle +2.0*angle*xs[i]/totx pt = geompy.MakeRotation(pi, axe, angi) points.append(pt) curves.append(geompy.MakeInterpol(points)) @@ -521,9 +543,9 @@ class fissureCoude(fissureGenerique): for i in range(nbp+2): x = math.sin(i*math.pi/(nbp+1)) x2 = x*x - totx += x2 + totx += x2 xs.append(totx) - logging.debug("x2: %s, totx: %s", x2, totx) + logging.debug("x2: %s, totx: %s", x2, totx) for i in range(nbp+1): #posi = nbp -i # répartition équidistante des points sur la courbe posi = nbp*xs[i]/totx # points plus resserrés aux extrémités de la courbe @@ -536,7 +558,7 @@ class fissureCoude(fissureGenerique): # for i, pt in enumerate(points): # name = "point%d"%i # geomPublishInFather(initLog.debug,curves[-1], pt, name) - + wiretube = geompy.MakeWire(curves) geomPublish(initLog.debug, wiretube,"wiretube") try: @@ -545,28 +567,28 @@ class fissureCoude(fissureGenerique): except: logging.debug("erreur MakeEdgeWire sur fond de fissure, on fait sans") edgetube = None - + pts = [] pts.append(point0) dpr = prof*math.cos(5.0*math.pi/8.0) pe = geompy.MakeTranslation(pb, dpr*cosaz, dpr*sinaz, 0., "pe") for i in range(nbp): - angi = alfrd -angle +2.0*i*angle/nbp + angi = alfrd -angle +2.0*i*angle/nbp pt = geompy.MakeRotation(pe, axe, angi) pts.append(pt) pts.append(point1) arce = geompy.MakeInterpol(pts) geomPublish(initLog.debug, arce,"arce") - + facefiss = geompy.MakeFaceWires([arce, wiretube], 0) geomPublish(initLog.debug, facefiss, 'facefissPlace' ) - + pc = geompy.MakeTranslation(pb, 0.5*prof*cosaz, 0.5*prof*sinaz, 0.) centre = geompy.MakeRotation(pc, axe, alfrd) geomPublish(initLog.debug, centre, 'centrefissPlace' ) - + edges = geompy.ExtractShapes(facefiss, geompy.ShapeType["EDGE"], True) - edgesTriees, minl, maxl = sortEdges(edges) + edgesTriees, _, _ = sortEdges(edges) edges = edgesTriees[:-1] # la plus grande correspond à arce, on l'elimine wiretube = geompy.MakeWire(edges) #wiretube = edgesTriees[-1] @@ -581,7 +603,7 @@ class fissureCoude(fissureGenerique): else: raybor = de/2. - epais dp = +1.0 - prof = dp * profondeur + prof = dp * profondeur cosaz = math.cos(azimut*math.pi/180.) sinaz = math.sin(azimut*math.pi/180.) alfrd = alpha*math.pi/180. @@ -602,7 +624,7 @@ class fissureCoude(fissureGenerique): cox = geompy.VectorCoordinates(ax1) coy = geompy.VectorCoordinates(ay1) localLCS = geompy.MakeMarker(coo[0], coo[1], coo[2], cox[0], cox[1], cox[2], coy[0], coy[1], coy[2], "localLCS") - + pco = geompy.MakeVertex(0, 0, -profondeur, "pco") pao = geompy.MakeRotation(pco, OY, 0.6*math.pi, "pao") pbo = geompy.MakeRotation(pco, OY, -0.6*math.pi, "pbo") @@ -617,15 +639,16 @@ class fissureCoude(fissureGenerique): facefiss = geompy.MakeFaceWires([arce, arci], 0) geomPublish(initLog.debug, facefiss, 'facefissPlace' ) edges = geompy.ExtractShapes(facefiss, geompy.ShapeType["EDGE"], True) - edgesTriees, minl, maxl = sortEdges(edges) + edgesTriees, _, _ = sortEdges(edges) edgetube = edgesTriees[-1] # la plus grande correspond à arci wiretube = edgetube - + pc = geompy.MakeTranslation(pb, 0.5*prof*cosaz, 0.5*prof*sinaz, 0.) centre = geompy.MakeRotation(pc, axe, alfrd) geomPublish(initLog.debug, centre, 'centrefissPlace' ) - coordsNoeudsFissure = genereMeshCalculZoneDefaut(facefiss, profondeur/2. ,profondeur) + coordsNoeudsFissure = genereMeshCalculZoneDefaut(facefiss, profondeur/2. ,profondeur, \ + mailleur) return [facefiss, centre, lgInfluence, coordsNoeudsFissure, wiretube, edgetube] @@ -638,7 +661,7 @@ class fissureCoude(fissureGenerique): nbSegCercle = nombre de secteurs areteFaceFissure = taille cible de l'arête des triangles en face de fissure. """ - self.maillageFissureParams = dict(nomRep = '.', + self.maillageFissureParams = dict(nomRep = os.curdir, nomFicSain = self.nomCas, nomFicFissure = 'fissure_' + self.nomCas, nbsegRad = 5, @@ -651,12 +674,13 @@ class fissureCoude(fissureGenerique): return elementsDefaut # --------------------------------------------------------------------------- - def genereMaillageFissure(self, geometriesSaines, maillagesSains, - shapesFissure, shapeFissureParams, - maillageFissureParams, elementsDefaut, step): - maillageFissure = construitFissureGenerale(maillagesSains, - shapesFissure, shapeFissureParams, - maillageFissureParams, elementsDefaut, step) + def genereMaillageFissure(self, geometriesSaines, maillagesSains, \ + shapesFissure, shapeFissureParams, \ + maillageFissureParams, elementsDefaut, step, \ + mailleur="MeshGems"): + maillageFissure = construitFissureGenerale(shapesFissure, shapeFissureParams, \ + maillageFissureParams, elementsDefaut, \ + step, mailleur, self.numeroCas) return maillageFissure # --------------------------------------------------------------------------- @@ -669,4 +693,3 @@ class fissureCoude(fissureGenerique): Entity_Quad_Hexa = 8994, Entity_Quad_Penta = 972, Entity_Quad_Pyramid = 1038) -