我很感謝設置一般邊界條件的幫助,-grad(y) + g(y) = 0
其中g
是未知的某些函數y
。這裏有一個簡單的例子1D,我不能去上班:一般邊界條件
N=3
h=1./(float(N)-1.)
mesh = Grid1D(nx=N, dx=h)
c=CellVariable(mesh=mesh,value=0.5)
## Dirichlet boundary conditions
#c.constrain(2., mesh.facesLeft)
#c.constrain(1., mesh.facesRight)
## Neumann boundary conditions
c.faceGrad.constrain(-1, where=mesh.facesLeft)
c.faceGrad.constrain(-c.faceValue , where=mesh.facesRight)
Eq = DiffusionTerm(coeff=1.0)
Eq.cacheMatrix()
Eq.cacheRHSvector()
Eq.solve(var=c)
m = Eq.matrix.numpyArray
b = Eq.RHSvector
此代碼將不會解決,但我能看到矩陣和RHS:
m= array([[-2., 2., 0.],
[ 2., -4., 2.],
[ 0., 2., -2.]])
b= array([-1. , 0. , 0.5])
矩陣,m
,顯然是單數的,因爲源詞不包含在最後一行。有關如何包含它的任何建議?
謝謝,這似乎越來越接近。然而,我不清楚流量術語是如何引入的,也許它與分歧屬性有關係?這種方法似乎也限制了邊界處的面值和小區中心值相等。 (對於上面的例子,請參見[this plot](http://imgur.com/a/jJz3M))。這引入了一個隨單元大小而變化的錯誤。 –
我有一種感覺,你會想知道爲什麼源代碼看起來像那樣。對我來說,找出它爲什麼是這樣的好藉口。我編輯了我的答案來描述推導,並給出了更好的邊界推斷。 – jeguyer