|
LLC4320模式简介 LLC4320是MITgcm 1/48°全球海洋模式,其诞生的直接原因是为即将到来的SWOT任务提供高分辨率的全球海洋模拟。 LLC4320模式在多个方面具有开创性,特别是其高空间分辨率(全球分辨率在 1 到 2 公里之间)、潮汐驱动、高频(每小时)输出,其海面高度信号中包含了内潮、内波、地转平衡等信号。除了在SWOT相关工作取得应用之外,该模式也在海洋亚中尺度、内波等研究方向得到了广泛应用。 7 y, l9 H9 E) p
该模式主要特征是:
4 ]( k* ?: _7 j0 x! `
- • 全球覆盖(包含极地)
- • 垂向90层
- • 分辨率1/48°
- • 全球海洋分成13个face,每个face的网格数为4320*4320
- • 时间采样是1小时,总计时间维度9030
- • 共14 个月(2011 年 9 月至 2012 年 11 月)
- • 数据量巨大,PB级别
- • 以MDS自定义二进制数据格式存储,为MITgcm独有
- • 模型网格复杂,为lat-lon-cap (LLC) 曲线网格 ,很难在常规地图投影中可视化。
8 n) p" P# \, O
在数据发布之初,该数据集存储在高度安全的NASA超级计算机上,只有获得NASA资助的研究人员才能访问。 后来,NASA Ames研究中心创建数据共享网站(https://data.nas.nasa.gov/ecco/),开放了LLC4320数据。任何人都可以通过互联网访问数据。在此网站上,您可以单击下载单个大小40GB的二进制文件。除非您知道如何解码其中的内容,否则这些文件毫无用处。
9 @, f7 t8 G6 t( o, d . o8 t( s( s( e/ L3 S4 Q- T
xmitgcm.llcreaderxmitgcm 是一个 python 包,可以将 MITgcm 二进制 MDS 文件读入 xarray 结构。通过 dask,xmitgcm可以实现并行计算。
为了使二进制数据方便利用,Ryan Abernathey等开发了xmitgcm的python包,其中llcreader用于读取这些二进制文件。该模块使用xarray和dask从ECCO数据门户网站在线访问数据,使模式大数据的操作变得轻而易举。 ' |9 k8 t9 ?, G T# M
海面温度读取示例4 l9 c# _3 {* a& x# d; r
以海面温度读取为例,展示其基本操作。用到了如下库: - • xmitgcm: 提供llcreader
- • xarray: 基本数据结构和操作
- • dask: 大数据并行和lazy计算
- • sholoviews: 交互式的图像展示
/ q4 ^* z+ g: }. P 1 导入库2 i* _4 V. w: V) x B. p
* y7 T" d0 r& i2 u! L% [import xmitgcm.llcreader as llcreader
6 X4 w3 n. O6 D3 r%matplotlib inline
* k, ^9 ^* [) O) b. H1 j. V. |import holoviews as hv/ u1 |& ?# w) o/ i2 p
from holoviews.operation.datashader import regrid
. y _/ m3 F8 U6 ?2 t9 Y9 hhv.extension('bokeh')3 ~( e+ |: v2 x% T9 H
8 [! S. j, `- c8 T
2 初始化这里我们使用LLC4320模式数据: model = llcreader.ECCOPortalLLC4320Model()
* _' z' C1 C- |( B1 G+ Gmodel根据数据分辨率和来源,llcreader 可用模块有: - • llcreader.ECCOPortalLLC2160Model: LLC2160 accessed via ECCO data portal
- • llcreader.ECCOPortal LLC4320Model: LLC4320 accessed via ECCO data portal
- • llcreader.PleiadesLLC2160Model: LLC2160 accessed on Pleaides filesystem
- • llcreader.PleiadesLLC4320Model: LLC4320 accessed on Pleaides filesystem
- • llcreader.CRIOSPortalASTE270Model: ASTE Release 1 accessed via AWS
- • llcreader.SverdrupASTE270Model: ASTE Release 1 accessed on Sverdrup filesystem at UT Austin
8 j' R% r0 Y; h, |/ a 3 海表温度参数设置
' @$ C: j3 @2 L4 Z6 z N7 L
. o) b' w" o# _& ^, p5 mds_sst = model.get_dataset(varnames=['Theta'], k_levels=[0], type='latlon')
) d5 H; C6 r! H! u& }& hds_sst这里的Theta是模式中固有的海表温度名称。这一行程序执行的lazy模式,数据并没有存储在本地内存,也不会进行计算。该变量的大小接近10T。 ds_sst.nbytes / 1e129.257148163328
如果想查看其他变量的名称: print(model.varnames)['Eta', 'KPPhbl', 'oceFWflx', 'oceQnet', 'oceQsw', 'oceSflux', 'oceTAUX', 'oceTAUY', 'PhiBot', 'Salt', 'SIarea', 'SIheff', 'SIhsalt', 'SIhsnow', 'SIuice', 'SIvice', 'Theta', 'U', 'V', 'W'] 比如Eta表示海面高度,U,V,W为速度。 get_dataset模块的全部参数设置为 get_dataset(varnames=None, iter_start=None, iter_stop=None, iter_step=None, iters=None, k_levels=None, k_chunksize=1, type='faces', read_grid=True, grid_vars_to_coords=True)
常见操作有: - • ds = model.get_dataset(varnames=['Eta'])
- • ds = model.get_dataset(varnames=['Salt', 'Theta'], k_levels=[1, 10, 40])
- • ds = model.get_dataset(varnames=['Theta'], k_levels=[0], type='latlon')
7 ~3 Z7 f. t5 S8 c
7 H6 m% F/ @( `
4 动态交互可视化
( a- n2 _ ?2 ~4 F1 M9 |' H! p0 P/ h2 V
dataset = hv.Dataset(ds_sst.Theta.isel(k=0).astype('f4'))
2 r$ u3 p$ { xhv_im = (dataset.to(hv.Image, ['i', 'j'], dynamic=True)
2 v* W0 W( W6 H6 H9 @# Z9 z .options(cmap='Magma', width=950, height=600, colorbar=True)), |# i" G3 s5 d m- z
3 I- T# @! U: W: z; [) f0 w%output holomap='scrubber' fps=3# E2 `7 Q: y8 W# P) N' T) g
regrid(hv_im, precompute=True)上图是南非Aghulhas Rings,可以看到强大的洋流和丰富的中小尺度涡旋。下图作为对比是LLC2160的结果,和4320的分辨能力比较有一定差距。
: I4 n$ C* h' ~涡度计算示例下面展示LLC4320涡度计算步骤。 model = llcreader.ECCOPortalLLC4320Model()# N6 g( t5 X% A# U k
print(model)* z" A8 e/ H2 C$ H( X* A
/ d. q0 Y6 Y+ p7 P; x0 M+ _! ~' m8 y/ c# volecity( z# x' D% A- n% A- Z9 G6 h
ds = model.get_dataset(varnames=['U', 'V'], k_levels=[0], type='latlon',
5 d( k/ G! S) i iter_start=model.iter_start,- N& R) J/ P( R% ?. `
iter_stop=(model.iter_start + model.iter_step),
; T& o9 U: c5 ^3 H' G" n7 ? read_grid=True)
4 A& s% O4 C4 K; r" n
* w) {% G/ v4 Q+ }# Normal gridding2 E F" J9 ^, b) h5 l8 b& |5 L( l$ q
import xgcm6 }1 v3 w# c7 w; V5 I4 r) l3 v
grid = xgcm.Grid(ds, periodic=['X'])
/ ^. E# r& h# m" V7 Q$ N I
7 G+ X& h# ]" t2 k3 x# Calculate vorticity
1 W ~! a8 C8 H0 k2 Ezeta = (-grid.diff(ds.U * ds.dxC, 'Y', boundary='fill') + grid.diff(ds.V * ds.dyC, 'X'))/ds.rAz) I& u& f3 y2 x; J" L- B2 I% S
zeta = zeta.squeeze().rename('vorticity').reset_coords(drop=True)/ [( l; J2 _8 n# K4 w+ |/ n% Z
9 C$ V6 @3 I) V. }
# load data& r D5 {) _; k7 P8 z4 L
zeta.load(). L3 m% u4 z& v4 y9 v9 ^
% x0 B4 E: b) b# Show
, }4 ?" g% x0 [# Tdataset = hv.Dataset(zeta)
) h! t8 M2 \! D; S, Ohv_im = (dataset.to(hv.Image, ['i_g', 'j_g'])
1 T4 o8 t: R& J6 \ .options(cmap='RdBu_r', width=950, height=600, colorbar=True, symmetric=True))% a" G, A5 E0 c6 e: v; X0 L5 s8 q
5 e5 m& E$ O9 f
regrid(hv_im, precompute=True)
' a( @+ Z9 | ?- p) [. h; \" q扩展:云虽然 ECCO 门户实现了数据自由访问,但它的带宽有限,国内用户往往难以正常访问。虽然它适合交互探索,但如果想实际处理PB级别的数据,它可能无法提供足够的网络支持。 商业云存储(例如 Amazon S3 或 Google Cloud Storage)具备两全其美的优势。它既可公开访问,又具有极大的数据处理能力。 目前大量的地学大数据已经存储于云端,并可以通过Pangeo进行操作,这其中就包含LLC4320模式。 后面我将介绍云计算平台Pangeo。
; c" ]. Z6 d7 o% P% y
7 x* B$ {3 Y |2 j0 H
8 _- \& {$ v7 ?& y
, [# J r) o8 p; c8 W2 M% B% x/ J0 H Q; ^ m8 X
; N9 l" Q: d7 n. R5 Q! X
|