Я пытаюсь интерполировать сферические гармоники в кубическую декартову сетку.Как я могу интерполировать данные, представленные в (r, сферически гармоническом) пространстве, на регулярную декартову сетку (F90)?
Выходные данные моей сферической, псевдо-спектрального моделирования имеет Nr
радиальные уровни между rMin
и rMax
, каждый из которых содержит множество сферических гармоник конечного порядка для долготы и широты. Сферические гармоники отображаются в физическую сферическую сетку, содержащую Ni
широты и 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<rMin
или rMax<r
, кубическая сетка должна иметь значения OUTSIDE_DOMAIN
.
В настоящее время, я должен преобразовать данные из его спектрального представления (сферические гармоники: foo(Nr,nlm)
) в физическое представление (сферическая сетка: foo(Nr,Ni,Nj)
), а затем использовать QHULL процедуры в IDL интерполировать от физической, сферической сетки к физическая, кубическая сетка (foo(Nx,Ny,Nz)
) (обратите внимание, что Nx==Ny==Nz
для кубической сетки).
Размер моих данных больше, чем мой существующий код (написанный в IDL) может обрабатываться, и преобразование в сферическое пространство для моих целей не является необходимым. Я бы хотел, чтобы более прямой метод был автономным - например, не зависящим от IDL.
Любые мысли о том, как это можно сделать? Я готов использовать библиотеки с открытым исходным кодом, но было бы неплохо не делать этого.
Заранее благодарен!
Забудьте о кодировании - если кто-то может предоставить способ сделать это преобразование с использованием передовой математики, я могу выяснить код, чтобы это произошло. :-) – jvriesem