Python 在GMSH物理行获取FaceVariable
我成功地建立了一个非常简单的扩散问题,包括源面连续体和汇面侧壁,顶部是用GMSH生成的网格Python 在GMSH物理行获取FaceVariable,python,differential-equations,fipy,Python,Differential Equations,Fipy,我成功地建立了一个非常简单的扩散问题,包括源面连续体和汇面侧壁,顶部是用GMSH生成的网格 from fipy import * mesh = Gmsh2D('''Point(1) = {0, 0, 0, 1.0}; Point(2) = {12, 0, 0, 0.1}; Point(3) = {12, 16, 0, 0.1}; Point(4) = {15, 16, 0, 0.1}; Point(5) = {15, 100, 0, 1.0}; Point(6) = {0, 100, 0, 1
from fipy import *
mesh = Gmsh2D('''Point(1) = {0, 0, 0, 1.0};
Point(2) = {12, 0, 0, 0.1};
Point(3) = {12, 16, 0, 0.1};
Point(4) = {15, 16, 0, 0.1};
Point(5) = {15, 100, 0, 1.0};
Point(6) = {0, 100, 0, 1.0};
Line(1) = {1, 2};
Line(2) = {2, 3};
Line(3) = {3, 4};
Line(4) = {4, 5};
Line(5) = {5, 6};
Line(6) = {6, 1};
Line Loop(1) = {1, 2, 3, 4, 5, 6};
Plane Surface(1) = {1};
Physical Line("continuum") = {5};
Physical Line("sidewall") = {2};
Physical Line("top") = {3};
Physical Surface("domain") = {1};
''')
c = CellVariable(name='concentration', mesh=mesh, value=0.)
c.faceGrad.constrain([-0.05 * c.harmonicFaceValue], mesh.physicalFaces["sidewall"])
c.faceGrad.constrain([0.05 * c.harmonicFaceValue], mesh.physicalFaces["top"])
c.constrain(1., mesh.physicalFaces["continuum"])
dim = 1.
D = 1.
dt = 50 * dim**2 / (2 * D)
steps = 100
eq = TransientTerm() == DiffusionTerm(coeff=D)
viewer = Viewer(vars=(c, c.grad), datamin=0., datamax=1.)
for step in range(steps):
eq.solve(var=c, dt=dt)
viewer.plot()
TSVViewer(vars=(c, c.grad)).plot(filename="conc.tsv")
raw_input('Press any key...')
计算按预期进行,但是我想访问在GMSH中设置的物理面上的渐变。我知道我可以使用c.faceGrad获得面上的渐变,使用mesh.physicalFaces['Weedwall]获得表示物理面的遮罩。为了获得包含在物理面中的面的渐变,我希望使用像c.faceGrad[mesh.physicalFaces['sidewall]]这样的索引。然而,这并不能产生预期的结果。是否有办法在physicalFaces指定的位置访问FaceVariable?请记住,c.faceGrad具有形状22009,因此遮罩在第二个索引上作为网格的形状进行操作。physicalFaces['sidewall']是22009,。所以,试试看
c、 faceGrad[:,mesh.physicalFaces[“侧壁”]]
要获得正确的形状,请使用
np.arrayc.faceGrad[:,mesh.physicalFaces['Weedwall']]形状
也就是2160。非常感谢,这解决了我的问题。显然,我没有意识到FaceVariable毕竟只是一个可以像往常一样索引的正常数据数组。