Andy and Jon,

Many thanks for pointing me back to mesh.getExteriorFaces()   It's working 
beautifully now.

A perfect example of when I get buried in the details and forget the user's 
manual...

Jeff


________________________________
From: [email protected] [[email protected]] On Behalf Of Andrew Reeve 
[[email protected]]
Sent: Tuesday, September 22, 2009 8:53 PM
To: Multiple recipients of list
Subject: Re: Applying BCs to irregular geometries

Jeff,

I think your looking for the command

mesh.getExteriorFaces()

You can combine this with spatial constraints to define specific regions on the 
outside of your mesh. For example:

headBndry=(FixedValue(mesh.getExteriorFaces()&(X==0.),110.),
                  FixedValue(mesh.getExteriorFaces()&(X==max(X)),100.),
                  FixedValue(mesh.getExteriorFaces()&
                       (Y>0.1)&(Y<50.)&(X>200.)&(X<300.),105.))

Hope that helps,

Andy


On Tue, Sep 22, 2009 at 3:15 PM, Sowards, Jeffrey 
<[email protected]<mailto:[email protected]>> wrote:
Hello List,

I would like to apply a constant flux boundary condition to the entire right 
vertical face of an irregular geometry that was constructed with Gmsh.  Suppose 
the geometry looks something like the sketch below.

y
|
|___ x

         _______
flux{ |            | } flux
flux{ |            | } flux
flux{ |           / } flux
flux{ |          / } flux
flux{ |        | } flux
flux{ |        | } flux
flux{ |        | } flux
flux{ |          \ } flux
flux{ |           \ } flux
flux{ |            | }flux
flux{ |______  | }flux

        |       |    |
       xo     x1   x2


When I use the following in my BCs to get the mesh faces:


>>> BCs = (FixedValue(faces=mesh.getFacesRight(), value=1.), 
>>> FixedValue(faces=mesh.getFacesLeft(), value=0))



the flux is only applied alont the right face where x = x2 as shown here:


       _______
0 { |            | } 1
0 { |            | } 1
0 { |           /
0 { |          /
0 { |        |
0 { |        |
0 { |        |
0 { |          \
0 { |           \
0 { |            | } 1
0 { |______  | } 1

    xo      x1  x2


I want to apply the flux so that it covers all x >= x1 on the right face.  I 
get the error "Face list has interior faces" with the following:

>>> x, y = mesh.getFaceCenters()
>>> facesRight = (mesh.getFaces() & (x == x1) | (x > x1))
>>> BCs = (FixedValue(faces=facesRight(), value=1.), 
>>> FixedValue(faces=mesh.getFacesLeft(), value=0))

Should I break the right face into 4 sections, then apply the flux to each 
section face.  Is there a way to apply boundary conditions to specific lines 
extracted from my irregular geometry constructed with Gmsh?  For instance apply 
flux to the Line(3), Circle(4), Line(5), etc. as constructed in the msh file.

For example:

Include Line(3) and Line(7)
>>> faceRight1 = mesh.getFacesRight()
Circle(4)
>>> faceRight2 = (mesh.getFaces() & (x == Circle(4)) | (y == Circle(4)))
Line(5)
>>> faceRight3 = (mesh.getFaces() & (x == Line(5)) | (y == Line(5)))
Line(6)
>>> faceRight4 = (mesh.getFaces() & (x == Circle(6)) | (y == Circle(6)))

              Line(2)
_             _______
y5          |            |
_            |            |  Line(3)
y4          |            /
_            |          /  Circle(4)
y3           |        |
Line(1)    |        | Line(5)
_            |        |
y2          |         \
_            |          \ Circle(6)
y1          |            |
_            |______ | Line(7)
yo
             Line(8)




Also, If the geometry consists of "fillets" in the locations above, which are 
indicated as Circle(4) and Circle(5), is the flux always going to be orthogonal 
to all cell faces along the two arcs where my mesh has discretized the fillet 
into several straight lines?

Thanks for any suggestions!

Jeff



--
---
Andrew Reeve
Dept. of Earth Sciences
University of Maine
Orono, ME 04444

Reply via email to