Проблемы с повторной реализацией примера fipy mesh20x20 из моей собственной IDE

В настоящее время я использую fipy, но все еще относительно новичок в нюансах, связанных с пакетом. Хотя мне удалось восстановить желаемую тепловую карту из папки примеров в примере диффузии mesh20x20 с помощью командной строки, я изо всех сил пытался воспроизвести ее в IDE Spyder. Я использую Python версии 3.8. Достаточно просто создать его, используя папку примеров из командной строки созданный образ командной строки, однако, когда я пытаюсь его перепрограммировать, я получаю итерации следующего. следующий результат. Я надеюсь, что смогу восстановить плавный переход цвета из папки примеров, в отличие от дискретной дихроматической опции, которой я ограничен в настоящее время. Я считаю, что есть некоторые проблемы со зрителем в каком-то качестве. Я считаю, что некоторые связанные проблемы могли возникнуть в прошлом для других, потенциально в связи с переформатированием цветовой шкалы, хотя я еще не смог эффективно реализовать эти обходные пути для создания желаемые образы. datamin и datamax в Viewer () не работали

Я был бы очень признателен за любую помощь, которую может предоставить сообщество.

from fipy.terms.transientTerm import TransientTerm
from fipy.terms.implicitDiffusionTerm import ImplicitDiffusionTerm
from fipy.terms.explicitDiffusionTerm import ExplicitDiffusionTerm
from fipy.meshes.nonUniformGrid2D import NonUniformGrid2D
from fipy.variables.cellVariable import CellVariable
from fipy.viewers.matplotlibViewer.matplotlib2DViewer import Matplotlib2DViewer


####
#Global Inputs
D=1
steps=10


#Dimensional Inputs
nx=20
dx=1
ny=20
dy=1
L=dx*nx

#Temporal Inputs
#nt=20
#dt=1

#cell variable initial values
value=0

#construct mesh from dimensional pts
mesh=NonUniformGrid2D(nx=nx, dx=dx, ny=ny, dy=dy)


#construct term variables phi with name, mesh design
phi=CellVariable(name="solutionvariable", mesh=mesh, value=0)


#construct boundary conditions
#dirichlet ---> we can an automatic application of neumann to top right and bottom left
valueTopLeft=0
valueBottomRight=1

#assign boundary conditions to a face or cell
X, Y=mesh.faceCenters
facesTopLeft=((mesh.facesLeft & (Y > L/2 )) | (mesh.facesTop &( X < L/2)))
facesBottomRight=((mesh.facesRight & (Y < L/2)) | (mesh.facesBottom & (X > L/2)))


#constrain variables
phi.constrain(valueTopLeft, facesTopLeft)
phi.constrain(valueBottomRight, facesBottomRight)


#equation construction
eq=TransientTerm()==ExplicitDiffusionTerm(coeff=D)


#equation solving and either viewing and/or extraction
timestepduration=0.9 *(dx**2)/(2*D)
for step in range(steps):
    eq.solve(var=phi, dt=timestepduration)
    print(phi[step])
    viewer=Matplotlib2DViewer(vars=phi, datamin=0, datamax=1)
    viewer.axes.set_title("Solutionvbl(Step %d)" % (step+1,))

person user13708466    schedule 21.07.2020    source источник


Ответы (1)


Я думаю, разобрался. Я использовал ExplicitDiffusion, а в примере используется ImplicitDiffusion. Когда я попробовал это, все, что я получил обратно, было пустым монохроматическим изображением (и вернул нули для моего phi [step] в конце. Я рад сообщить, что как только значение кикстарта предоставляется в разделе значений для cellVariable (я использовал 0,001) , и используется вместе с ImplicitDiffusion, а временной шаг увеличивается с предела 0,9 x ** 2/2 D до используемых 9 x ** 2/2 D Используемый в примерах документации, он более или менее соответствует изображению, сгенерированному при запуске из командной строки. Спасибо за сортировку. Надеюсь, это поможет всем, кто может столкнуться с подобной проблемой.

person user13708466    schedule 21.07.2020
comment
рад слышать, что ты разобрался - person jeguyer; 22.07.2020