|
LLC4320模式简介 LLC4320是MITgcm 1/48°全球海洋模式,其诞生的直接原因是为即将到来的SWOT任务提供高分辨率的全球海洋模拟。 LLC4320模式在多个方面具有开创性,特别是其高空间分辨率(全球分辨率在 1 到 2 公里之间)、潮汐驱动、高频(每小时)输出,其海面高度信号中包含了内潮、内波、地转平衡等信号。除了在SWOT相关工作取得应用之外,该模式也在海洋亚中尺度、内波等研究方向得到了广泛应用。 ( z4 O+ O& c9 e& w# z( k+ Y% }6 r
该模式主要特征是:
1 j4 {7 ]' \3 t# D5 k) h
- • 全球覆盖(包含极地)
- • 垂向90层
- • 分辨率1/48°
- • 全球海洋分成13个face,每个face的网格数为4320*4320
- • 时间采样是1小时,总计时间维度9030
- • 共14 个月(2011 年 9 月至 2012 年 11 月)
- • 数据量巨大,PB级别
- • 以MDS自定义二进制数据格式存储,为MITgcm独有
- • 模型网格复杂,为lat-lon-cap (LLC) 曲线网格 ,很难在常规地图投影中可视化。7 F4 Y2 ~1 d( {" {7 G
在数据发布之初,该数据集存储在高度安全的NASA超级计算机上,只有获得NASA资助的研究人员才能访问。 后来,NASA Ames研究中心创建数据共享网站(https://data.nas.nasa.gov/ecco/),开放了LLC4320数据。任何人都可以通过互联网访问数据。在此网站上,您可以单击下载单个大小40GB的二进制文件。除非您知道如何解码其中的内容,否则这些文件毫无用处。/ q- |9 h7 E) V5 `# B+ g+ J
, G+ F5 S$ ?! k% Q xmitgcm.llcreaderxmitgcm 是一个 python 包,可以将 MITgcm 二进制 MDS 文件读入 xarray 结构。通过 dask,xmitgcm可以实现并行计算。
为了使二进制数据方便利用,Ryan Abernathey等开发了xmitgcm的python包,其中llcreader用于读取这些二进制文件。该模块使用xarray和dask从ECCO数据门户网站在线访问数据,使模式大数据的操作变得轻而易举。
, t2 R* _/ `7 }$ w 海面温度读取示例
2 M8 r1 }* O) z以海面温度读取为例,展示其基本操作。用到了如下库: - • xmitgcm: 提供llcreader
- • xarray: 基本数据结构和操作
- • dask: 大数据并行和lazy计算
- • sholoviews: 交互式的图像展示
5 b! q9 ^" e6 L/ C 1 导入库
' A* v( c; ]4 ?8 a2 ?
5 ^( C$ |' {; i# w+ L' z1 U9 Uimport xmitgcm.llcreader as llcreader* i! z9 R4 o4 n# @1 A1 I0 E, w
%matplotlib inline
% Q7 E. P& ], `- T6 e9 `- Kimport holoviews as hv% P3 f. ^6 w; i) Z+ |
from holoviews.operation.datashader import regrid
8 M+ w! }# g) f7 w1 W; X5 O$ \hv.extension('bokeh')( U2 S( Q/ x. |3 {$ l# ~& K( r
2 v, r0 C1 P7 T" H. Q2 初始化这里我们使用LLC4320模式数据: model = llcreader.ECCOPortalLLC4320Model()+ O1 W3 X4 d: v2 E3 H F! 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
! A0 [' y2 s* F, M 3 海表温度参数设置
" y$ k2 A( L* S7 a( L- H3 Y; U3 f# V4 j1 W& `
ds_sst = model.get_dataset(varnames=['Theta'], k_levels=[0], type='latlon')& Y& q& {" h# p7 @
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')) Z. R+ T* p( N8 ~
, R4 j0 s- O: q: \ 4 动态交互可视化5 ^% p x4 Z: J1 d
/ @& s2 d7 M0 b; o) W1 {
dataset = hv.Dataset(ds_sst.Theta.isel(k=0).astype('f4'))1 N) x/ Q% N$ H( W3 N
hv_im = (dataset.to(hv.Image, ['i', 'j'], dynamic=True)
. e8 e. x6 z# \( j: S, [ .options(cmap='Magma', width=950, height=600, colorbar=True)); J% F; N3 g+ j1 @6 p6 Q. d
, @/ D* e9 F- m; g0 y0 k% p4 R5 K%output holomap='scrubber' fps=3
' M d4 e9 }! H, E+ gregrid(hv_im, precompute=True)上图是南非Aghulhas Rings,可以看到强大的洋流和丰富的中小尺度涡旋。下图作为对比是LLC2160的结果,和4320的分辨能力比较有一定差距。
5 K- n! J: M0 I9 Q" b& }涡度计算示例下面展示LLC4320涡度计算步骤。 model = llcreader.ECCOPortalLLC4320Model()
9 K) _3 F5 B# Y- k6 Rprint(model)" ]2 C: K' U% r m% n# j" e
+ v$ G: J4 s) Y
# volecity( O- h/ S% ]- X
ds = model.get_dataset(varnames=['U', 'V'], k_levels=[0], type='latlon',
! C6 M) r0 J# \8 [ M iter_start=model.iter_start,
' L7 W; U# N# N( ]0 I! G5 K iter_stop=(model.iter_start + model.iter_step)," ~ ?9 e4 x9 a6 R4 n
read_grid=True)
% T! d$ z! }. K7 t7 n% ^5 k+ ~" x: }1 E7 b
# Normal gridding
+ l% r" z( j8 J2 }import xgcm2 B. S( z1 P7 h5 W1 p9 b! W7 Z4 Q
grid = xgcm.Grid(ds, periodic=['X'])
; ]# Q3 O1 `! ^9 \
$ r6 w' Z& v3 X8 z- J* a; Y3 n# Calculate vorticity( h! G) X% i7 R. W) N0 d: @; f
zeta = (-grid.diff(ds.U * ds.dxC, 'Y', boundary='fill') + grid.diff(ds.V * ds.dyC, 'X'))/ds.rAz" y, y2 a! c! E: k
zeta = zeta.squeeze().rename('vorticity').reset_coords(drop=True)
% j/ \8 _5 p+ e) X+ H) y+ s7 |3 ?
' w/ C* s) ?7 S* P# load data
1 G% y/ ~! J. p! I4 ?% t; j- @3 N {zeta.load()* W9 N2 e# S9 N( ~
+ V! C! I6 l$ U Z, ^* l# Show
& Q1 y& X) f" B( D% Q# b: Idataset = hv.Dataset(zeta)# [9 V5 ]) R: _
hv_im = (dataset.to(hv.Image, ['i_g', 'j_g'])
- w, [- a+ _! O2 ]+ ~) t .options(cmap='RdBu_r', width=950, height=600, colorbar=True, symmetric=True))3 |( a9 N' \9 @" o$ Q: T
0 o# q* [# t$ h$ j1 V# X2 F1 I1 Mregrid(hv_im, precompute=True) D0 h( @. v! G
扩展:云虽然 ECCO 门户实现了数据自由访问,但它的带宽有限,国内用户往往难以正常访问。虽然它适合交互探索,但如果想实际处理PB级别的数据,它可能无法提供足够的网络支持。 商业云存储(例如 Amazon S3 或 Google Cloud Storage)具备两全其美的优势。它既可公开访问,又具有极大的数据处理能力。 目前大量的地学大数据已经存储于云端,并可以通过Pangeo进行操作,这其中就包含LLC4320模式。 后面我将介绍云计算平台Pangeo。 4 D. x; }: T' A1 q9 [$ }
0 ^ A( u& v- g( `& Z
, |! e8 i! C. S: z7 V9 F+ Z3 T7 P: s2 K( e" M* t K4 s) W' U
7 O8 R# K; `$ d1 a3 @) l- m
3 j' F! ]# ?) P' R( J) ~% R$ q
|