|
LLC4320模式简介 LLC4320是MITgcm 1/48°全球海洋模式,其诞生的直接原因是为即将到来的SWOT任务提供高分辨率的全球海洋模拟。 LLC4320模式在多个方面具有开创性,特别是其高空间分辨率(全球分辨率在 1 到 2 公里之间)、潮汐驱动、高频(每小时)输出,其海面高度信号中包含了内潮、内波、地转平衡等信号。除了在SWOT相关工作取得应用之外,该模式也在海洋亚中尺度、内波等研究方向得到了广泛应用。
6 b3 D. v8 q6 a" u$ \# j
该模式主要特征是: 3 c& b, k, K$ F' c7 {
- • 全球覆盖(包含极地)
- • 垂向90层
- • 分辨率1/48°
- • 全球海洋分成13个face,每个face的网格数为4320*4320
- • 时间采样是1小时,总计时间维度9030
- • 共14 个月(2011 年 9 月至 2012 年 11 月)
- • 数据量巨大,PB级别
- • 以MDS自定义二进制数据格式存储,为MITgcm独有
- • 模型网格复杂,为lat-lon-cap (LLC) 曲线网格 ,很难在常规地图投影中可视化。
l+ z2 n. |' P% X$ b X
在数据发布之初,该数据集存储在高度安全的NASA超级计算机上,只有获得NASA资助的研究人员才能访问。 后来,NASA Ames研究中心创建数据共享网站(https://data.nas.nasa.gov/ecco/),开放了LLC4320数据。任何人都可以通过互联网访问数据。在此网站上,您可以单击下载单个大小40GB的二进制文件。除非您知道如何解码其中的内容,否则这些文件毫无用处。& Y) H5 [% l. c* z
# S% t+ w( e0 S; |9 D5 X7 f! I/ z
xmitgcm.llcreaderxmitgcm 是一个 python 包,可以将 MITgcm 二进制 MDS 文件读入 xarray 结构。通过 dask,xmitgcm可以实现并行计算。
为了使二进制数据方便利用,Ryan Abernathey等开发了xmitgcm的python包,其中llcreader用于读取这些二进制文件。该模块使用xarray和dask从ECCO数据门户网站在线访问数据,使模式大数据的操作变得轻而易举。 . I R# T: B8 z. i2 q% E& c
海面温度读取示例
: l* T, c. d1 ^% M以海面温度读取为例,展示其基本操作。用到了如下库: - • xmitgcm: 提供llcreader
- • xarray: 基本数据结构和操作
- • dask: 大数据并行和lazy计算
- • sholoviews: 交互式的图像展示
$ u! ?0 @9 P6 [# C& K 1 导入库$ _+ p z( N7 m* K7 O
9 Y7 Q6 v# v- z6 bimport xmitgcm.llcreader as llcreader
) d5 p4 r* h% n8 C" Y# Q" q%matplotlib inline
0 a# L: C" D. a4 f: b9 U; Wimport holoviews as hv
# y; {! x/ t' z) P% Xfrom holoviews.operation.datashader import regrid
( q- B8 c/ Q7 j; Vhv.extension('bokeh')
6 U( U9 d) n& v5 L/ J5 D8 }9 _2 D9 L. j/ W5 P. s, G' i1 Y; e
2 初始化这里我们使用LLC4320模式数据: model = llcreader.ECCOPortalLLC4320Model()4 B# h7 ]( V7 X# x
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 Austin5 J9 P# P& n; ]5 Q" ]
3 海表温度参数设置
& G4 V/ G, H- R+ E; m. z
g+ g; t" M9 wds_sst = model.get_dataset(varnames=['Theta'], k_levels=[0], type='latlon'); B1 \3 E t. V9 r
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')
7 M: `; K& L* g
' _ F. K; A1 \8 J/ l% ^
4 动态交互可视化
/ h) x% p8 l! r% V. |4 F7 i9 d# U
dataset = hv.Dataset(ds_sst.Theta.isel(k=0).astype('f4'))
0 x2 U9 D& e+ W8 b- i- y' ?4 y( qhv_im = (dataset.to(hv.Image, ['i', 'j'], dynamic=True)1 N9 ~: u- l, B
.options(cmap='Magma', width=950, height=600, colorbar=True))# K5 A8 |9 {% E. b. [
+ f2 _& d0 v) }4 L" c
%output holomap='scrubber' fps=3
2 d1 q: X9 R/ l7 Wregrid(hv_im, precompute=True)上图是南非Aghulhas Rings,可以看到强大的洋流和丰富的中小尺度涡旋。下图作为对比是LLC2160的结果,和4320的分辨能力比较有一定差距。 + n7 j. z# t* e6 r- H) I
涡度计算示例下面展示LLC4320涡度计算步骤。 model = llcreader.ECCOPortalLLC4320Model()6 J( O d& ~8 I2 n" h8 w: S
print(model)
1 I6 ]# S% |2 u- x f3 G8 h, r' n2 m4 D" i3 q) h4 s0 N
# volecity
+ d( E) n0 u) d2 l4 i7 uds = model.get_dataset(varnames=['U', 'V'], k_levels=[0], type='latlon',
& h" c; K5 Z8 o% d# y iter_start=model.iter_start,% r5 e: }& ?1 @ v8 o& v) s+ {
iter_stop=(model.iter_start + model.iter_step),
1 f; O6 o3 g7 P) F! |- ?: Q O read_grid=True). x# t+ v3 i& b& B( {! x
" c/ |8 z: ~/ x0 N! ^" t# Normal gridding
/ g) V8 W; H# I/ X* ?import xgcm
. G6 b, O8 p. C$ L5 q/ cgrid = xgcm.Grid(ds, periodic=['X'])8 f6 B8 i) X& r! N
2 C8 U2 R f; d" E$ h$ F# Calculate vorticity& M% E# m% s2 `0 I" w D
zeta = (-grid.diff(ds.U * ds.dxC, 'Y', boundary='fill') + grid.diff(ds.V * ds.dyC, 'X'))/ds.rAz
2 X* T# c# c! i" U# v! Tzeta = zeta.squeeze().rename('vorticity').reset_coords(drop=True)
4 \, `8 w+ [5 `
0 d. X+ X2 F; ~' k1 }# load data; x1 p! c% N# }
zeta.load()7 L7 z1 [* G! o( L
- e; \* U) s9 h9 x! O
# Show' x7 j- I' p! P7 h
dataset = hv.Dataset(zeta)
5 I0 i" j6 c7 F( ^: }6 ~hv_im = (dataset.to(hv.Image, ['i_g', 'j_g'])
% E3 f$ `1 A6 k9 ~4 j& x5 i1 v/ t' M7 w .options(cmap='RdBu_r', width=950, height=600, colorbar=True, symmetric=True))4 | F u4 q& S4 A) b
8 t6 {- p, y9 ^2 Y; n O- u; X
regrid(hv_im, precompute=True)
# c) i5 e5 D, F: P扩展:云虽然 ECCO 门户实现了数据自由访问,但它的带宽有限,国内用户往往难以正常访问。虽然它适合交互探索,但如果想实际处理PB级别的数据,它可能无法提供足够的网络支持。 商业云存储(例如 Amazon S3 或 Google Cloud Storage)具备两全其美的优势。它既可公开访问,又具有极大的数据处理能力。 目前大量的地学大数据已经存储于云端,并可以通过Pangeo进行操作,这其中就包含LLC4320模式。 后面我将介绍云计算平台Pangeo。
7 T/ W. _3 D- u! R! c
+ E* R6 Z. ~4 s% H; I6 A" n
+ p6 O; k" d7 |- r' u1 f7 W, I& J3 A/ a9 s/ D C2 d3 Q
5 [& Y0 ~3 K; R& k3 R. P- J
+ S7 |7 u$ J$ v+ n
|