LLC4320模式简介 LLC4320是MITgcm 1/48°全球海洋模式,其诞生的直接原因是为即将到来的SWOT任务提供高分辨率的全球海洋模拟。 LLC4320模式在多个方面具有开创性,特别是其高空间分辨率(全球分辨率在 1 到 2 公里之间)、潮汐驱动、高频(每小时)输出,其海面高度信号中包含了内潮、内波、地转平衡等信号。除了在SWOT相关工作取得应用之外,该模式也在海洋亚中尺度、内波等研究方向得到了广泛应用。 ' F! }0 U5 m; u+ I) S
该模式主要特征是:
* ?5 m8 n( Y% W0 c4 D1 m" I* z" |
- • 全球覆盖(包含极地)
- • 垂向90层
- • 分辨率1/48°
- • 全球海洋分成13个face,每个face的网格数为4320*4320
- • 时间采样是1小时,总计时间维度9030
- • 共14 个月(2011 年 9 月至 2012 年 11 月)
- • 数据量巨大,PB级别
- • 以MDS自定义二进制数据格式存储,为MITgcm独有
- • 模型网格复杂,为lat-lon-cap (LLC) 曲线网格 ,很难在常规地图投影中可视化。# e- i% D+ i9 E/ l1 j& ~
在数据发布之初,该数据集存储在高度安全的NASA超级计算机上,只有获得NASA资助的研究人员才能访问。 后来,NASA Ames研究中心创建数据共享网站(https://data.nas.nasa.gov/ecco/),开放了LLC4320数据。任何人都可以通过互联网访问数据。在此网站上,您可以单击下载单个大小40GB的二进制文件。除非您知道如何解码其中的内容,否则这些文件毫无用处。
% e( I! b0 c. r& c1 W
' h* N' ~ A6 z5 I xmitgcm.llcreaderxmitgcm 是一个 python 包,可以将 MITgcm 二进制 MDS 文件读入 xarray 结构。通过 dask,xmitgcm可以实现并行计算。
为了使二进制数据方便利用,Ryan Abernathey等开发了xmitgcm的python包,其中llcreader用于读取这些二进制文件。该模块使用xarray和dask从ECCO数据门户网站在线访问数据,使模式大数据的操作变得轻而易举。 : M: a4 Y( @1 u8 {" q2 i
海面温度读取示例
, f' Y5 D+ Z6 |& H9 `" W- Q4 `1 O以海面温度读取为例,展示其基本操作。用到了如下库: - • xmitgcm: 提供llcreader
- • xarray: 基本数据结构和操作
- • dask: 大数据并行和lazy计算
- • sholoviews: 交互式的图像展示' \% z# _8 i1 M2 j4 q4 K
1 导入库0 Z0 D3 y6 P: y0 B% T
) A2 o& T _) i3 B
import xmitgcm.llcreader as llcreader
6 i; Q7 l: ^/ u) U* E%matplotlib inline
+ U' q& G- v: }) Mimport holoviews as hv
: g( p J4 {# H3 w8 k, l# Vfrom holoviews.operation.datashader import regrid
- k V6 Y* p% z9 x0 S3 I: _6 g) |hv.extension('bokeh')6 h8 ~- c) W) I1 a7 `5 N: Z
$ l- N# E" u! S, {# q# j T" _
2 初始化这里我们使用LLC4320模式数据: model = llcreader.ECCOPortalLLC4320Model()
5 [" w$ Z j, n5 t& Hmodel根据数据分辨率和来源,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
$ v F* K! ^1 W* E: L 3 海表温度参数设置+ e, y l4 x8 a# D( `& k& E! d
2 c' n/ K" P* m; k' C
ds_sst = model.get_dataset(varnames=['Theta'], k_levels=[0], type='latlon') X; e* c( u6 \& e y
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')2 ^6 a) |( X. J! s% t5 a! @( a4 y
, C3 J) E. a/ [3 W9 n 4 动态交互可视化( \# S5 z* p6 U
7 @7 D1 x# @2 S' z1 ^
dataset = hv.Dataset(ds_sst.Theta.isel(k=0).astype('f4'))6 W9 o u6 U, r- z
hv_im = (dataset.to(hv.Image, ['i', 'j'], dynamic=True)8 ~7 V3 h( B/ k
.options(cmap='Magma', width=950, height=600, colorbar=True))
/ a" E* X/ j2 i2 V, t. J, r; p! w: J n* r# c" w+ Z
%output holomap='scrubber' fps=3
7 u7 e% z8 i# W/ r1 Kregrid(hv_im, precompute=True)上图是南非Aghulhas Rings,可以看到强大的洋流和丰富的中小尺度涡旋。下图作为对比是LLC2160的结果,和4320的分辨能力比较有一定差距。 ' @$ p7 b' \/ ]9 i5 x
涡度计算示例下面展示LLC4320涡度计算步骤。 model = llcreader.ECCOPortalLLC4320Model(): ], P$ w! q" B) g
print(model)
+ r3 U0 y! z# u9 H4 N+ B+ g+ k; S) ~
# volecity
# E1 r# Q; z4 G- W tds = model.get_dataset(varnames=['U', 'V'], k_levels=[0], type='latlon',
; C- M/ q* I) m2 c" O1 B iter_start=model.iter_start,
" R& g' g6 y$ g* S. y iter_stop=(model.iter_start + model.iter_step),3 \7 _4 d3 c" }
read_grid=True), J, v, d }! z& o: p+ V
j1 g; r+ J& v/ P- G n8 u
# Normal gridding
. f& L4 N0 u* {1 s, G' o+ w% _import xgcm9 l& \9 V: ~1 S. b) J! l' U! N+ C
grid = xgcm.Grid(ds, periodic=['X'])
, N/ U+ W W! D/ D
1 `' F* O% `" ?7 N$ g+ C$ H# Calculate vorticity1 @! s: P' k( `* A3 ?! b( S
zeta = (-grid.diff(ds.U * ds.dxC, 'Y', boundary='fill') + grid.diff(ds.V * ds.dyC, 'X'))/ds.rAz
3 p9 \8 `" |( h' A2 T1 ]2 Uzeta = zeta.squeeze().rename('vorticity').reset_coords(drop=True)
& N0 K g; C# n9 `5 f1 ?5 A( B5 |$ v3 p9 Y c
# load data, q" q" s7 a' t4 T5 b2 ]
zeta.load()& k4 b/ e! q$ ?6 R! E5 a) A
3 o. U7 Q9 M6 }% A
# Show( A5 P, H( Z0 |
dataset = hv.Dataset(zeta)
2 k( c; Z j8 p( o! rhv_im = (dataset.to(hv.Image, ['i_g', 'j_g'])4 C3 h; a( X7 T" B- s2 c( V# W
.options(cmap='RdBu_r', width=950, height=600, colorbar=True, symmetric=True))1 t' v# W* X) R3 T
7 S% M8 Q1 `3 [+ Wregrid(hv_im, precompute=True)
$ h& x0 e# g' m2 t; H扩展:云虽然 ECCO 门户实现了数据自由访问,但它的带宽有限,国内用户往往难以正常访问。虽然它适合交互探索,但如果想实际处理PB级别的数据,它可能无法提供足够的网络支持。 商业云存储(例如 Amazon S3 或 Google Cloud Storage)具备两全其美的优势。它既可公开访问,又具有极大的数据处理能力。 目前大量的地学大数据已经存储于云端,并可以通过Pangeo进行操作,这其中就包含LLC4320模式。 后面我将介绍云计算平台Pangeo。
; H; Z4 P4 T" `% B6 ], u2 [4 N9 ^: V3 L* B, X
6 V. z; G8 ?& J. p+ L, V; U% t: J, a2 Z B
: Z. ]6 s0 b6 `# L, H9 q& w6 \7 g |. o
|