Я пытаюсь решить уравнение простой диффузии (dT/dt = K d2T/dx2) в области, глубина которой (h (t)) изменяется во времени. Таким образом, полученное уравнение:FiPy - растягивание области/рост фрейма
где 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, value = z) '- Есть ли лучший способ? h_t рассчитывается по самим полям 'h_t = A * f (T)' при z = h, а затем используется в простом обновлении 'h_new = h_old + dt * h_t' Я предполагаю, что ваше предложение о разделении исходных условий не будет" Т работа здесь? Спасибо! –