2014-06-20 50 views
2

我試圖插入一個立方,笛卡爾網格的球諧函數。如何將(r,球諧)空間中表示的數據插值到常規笛卡爾網格(F90)?

我的球形,僞光譜模擬的輸出數據具有rMinrMax,每個之間Nr徑向水平包含一組有限次球面諧波爲經度和緯度的。球面諧波通過三角截斷被映射到包含緯度和Nj經度的物理球形網格。

域如下:

  • 徑向水平:rMin <= r(k) <= rMax,具有索引1 <= k <= Nr
  • 球面諧波(三角截斷,在不脫離變換混疊):
    • Nm = (Nj-1)/3
    • 0 <= m <= Nm
    • m <= l <= Nm
    • nlm == (nm+1)*(nm+2)/2(的l總數,m組合)

數據數組:

  • 光譜形式:complex*16, dimension(1:nlm, 1:Nr) :: foo_spectral
  • 笛卡爾形式:real*8, dimension(1:Nx, 1:Ny, 1:Nz) :: foo_cartesian

I」米尋找一個acc從而將數據從其譜表示內插到具有邊長爲2*rMax的立方笛卡爾網格,從而使球形域完全適合於內部。然而,我只想在範圍內插入,對於與r<rMinrMax<r對應的點,立方網格應具有OUTSIDE_DOMAIN值。

目前,我必須從它的頻譜表示的數據(球諧函數:foo(Nr,nlm))變換爲物理表示(球形格:foo(Nr,Ni,Nj)),然後使用在IDL一個QHULL例程從物理的,球形的網格來進行內插物理立方格(foo(Nx,Ny,Nz))(注意立方格表示Nx==Ny==Nz)。

我的數據大小大於我現有的代碼(用IDL編寫)可以處理的大小,並且轉換爲球形空間對於我的目的是不必要的。例如,我想要一個更直接的獨立方法 - 不依賴於IDL。

有關如何做到這一點的任何想法?我願意使用開源庫,但不用必須這樣做。

在此先感謝!

+0

忘記編碼 - 如果有人可以提供一種方法來使用高級數學進行這種轉換,我可以找出使其發生的代碼。 :-) – jvriesem

回答

3

我強烈建議使用這個庫;球諧函數變換很難做到高效準確,而且不太可能你的第一次嘗試就像現有的例程一樣好。

一個同事認爲相當高的圖書館是SHTns,它會爲你做合成(逆變換),並且在任意點上做內插(對於任何給定的外殼)。它有fortran綁定。您仍然需要自己處理多個徑向殼體(可能通過您現在正在做的事情 - 將所有東西轉換爲球形網格,然後使用標準插值方法進入立方體網格),以及雖然這樣做有點棘手,但它比球諧函數變換部分更直接。

+0

我同意 - 圖書館是偉大的。特別是如果它們只包含在幾個可以用我的代碼編譯的源文件中。我今晚會去看看那個圖書館 - 謝謝! – jvriesem