Hi FiPy,

I am now trying to work with Neumann boundary conditions with this diffusion 
problem. 
I have come across the following implementation of Neumann BC’s:
var.faceGrad.constrain(2 * mesh.faceNormals, where=mesh.exteriorFaces)
However, I am using Gmsh2D() which “ has no attribute ‘faceNormals’ “. 
Is there an equivalent sort of a function for Gmsh2D()?

Also, with the above line of code, instead of a value of 2, could I specify 
something like sin(var). That is can I specify the boundary condition to 
involve the solution variable at the boundary? 
var.faceGrad.constrain(sin(var) * mesh.faceNormals, where=mesh.exteriorFaces)
Just to clean up my questions:
- Does Gmsh2D() have a function like faceNormals?
- Suppose I had a mesh with faceNormals, could I specify the value for the 
gradient at the boundary to involve the solution variable?

Look forward to responses. 

Thanks, Kyle.

On Nov 19, 2014, at 7:54 PM, Kyle Briton Lawlor <[email protected]> wrote:

> Hi Ray,
> 
> Thanks! Definitely helps :)
> 
> Kyle
> On Nov 19, 2014, at 6:07 PM, Raymond Smith <[email protected]> wrote:
> 
>> Hey, Kyle.
>> 
>> Given inner radius rI and outer radius rO, perhaps you could do something 
>> like
>> 
>> rMid = 0.5 * (rI + rO)
>> Xfc, Yfc = mesh.faceCenters
>> innerFaces = (mesh.exteriorFaces & (Xfc**2 + Yfc**2 < rMid))
>> outerFaces = (mesh.exteriorFaces & (Xfc**2 + Yfc**2 > rMid))
>> 
>> Then constrain using where=innerFaces and where=outerFaces.
>> 
>> Hopefully that might help.
>> 
>> Ray
>> 
>> On Wed, Nov 19, 2014 at 5:48 PM, Kyle Briton Lawlor <[email protected]> 
>> wrote:
>> Hi again FiPy,
>> 
>> What is the easiest/most efficient way to make the distinction between the 
>> “outer” exterior faces and the “inner” exterior faces of the annulus?
>> I would like to enforce to different boundary conditions at the outer and 
>> inner radii.
>> 
>> Can I use the where=() function? Or something like it within the 
>> phi.constrain() function?
>> I’ve seen this used to specify different coefficient regions in the 
>> 1D-Diffusion example.
>> Which was used as D.setValue(0.1, where=(specify some ranges)).
>> 
>> Look forward to hearing more. :)
>> 
>> Best, Kyle.
>> 
>> On Nov 19, 2014, at 3:43 PM, Kyle Briton Lawlor <[email protected]> wrote:
>> 
>> > Thanks Daniel and Jonathan,
>> > All of this information helps very much.
>> > It is now working properly, so here is the code.
>> > In case it is useful to anyone.
>> > It is basic, but I figure its nice to share.
>> >
>> > cellSize=0.05
>> > radius=1.
>> > from fipy import *
>> > mesh = Gmsh2D('''cellSize = %(cellSize)g;
>> >        radius = %(radius)g;
>> >        Point(1) = {0, 0, 0, cellSize};
>> >        Point(2) = {radius, 0, 0, cellSize};
>> >        Point(3) = {0, radius, 0, cellSize};
>> >        Point(5) = {-radius, 0, 0, cellSize};
>> >        Point(6) = {0, -radius, 0, cellSize};
>> >        Circle(1) = {2, 1, 3};
>> >        Circle(2) = {3, 1, 5};
>> >        Circle(3) = {5, 1, 6};
>> >        Circle(4) = {6, 1, 2};
>> >        Line Loop(1) = {1, 2, 3, 4};
>> >        Point(200) = {radius/3, 0, 0, cellSize};
>> >        Point(300) = {0, radius/3, 0, cellSize};
>> >        Point(500) = {-radius/3, 0, 0, cellSize};
>> >        Point(600) = {0, -radius/3, 0, cellSize};
>> >        Circle(100) = {200, 1, 300};
>> >        Circle(200) = {300, 1, 500};
>> >        Circle(300) = {500, 1, 600};
>> >        Circle(400) = {600, 1, 200};
>> >        Line Loop(100) = {100, 200, 300, 400};
>> >        Plane Surface(1)={1,100};
>> >        ''' % locals())
>> > phi=CellVariable(name="solution",mesh=mesh,value=0.)
>> > D=1
>> > eq=TransientTerm()==DiffusionTerm(coeff=D)
>> > X,Y=mesh.faceCenters
>> > phi.constrain(1,mesh.exteriorFaces)
>> > timeStepDuration=10*0.9*cellSize**2/(2*D)
>> > steps=10
>> > for step in range(steps):
>> >    eq.solve(var=phi,dt=timeStepDuration)
>> >    
>> > TSVViewer(vars=(phi)).plot(filename="diffusion.annulus."+str(step)+".tsv”)
>> >
>> > Thanks!
>> > Kyle.
>> >
>> > On Nov 19, 2014, at 2:16 PM, Guyer, Jonathan E. Dr. 
>> > <[email protected]> wrote:
>> >
>> >> Just to clarify: as far as FiPy is concerned, "interiorFaces" have a cell 
>> >> on either side of them, whereas "exteriorFaces" have a cell on only one 
>> >> side; the other side is "outside" the mesh. It doesn't matter whether the 
>> >> mesh has simple topological connectivity (square, sphere, etc.) or 
>> >> complex topological connectivity (torus). "interiorFaces" separate "mesh" 
>> >> from "more mesh"; "exteriorFaces" separate "mesh" from "not mesh".
>> >>
>> >>
>> >> On Nov 19, 2014, at 10:53 AM, Daniel Wheeler <[email protected]> 
>> >> wrote:
>> >>
>> >>> Hi Kyle,
>> >>>
>> >>> #Boundary Conditions
>> >>> phi.constrain(X,mesh.exteriorFaces)
>> >>> phi.constrain(X,mesh.interiorFaces)
>> >>>
>> >>> The above is the problem. You are constraining the internal faces, which 
>> >>> makes no sense in FiPy. I am not even sure how FiPy behaves when that 
>> >>> constraint is added. However, I assume that is not what you want to do. 
>> >>> If you remove that constraint the result seems to look nice. BTW, 
>> >>> "exteriorFaces" refers to both the inner and outer external faces of the 
>> >>> annulus. Perhaps you thought "interiorFaces" referred to the interior 
>> >>> annulus faces that are external to the mesh.
>> >>>
>> >>> Also, you don't need to import the results into Mathematica. You can 
>> >>> just use "viewer = fipy.Viewer(phi); viewer.plot()" to look at the 
>> >>> results.
>> >>>
>> >>> Cheers,
>> >>>
>> >>> Daniel
>> >>>
>> >>> --
>> >>> Daniel Wheeler
>> >>> _______________________________________________
>> >>> fipy mailing list
>> >>> [email protected]
>> >>> http://www.ctcms.nist.gov/fipy
>> >>> [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]
>> >>
>> >>
>> >> _______________________________________________
>> >> fipy mailing list
>> >> [email protected]
>> >> http://www.ctcms.nist.gov/fipy
>> >> [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]
>> >
>> 
>> 
>> _______________________________________________
>> fipy mailing list
>> [email protected]
>> http://www.ctcms.nist.gov/fipy
>>   [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]
>> 
>> _______________________________________________
>> fipy mailing list
>> [email protected]
>> http://www.ctcms.nist.gov/fipy
>>  [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]
> 

_______________________________________________
fipy mailing list
[email protected]
http://www.ctcms.nist.gov/fipy
  [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]

Reply via email to