2
enter image description here정확한 Fipy 코드
화상 컨트롤 식, 초기 및 경계 condition.It의 descripe 플레이트와 유체 사이의 열 전달 문제를 포함으로 2-D하는 PDE 약관을 번역. fipy를 사용하여 var를 포함하는 2-d 문제와 경계 조건을 인코딩하는 방법을 모르겠습니다. 내 시도입니다.
from fipy import *
import numpy as np
#constant
Pe=2400
le_L=1/20000
L_l=20000
alphas=1
alphaf=1
a=1/Pe+le_L
b=1/Pe+L_l
Bi=0.4
c=Bi/Pe*L_l
#generate
mesh=Grid2D(dx=1,dy=1)
Ts=CellVariable(mesh=mesh,name='Ts',value=900)
Tf=CellVariable(mesh=mesh,name='Tf',value=300)
#condition
Ts.faceGrad.constrain([0.],mesh.facesLeft)
Ts.faceGrad.constrain([0.],mesh.facesRight)
Ts.faceGrad.constrain([-1.*Bi*(Tf.value-Ts.value)],mesh.facesBottom)
Ts.faceGrad.constrain([0.],mesh.facesTop)
Tf.constrain(300,mesh.facesLeft)
Tf.grad.constrain(0,mesh.facesRight)
a=CellVariable(mesh=mesh,rank=1)
a[:]=1
#eq
eq1=TransientTerm(var=Ts)==DiffusionTerm(coeff=[[a,b]],var=Ts)
eq2=TransientTerm(var=Tf)==DiffusionTerm(coeff=[[a,0]],var=Tf)-
ExponentialConvectionTerm(a,var=Tf)+ImplicitSourceTerm(c,var=Tf)-
ImplicitSourceTerm(c,var=Ts)
eq=eq1&eq2
#solve
dt=0.1
steps=100
viewer=Viewer(vars=(Ts,Tf),datamax=1000,datamin=0)
for i in range(steps):
eq.solve(dt=dt)
viewer.plot()
나는 그것이 틀렸다는 어떤 도움을 환영 어디로 가는지 모르겠어요 failed.And 찾을; 많은 감사합니다! BTW, 내가 얻고 싶은 최종 이미지는 enter image description here ...... 많은 thx입니다!
고마워요! 당신은 소스 기간으로 경계를 정의함으로써 소개하는 방법을 의미합니까? 스위핑을 피할 수있는 경계 조건을 업데이트 할 'for'주기에 추가 할 수 있습니까? 범위 (단계) : Ts.faceGrad.constrain ([- eq1 = TransientTerm (var = Ts) == DiffusionTerm (Ds, var = Ts); eq2 = TransientTerm (var = Tf) = ImplicitSourceTerm (c, var = Tf) -ImplicitSourceTerm (c, var = Tf) == DiffusionTerm (Df, var = Tf) -Exponent ialConvectionTerm ([[1.], [0]], Ts); eq = eq1 & eq.solve (dt = dt) viewer.plot() –
스윕은 필요하지 않을 수도있다. 방정식/경계 조건에 비선형 종속성이 있다고 생각하지 않습니다. 선형 종속성은 결합 된 해석에 의해 처리되어야합니다. 루프에서'.constrain() '을 반복해서 호출하는 것은 좋은 생각이라고 생각하지 않습니다. 내가 쓴 소스는 현재 일반적인 경계 조건에 대한 최선의 권장 사항입니다. – jeguyer
나는이 방법에 대해 배웠다. 그러나이 문제의 프로토 타입은 ** 직사각형 솔리드의 바닥에서 유체의 맨 위로의 열전달 **이다. 그래서 나는 mask = (m.facesTop * m.faceNormals)를 코딩한다. 발산 dPR = m._cellDistances [m.facesTop.value] [0] Af = m._faceAreas [m.facesTop.value] [0] coeff_top = mask * Df [1,1] * Af/(1+ dpR)'을 사용하여 다음과 같이 계산할 수 있습니다. eq1 = TransientTerm (var = Ts) == DiffusionTerm (coeff = Ds, var = Ts) \ + ImplicitSourceTerm (coeff = top_coeff * -Bi, var = Tf) \ - ImplicitSourceTerm (coeff = bottom_coeff * -Bi, var = Ts)'첫 번째 방정식은 그렇지만 제대로 작동하지 않습니다 ... 어디가 잘못 되었습니까? –