2017-09-06 70 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