깊이 (h (t))가 시간이 변하는 도메인에서 간단한 확산 방정식 (dT/dt = K d2T/dx2)을 풀려고합니다. 따라서 결과 방정식은 다음과 같습니다.FiPy - 도메인 확장/프레임 증가
dT/dt = K/h^2 d2T/dx2 + z/h dh/dt dT/dz
여기서 z는 이제 고정 0 -> 1 도메인입니다.
새로운 용어는 프레임 이류이고 나는 그것을 포함하려고 노력하고 있지만 공간적으로 종속 된 계수로 고민하고 있습니다. 나는 대류 용어 외부를 포함
:
mesh.cellCenters[0]*PowerLawConvectionTerm(...)
이 오류 얻을 :
TermMultiplyError: Must multiply terms by int or float
을하지만 방정식을 재구성하면 공간 의존도는 대류 기간 내에 있도록 :
PowerLawConvectionTerm(coeff=(mesh.cellCenters[0]**2,),...)
방정식을 풀 때 다른 오류가 발생합니다 :
AssertionError: assert(len(id1) == len(id2) == len(vector))
이 용어를 포함하는 올바른 방법은 무엇입니까? 내가 바보 같은 실수를해서 어딘가에 있니?
z를 어떻게 정의합니까? 나는 mesh.cellCenters [0]'을 사용하고 있습니다. (당분간 1D에서 일하고 있지만 수직 차원이 될 것입니다.) 그리고 위의 AssertError를 얻습니다. 해결 방법을 찾았습니다. [http://scicomp.stackexchange.com/questions/20784/diffusion-with-space-dependent-drift-in-fipy] 여기서 'z * z_hat'조합은 'CellVariable (mesh = mesh, value = z)'- 더 좋은 방법이 있습니까? h_t는 z = h에서 필드 자체'h_t = A * f (T)'에서 계산 된 후 간단한 업데이트 'h_new = h_old + dt * h_t'에서 사용됩니다. 소스 용어를 나눠서' 여기서 일하니? 감사합니다. –