自由流媒體和Landau匹配,以促進不變的流體動力初始條件。
freestream
是用於重型離子碰撞的Python實施,如
只需運行
PIP安裝自由級
唯一的要求是Numpy(1.8.0或更高版本)和Scipy(0.14.0或更高版本)。
可能的問題:如果未將系統語言環境設置為UTF-8編碼(由於此讀數和代碼DOCSTRINGS中的希臘字符),則可能會發生UnicodeDecodeError
。要解決此問題,請配置語言環境或簡單地設置LANG
環境變量,例如export LANG=en_US.UTF-8
。
freestream
通過FreeStreamer
類具有面向對象的接口,該類別採用三個參數:
freestream . FreeStreamer ( initial , grid_max , time )
在哪裡
initial
是一個正方形陣列,包含初始狀態,grid_max
是FM中網格的最大值,即網格寬度的一半(請參見以下示例),time
是在FM/c中自由流的時間。 initial
陣列必須包含二維(增強不變)的初始條件,該條件已離散在均勻的方形網格上。然後將其解釋為在時間τ = 0+上非相互作用的無質量部分的密度曲線。
grid_max
參數設置網格的最外側邊緣,而不是外部網格單元的中點,例如
這是與Trento --grid-max
參數相同的定義。
正確設置網格最大以避免靜脈傳播非常重要。
假設initial
是一個N × N初始條件陣列,網格最大為10.0 FM,我們希望以1.0 FM的自由流。我們首先創建一個FreeStreamer
對象:
import freestream
fs = freestream . FreeStreamer ( initial , 10.0 , 1.0 )
現在,我們可以提取從fs
初始化水電所需的各種數量。
Tuv = fs . Tuv ()
Tuv
是一個N × N ×3×3陣列,每個網格點都包含完整的張量。如果我們只需要張量的某個組件,我們可以將索引傳遞給該函數:
T00 = fs . Tuv ( 0 , 0 )
T00
是每個網格點上包含T 00的N × N陣列。這純粹是出於句法便利性: fs.Tuv(0, 0)
等效於fs.Tuv()[:, :, 0, 0]
。
e = fs . energy_density () # n x n
u = fs . flow_velocity () # n x n x 3
我們還可以提取流速度的各個組成部分:
u1 = fs . flow_velocity ( 1 ) # n x n
同樣,這相當於fs.flow_velocity()[:, :, 1]
。
剪切壓張量πμν與Tμν一樣工作:
pi = fs . shear_tensor () # n x n x 3 x 3
pi01 = fs . shear_tensor ( 0 , 1 ) # n x n
大量粘性壓力π取決於狀態p(e)的方程。默認情況下,使用了理想的EOS P(E) = E /3:
bulk = fs . bulk_pressure ()
實際上,理想的EOS實際上是零壓力,但是由於數值精度,將有小的非零值。
要使用另一個EOS,請將可呼叫對像傳遞給bulk_pressure()
:
bulk = fs . bulk_pressure ( eos )
例如,假設我們有一個要插值的壓力和能量密度表。我們可以使用scipy.interpolate
構建樣條並將其傳遞給bulk_pressure()
:
import scipy . interpolate as interp
eos_spline = interp . InterpolatedUnivariateSpline ( energy_density , pressure )
bulk = fs . bulk_pressure ( eos_spline )
該代碼應在幾秒鐘內運行,具體取決於網格大小。計算時間與網格單元的數量成正比(即N 2 )。
確保網格足夠大以適應徑向膨脹。該代碼未檢查溢出。
FreeStreamer
返回對其內部數組的引用,因此請勿將其修改到位 - 製作副本!
FreeStreamer
使用二維立方樣條(scipy.interpaly.trectbivariatespline)從離散網格中構造連續的初始條件曲線。如果網格間距足夠小,這是非常精確的。樣條有時在尖銳的邊界周圍略微負面。 FreeStreamer
將這些負值強化為零。
腳本test.py
包含單元測試並生成可視化定性檢查。要運行測試,請安裝鼻子並運行:
nosetests -v test.py
有兩個單位測試:
這些測試有時會失敗,因為存在一個隨機組件,並且公差有些嚴格(每個網格點都必須在0.1%以內同意)。當測試失敗時,它將打印出比率列表(觀察/預期)。通常,故障發生在系統非常稀釋的最外面網格電池中,即使在那裡,它也只會錯過約0.2%。
要生成可視化,請執行test.py
作為帶有兩個參數的腳本,即可視化的測試用例和一個PDF輸出文件。有三個測試案例:
gaussian1
,一個以起源為中心的狹窄對稱高斯。gaussian2
,與起源更廣泛的不對稱高斯偏移。random
,一種隨機生成的初始條件(這在任何現實中都不是現實的,僅用於可視化)。例如:
Python test.py Gaussian1 freeStream.pdf
將運行gaussian1
測試用例並將結果保存在freestream.pdf
中。 PDF包含最初狀態和FreeStreamer
計算的所有內容的可視化。在每個可視化中,紅色表示正值,藍色表示為負,並且陣列的最大絕對值在左上方。
隨附的腳本animate.py
從HDF5格式保存的初始條件(例如Trento Events)生成動畫(如本頁面上的一個)。它需要使用Matplotlib和H5PY的Python3,當然必須安裝freestream
。要為Trento事件進行動畫活動,首先以HDF5格式生成一些事件,然後運行腳本:
Trento PB PB 10 -O Events.hdf ./ animate.py Event.hdf Event_0 freestream.mp4
第一個參數是HDF5文件名,第二個是要動畫的數據集,最後一個是動畫文件名。運行./animate.py --help
以獲取更多信息,包括動畫持續時間,Framerate,colormap等的選項。