Zhekai - Thank you for the explanation. You're right, I answered a much simpler question than you were asking.
The following should do what you want: velocityVector = fp.FaceVariable(mesh=mesh, rank=1) topFaces = fp.numerix.unique(mesh.cellFaceIDs[..., mesh.physicalCells["top"].value].flatten().filled()) velocityVector[0, topFaces] = velocityX_Top[..., topFaces] velocityVector[1, topFaces] = velocityY_Top[..., topFaces] This obtains all of the faces that surround each of the cells in "top", rearranges them into a long list, removes any empty values (different cells can have different numbers of faces), and then removes duplicates. The result is a list of the faceIDs for all the faces that bound all of the cells in "top". Alternatively, topFaces = (mesh.physicalCells["top"].faceValue != 0.).value This obtains the face-evaluated average of whether a cell is in "top". This relies on the fact that True and False can be treated pretty interchangeably with 1. and 0.. The result is a boolean mask which is True for all the faces that bound all of the cells in "top". - Jon > On May 12, 2017, at 12:13 PM, Zhekai Deng <zhekaideng2...@u.northwestern.edu> > wrote: > > Hi Jon, > > Thanks for answering that. However, I am afraid I am not fully understand how > "physicalFaces" field for gmsh mesh could help me resolve this one. > > The "physicalFaces" field, If I understand correctly, is giving me the > Physical Line (not Physical Surface) that I specified in gmsh. Thus, this is > giving me the faces index on that specific line I specified in gmsh. What I > want to achieve is that is there any function that takes sub-domain name as > input (in my case "Physical Surface("top")) give me all the faces in this > domain (not just faces on one line). > > If I just use mesh.physicalFaces["Top"], it will just return error because > "Top" in my case is a "Physical Surface" not a "Physical Line". > > Any help will be appreciated. Thanks. > > Zhekai > > On Fri, May 12, 2017 at 8:54 AM, Guyer, Jonathan E. Dr. (Fed) > <jonathan.gu...@nist.gov> wrote: > There is also a .physicalFaces field defined for a gmsh mesh. > > > On May 11, 2017, at 6:39 PM, Zhekai Deng > > <zhekaideng2...@u.northwestern.edu> wrote: > > > > Hi All, > > > > I wonder is there any way to specify the FaceVariable based on the naming > > from gmsh ? For example, I name my sub domain in gmsh as "top" and > > "bottom". In Fipy, I would like to do something similar to following: > > > > velocityX_Top = (1-Epsilon*Epsilon)/(Epsilon*Epsilon)*(yFace + > > Epsilon*np.sqrt(1-xFace*xFace)) > > velocityY_Top = > > (1-Epsilon*Epsilon)/Epsilon*(xFace*yFace)/(np.sqrt(1-xFace*xFace)) > > velocityX_Bottom = yFace > > velocityY_Bottom = -xFace > > > > velocityVector = FaceVariable(mesh=mesh.physicalCells["top"], rank=1) > > velocityVector[0] = velocityX_Top > > velocityVector[1] = velocityY_Top > > > > velocityVector = FaceVariable(mesh=mesh.physicalCells["bottom"], rank=1) > > velocityVector[0] = velocityX_Bottom > > velocityVector[1] = velocityY_Bottom > > > > I think it gives me error because the mesh.physicalCells is cell index, not > > face index. But is there any way I could do get all face index using sub > > domain ID? > > > > I have attached the complete and minimal code to demonstrate what I try to > > achieve. > > > > Thanks! > > > > Zhekai > > > > <example.py>_______________________________________________ > > fipy mailing list > > fipy@nist.gov > > http://www.ctcms.nist.gov/fipy > > [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ] > > > _______________________________________________ > fipy mailing list > fipy@nist.gov > http://www.ctcms.nist.gov/fipy > [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ] > > _______________________________________________ > fipy mailing list > fipy@nist.gov > http://www.ctcms.nist.gov/fipy > [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ] _______________________________________________ fipy mailing list fipy@nist.gov http://www.ctcms.nist.gov/fipy [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]