2017-09-06 74 views
1

我是新来fipy,所以我道歉,如果这是一个愚蠢的问题(和this似乎并没有帮助我)。 但有存储在人类可读(或Python可读)形式fipy对象的方式,除了在上面的问题提出?这只适用于单元格变量。 如果我想做一些更看中/自定义绘制比什么是默认fipy观众,我该怎么办呢?存储术语数组,而不是fipy对象

采取例如一个简单的一维扩散:

from fipy import * 
# USER-DEFINED PARAMETERS 
nx = 100 
dx = 0.1 
D = 1.0 
bound1 = 30 
bound2 = 70 

# PREPARED FOR SOLUTION 
mesh = Grid1D(nx=nx, dx=dx) 
print "mesh", mesh 

# define some parameters specific to this solution 
T0 = bound2 
Tinf = bound1 

hour = 3600 
day = hour*24 
ndays = 1 
duration = ndays*day 

T = CellVariable(name="Temperature", mesh=mesh, value=bound1) 
# Constant temperature boundary condition 
T.constrain(T0, mesh.facesLeft) 
T.constrain(Tinf, mesh.facesRight) 
# SOLUTION 
eq = (TransientTerm() == DiffusionTerm(coeff=D)) 
timeStepDuration = 0.5*hour 
steps = int(duration/timeStepDuration) 
for step in range(steps): 
    eqCirc.solve(var=T,dt=timeStepDuration) 

但是可以我,例如,存储所述网状作为数组?或者我能存储DiffusionTerm,而不是在每一步CellVariable的价值?

在我的情况,我想为每个时间步长的距离绘制的热梯度(因此从扩散项提取它)。 我可以做到吗?怎么样?

回答

2

但是有没有办法将fipy对象存储在人类可读的(或 python可读的)窗体中,而不是在上面的问题中提出的?

有许多选项。任何FiPy对象都可以使用fipy.dump进行腌制,这将在并行运行时收集数据。例如,

import fipy 
mesh = fipy.Grid2D(nx=3, ny=3) 
var = fipy.CellVariable(mesh=mesh) 
var[:] = mesh.x * mesh.y 
fipy.dump.write(var, 'dump.gz') 

然后,您可以读这回在另一个Python会话与

var = fipy.dump.read('dump.gz') 

然而,味酸就不大适合长期储存,因为它取决于使用的代码相同版本读回数据。另一种方法是使用保存numpy的阵列,

np.save('dump.npy', var) 

,然后用

var_array = np.load('dump.npy') 
var = fipy.CellVariable(mesh=mesh, value=var_array) 

读如果我想做一些更看中/自定义绘制比什么是在 默认fipy观众,我该怎么办?如果我想进行更多 花式/自定义绘图,那么默认fipy查看器的内容如何,​​ 我可以做到吗?

要保存在人类可读的形式与另一个包中绘制的位置和值数据的数据,你可以尝试使用熊猫

import pandas 
df = pandas.DataFrame({'x' : mesh.x, 'y': mesh.y, 'value': var}) 
df.to_csv('dump.csv') 

但是可能我举个例子,存储网格作为数组?

你当然可以Pickle任何Python对象,但使用实际对象的知识更适合长期存储。对于网格网格,只需要dx,dy,nx,ny即可重新实例化。网格对象有一个__getstate__方法,它提供酸洗对象的要求。所有需要存储的是该方法返回的内容。

或者我可以在每个步骤中存储DiffusionTerm的值而不是 CellVariable?

DiffusionTerm并不真正存储除系数以外的任何东西。该等式存储其矩阵和b向量。

+0

另一种选择是'fipy.TSVViewer(T.faceGrad).plot('dump.tsv.gz')',这也是非常有前途的证据,但不是检查点数据返回到FiPy最简单的格式。 pickle,numpy和TSV(使用.gz压缩)都采用大致相同的磁盘空间顺序。 – jeguyer

相关问题