В настоящее время я использую 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,))