2017-02-04 13 views
2

저는 fipy를 사용하여 python에서의 이류 확산 방정식을 풀려고합니다. 대류 계수를 조작하여 도메인의 중심을 가리키고 싶습니다.Fipy에서의 이류 계수 조작 : Advection 확산 수식

내 코드는 당신이 볼 수있는 것처럼, 시간이 함께 파도 대류 계수의 벡터에 의해 설립 된 방향으로 이동

from fipy import * 

# Setting mesh and discretising space 
nx = 10 
dx = 1. 
mesh = Grid1D(nx=nx, dx=dx) 
x = mesh.cellCenters[0] 

# Setting variable of results and adding inicial conditions 
phi = CellVariable(name="solution variable", mesh=mesh, value=0.) 
phi.setValue(1., where=(4 < x) & (6 > x)) 

# Plotting inicial conditions 
if __name__ == '__main__': 
    viewer = Viewer(vars=phi, datamin=-0.1, datamax=1.5) 
    viewer.plot() 

# Diffusion and convection coefficients 
D = 1. 
C = (1.,) 

# Setting PDE 
eqX = TransientTerm() == DiffusionTerm(coeff=D) - \ 
        ConvectionTerm(coeff=C) 

# Solving Transient term 
timeStepDuration = 0.1 
steps = 15 
t = timeStepDuration * steps 

for step in range(steps): 
eqX.solve(var=phi, dt=timeStepDuration) 

# Plotting results 
if __name__ == '__main__': 
    viewer = Viewer(vars=phi, datamin=0., datamax=1.) 
    viewer.plot() 

입니다. 웨이브의 대류 계수를 조작하는 코드는 어떻게하면 내 도메인의 중심쪽으로 만 움직일 수 있습니까?

의견을 보내 주시면 감사하겠습니다.

답변

0

대류 계수는 진행파의 방향을 제어합니다. 예를 들어,이과의 물결을 이류 것, 파도는 항상 도메인의 중심을 향해 여행 할

C = CellVariable(mesh=mesh, rank=1) 
C[:] = 1. 
C.setValue(-1., where=x > 5.) 

가 될 대류 계수를 변경하려면, 다음 중 하나를 속도 1 파가 도메인 상반기에있는 경우 또는 도메인의 후반부에 있다면 속도는 -1입니다. 초기 구형파가 중심을 벗어나면 중심으로 돌아갑니다.

+0

안녕하세요, 귀하의 제안을 제 코드에 넣었지만 작동하지 않았습니다. 대류 계수가 벡터 여야 함을 나타내는 오류를 반환합니다. –

+0

죄송합니다. 계수를 벡터로 만들기 위해'rank = 1' 인수를 생략했습니다. – wd15

+0

정말 고마워요. –