|
LLC4320模式简介 LLC4320是MITgcm 1/48°全球海洋模式,其诞生的直接原因是为即将到来的SWOT任务提供高分辨率的全球海洋模拟。 LLC4320模式在多个方面具有开创性,特别是其高空间分辨率(全球分辨率在 1 到 2 公里之间)、潮汐驱动、高频(每小时)输出,其海面高度信号中包含了内潮、内波、地转平衡等信号。除了在SWOT相关工作取得应用之外,该模式也在海洋亚中尺度、内波等研究方向得到了广泛应用。
( N( q9 m. d1 ]5 e
该模式主要特征是: & m* `4 S" W1 U' w" g
- • 全球覆盖(包含极地)
- • 垂向90层
- • 分辨率1/48°
- • 全球海洋分成13个face,每个face的网格数为4320*4320
- • 时间采样是1小时,总计时间维度9030
- • 共14 个月(2011 年 9 月至 2012 年 11 月)
- • 数据量巨大,PB级别
- • 以MDS自定义二进制数据格式存储,为MITgcm独有
- • 模型网格复杂,为lat-lon-cap (LLC) 曲线网格 ,很难在常规地图投影中可视化。3 C5 X# o& B# T' K1 B+ t9 r
在数据发布之初,该数据集存储在高度安全的NASA超级计算机上,只有获得NASA资助的研究人员才能访问。 后来,NASA Ames研究中心创建数据共享网站(https://data.nas.nasa.gov/ecco/),开放了LLC4320数据。任何人都可以通过互联网访问数据。在此网站上,您可以单击下载单个大小40GB的二进制文件。除非您知道如何解码其中的内容,否则这些文件毫无用处。3 p- f5 U, S. `. f( q$ G8 E
; V- m- ]# L% p xmitgcm.llcreaderxmitgcm 是一个 python 包,可以将 MITgcm 二进制 MDS 文件读入 xarray 结构。通过 dask,xmitgcm可以实现并行计算。
为了使二进制数据方便利用,Ryan Abernathey等开发了xmitgcm的python包,其中llcreader用于读取这些二进制文件。该模块使用xarray和dask从ECCO数据门户网站在线访问数据,使模式大数据的操作变得轻而易举。
9 n) @) B- S, ^# _0 j 海面温度读取示例- X! F5 V, Z3 M: V8 d
以海面温度读取为例,展示其基本操作。用到了如下库: - • xmitgcm: 提供llcreader
- • xarray: 基本数据结构和操作
- • dask: 大数据并行和lazy计算
- • sholoviews: 交互式的图像展示& L: b0 | _0 \5 D4 }. A4 @# n
1 导入库$ _9 W$ ^3 Y3 o% @
5 q9 w6 P$ U1 w6 k) n
import xmitgcm.llcreader as llcreader. T% O* X) y/ |6 Z% A3 k! F
%matplotlib inline
0 \8 {3 O% u9 e# T) ~' v: W$ ]1 Simport holoviews as hv
- F7 ?- u3 b- G) _7 ]2 i6 ]from holoviews.operation.datashader import regrid$ Z5 {8 p! L9 F
hv.extension('bokeh')
2 ]6 [5 h* O" J7 [3 w. N+ s" Q
9 J3 x, Z1 h; ]" ~: S2 初始化这里我们使用LLC4320模式数据: model = llcreader.ECCOPortalLLC4320Model(), I, m& ] g `5 |9 I
model根据数据分辨率和来源,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
( x+ i) b$ O" T3 I: {% {( w 3 海表温度参数设置6 s) C( X8 t* X! u8 R! P, n9 t
) q, \( l; L& ?! C; D
ds_sst = model.get_dataset(varnames=['Theta'], k_levels=[0], type='latlon')) x' e |% E, |/ d6 C6 Z
ds_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')3 z( \) q7 i/ V+ |) t
8 d* k) r( u3 R9 w) N1 p
4 动态交互可视化
) `, p2 ^: b5 k
3 ]( ]' }3 ^0 q& ~* L9 ydataset = hv.Dataset(ds_sst.Theta.isel(k=0).astype('f4'))4 `+ ^# A n# F% s- V
hv_im = (dataset.to(hv.Image, ['i', 'j'], dynamic=True) P( O e! P5 G1 L+ e9 X* `
.options(cmap='Magma', width=950, height=600, colorbar=True))
/ e- z* c; P7 W6 \( `" I f
' u/ P9 ?# q# `, D# G# M8 W%output holomap='scrubber' fps=3
& I8 q, C& h) zregrid(hv_im, precompute=True)上图是南非Aghulhas Rings,可以看到强大的洋流和丰富的中小尺度涡旋。下图作为对比是LLC2160的结果,和4320的分辨能力比较有一定差距。
2 v2 u# h+ x: D' b1 d ~涡度计算示例下面展示LLC4320涡度计算步骤。 model = llcreader.ECCOPortalLLC4320Model()
4 K' {; t3 R( W% M7 Oprint(model)3 G) L" q U, a' N* V7 p
+ m7 S" f. G! u0 f7 q$ r
# volecity
8 u. E9 {& r2 vds = model.get_dataset(varnames=['U', 'V'], k_levels=[0], type='latlon',
! [0 H/ h( U0 K" o& Z iter_start=model.iter_start," Y- |7 }4 k0 N
iter_stop=(model.iter_start + model.iter_step),7 ]" S& f* e, s0 m
read_grid=True)
. B4 t6 k" J0 b- i8 Q' m/ u' X
, i9 R/ ?2 i: s7 P q# Normal gridding
* O9 A4 x' q. Y0 { W) u) d) dimport xgcm
. q. Z/ r2 g* v! [4 v! E7 Ngrid = xgcm.Grid(ds, periodic=['X'])
) K+ H( J* w4 n0 |& ~0 r6 Y3 K; \8 C& l3 H0 x! H) s
# Calculate vorticity3 _3 n$ j# ?7 w$ }) g* Q" s
zeta = (-grid.diff(ds.U * ds.dxC, 'Y', boundary='fill') + grid.diff(ds.V * ds.dyC, 'X'))/ds.rAz
& C* M5 R' l: x4 Q$ F; q" rzeta = zeta.squeeze().rename('vorticity').reset_coords(drop=True)% j! p9 |$ Z4 c
8 \& X- ^% L2 H- T' S3 W7 }
# load data2 m. P- m {$ [& @/ m6 j& R5 S5 ]
zeta.load()5 `" V# e& E1 n/ y
& d U& l9 N, n0 l$ s' x/ k# Show+ y6 e, i* n/ G* d. f$ r/ k3 \
dataset = hv.Dataset(zeta)2 X0 E3 O* D) z9 a! V- |
hv_im = (dataset.to(hv.Image, ['i_g', 'j_g'])
4 X; U, L, [- i7 v1 `8 N .options(cmap='RdBu_r', width=950, height=600, colorbar=True, symmetric=True))
9 g+ }5 h( h+ G+ z# \. f9 e& w$ ?; z; R; [
regrid(hv_im, precompute=True)% `# i" F% a4 R% _ r. P# U
扩展:云虽然 ECCO 门户实现了数据自由访问,但它的带宽有限,国内用户往往难以正常访问。虽然它适合交互探索,但如果想实际处理PB级别的数据,它可能无法提供足够的网络支持。 商业云存储(例如 Amazon S3 或 Google Cloud Storage)具备两全其美的优势。它既可公开访问,又具有极大的数据处理能力。 目前大量的地学大数据已经存储于云端,并可以通过Pangeo进行操作,这其中就包含LLC4320模式。 后面我将介绍云计算平台Pangeo。
! ~: v {, _8 J1 U; @+ z; B1 O9 Y5 d
; d$ Y7 H: U: Q8 l, h+ A1 E
* @& ^5 d: \& u# P$ m
5 f$ N: r; Y3 X' z$ d. x- N1 D* r* E, M7 ~$ C: h: I4 z
5 h1 ^: C; E" F; ^6 W
|