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 ]
