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 ]
