|
LLC4320模式简介 LLC4320是MITgcm 1/48°全球海洋模式,其诞生的直接原因是为即将到来的SWOT任务提供高分辨率的全球海洋模拟。 LLC4320模式在多个方面具有开创性,特别是其高空间分辨率(全球分辨率在 1 到 2 公里之间)、潮汐驱动、高频(每小时)输出,其海面高度信号中包含了内潮、内波、地转平衡等信号。除了在SWOT相关工作取得应用之外,该模式也在海洋亚中尺度、内波等研究方向得到了广泛应用。
; o y% p" l* b7 W- K. |
该模式主要特征是:
' r4 C+ Z# |: A6 E. D4 x
- • 全球覆盖(包含极地)
- • 垂向90层
- • 分辨率1/48°
- • 全球海洋分成13个face,每个face的网格数为4320*4320
- • 时间采样是1小时,总计时间维度9030
- • 共14 个月(2011 年 9 月至 2012 年 11 月)
- • 数据量巨大,PB级别
- • 以MDS自定义二进制数据格式存储,为MITgcm独有
- • 模型网格复杂,为lat-lon-cap (LLC) 曲线网格 ,很难在常规地图投影中可视化。0 _' B4 D% `6 w1 o
在数据发布之初,该数据集存储在高度安全的NASA超级计算机上,只有获得NASA资助的研究人员才能访问。 后来,NASA Ames研究中心创建数据共享网站(https://data.nas.nasa.gov/ecco/),开放了LLC4320数据。任何人都可以通过互联网访问数据。在此网站上,您可以单击下载单个大小40GB的二进制文件。除非您知道如何解码其中的内容,否则这些文件毫无用处。. N+ H1 p. ?7 H8 h" `/ D M
6 _. k: d5 [9 i2 u4 B xmitgcm.llcreaderxmitgcm 是一个 python 包,可以将 MITgcm 二进制 MDS 文件读入 xarray 结构。通过 dask,xmitgcm可以实现并行计算。
为了使二进制数据方便利用,Ryan Abernathey等开发了xmitgcm的python包,其中llcreader用于读取这些二进制文件。该模块使用xarray和dask从ECCO数据门户网站在线访问数据,使模式大数据的操作变得轻而易举。 / p1 J2 o7 I4 i J$ P0 h' k" H* G
海面温度读取示例+ x, y0 B3 W' t" {
以海面温度读取为例,展示其基本操作。用到了如下库: - • xmitgcm: 提供llcreader
- • xarray: 基本数据结构和操作
- • dask: 大数据并行和lazy计算
- • sholoviews: 交互式的图像展示
1 i( o! O. V/ o+ k 1 导入库% V* u3 c' M; W. @
& Z# u( M* Y% F9 j& G* f; c iimport xmitgcm.llcreader as llcreader
" T* c& b- l) \# H) Z%matplotlib inline2 D* T! O d) P
import holoviews as hv
+ p! w& a* h5 O t8 ffrom holoviews.operation.datashader import regrid* n6 r1 {7 F3 o2 c3 [. M6 X
hv.extension('bokeh')9 d( i' O) v* |; g
: ]2 g! B& T+ i. H2 初始化这里我们使用LLC4320模式数据: model = llcreader.ECCOPortalLLC4320Model()5 t- P& p! V0 @- D0 x' `( l
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 Austin4 l4 p& q, R1 m* ^% R
3 海表温度参数设置5 I/ E( }/ U% ~* H
3 E1 Z$ _# B9 P8 }/ y% t
ds_sst = model.get_dataset(varnames=['Theta'], k_levels=[0], type='latlon')+ n- M' c/ X% r3 ?0 q8 }0 N
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')
% q8 N, c( v* h
5 I+ Z, y9 Y' F9 q# s/ m# b! U
4 动态交互可视化
" ]- c) z" h/ ^6 S6 i
8 r# R+ J8 a8 I8 }dataset = hv.Dataset(ds_sst.Theta.isel(k=0).astype('f4'))* L" ^0 R! O4 ]6 `
hv_im = (dataset.to(hv.Image, ['i', 'j'], dynamic=True)# ]% K. s4 m% @+ E
.options(cmap='Magma', width=950, height=600, colorbar=True))5 [2 ~, N r$ k$ M8 O: M
, b7 [0 ]! x. t" v; P%output holomap='scrubber' fps=3
5 j! M/ i) x( o9 S% T( mregrid(hv_im, precompute=True)上图是南非Aghulhas Rings,可以看到强大的洋流和丰富的中小尺度涡旋。下图作为对比是LLC2160的结果,和4320的分辨能力比较有一定差距。 ; i Q, |% G" R, g7 r
涡度计算示例下面展示LLC4320涡度计算步骤。 model = llcreader.ECCOPortalLLC4320Model()
3 j/ o5 s( F, N8 H/ Y5 pprint(model)
& [5 D. O$ B( ]9 h
9 O! `% q( O( z+ ^( @# volecity
' j# c9 h) F R0 u4 F4 fds = model.get_dataset(varnames=['U', 'V'], k_levels=[0], type='latlon',: N) f9 n1 p, y( W: J
iter_start=model.iter_start,
5 ?* o) w1 L5 ] iter_stop=(model.iter_start + model.iter_step),
1 M" u3 m2 N6 c' M& S# o read_grid=True)
! [0 E# H5 l5 q0 C& u- z& i, f
! y0 P3 U3 K; \+ A) o1 U9 }. t9 `# Normal gridding5 V2 J$ `+ W; k- ?6 c; p2 \) f; j K
import xgcm' y2 h8 N W; `3 M- y1 M/ e( x
grid = xgcm.Grid(ds, periodic=['X'])
4 I" t8 }, T/ L- c- _) q8 \ G. K5 c% k0 b4 b$ J5 y
# Calculate vorticity
% Z- ] \2 s5 { m% U* Ezeta = (-grid.diff(ds.U * ds.dxC, 'Y', boundary='fill') + grid.diff(ds.V * ds.dyC, 'X'))/ds.rAz
. u: D5 l. |+ c$ T1 R2 C3 Ezeta = zeta.squeeze().rename('vorticity').reset_coords(drop=True)
5 q% r2 N8 z* A8 z1 e
% Z6 w! A c7 o8 x+ x7 y- p+ F# load data/ [6 O/ ~- M; U, b& Q1 A0 |* U5 G. ~
zeta.load()
" u4 @8 K6 y% A, m6 b0 S
) q. |9 Q; ^) U6 x" ?4 Q Z# Show; T o; ^8 f& s) F, h+ Z
dataset = hv.Dataset(zeta)6 O9 b2 v9 a, w' f y+ L
hv_im = (dataset.to(hv.Image, ['i_g', 'j_g']); O/ T; d1 k7 z5 e7 O
.options(cmap='RdBu_r', width=950, height=600, colorbar=True, symmetric=True))
, {" U, Z( E1 u& A9 b: K3 K( ^3 y0 y b+ B$ @
regrid(hv_im, precompute=True)- x% H% g7 x4 _, Z' D1 X, `
扩展:云虽然 ECCO 门户实现了数据自由访问,但它的带宽有限,国内用户往往难以正常访问。虽然它适合交互探索,但如果想实际处理PB级别的数据,它可能无法提供足够的网络支持。 商业云存储(例如 Amazon S3 或 Google Cloud Storage)具备两全其美的优势。它既可公开访问,又具有极大的数据处理能力。 目前大量的地学大数据已经存储于云端,并可以通过Pangeo进行操作,这其中就包含LLC4320模式。 后面我将介绍云计算平台Pangeo。
4 |# Q3 e: C, |% T, s3 V: t
2 t; V- ~7 i9 K4 Y$ y) ]/ K4 \
/ {8 W0 F9 P8 |. l5 p
0 Q( I" [$ x g( o2 n- e+ o. l/ s. ?' }+ B) j2 n2 r7 U
7 N' y2 X2 b7 w/ _: o# v6 `
|