|
LLC4320模式简介 LLC4320是MITgcm 1/48°全球海洋模式,其诞生的直接原因是为即将到来的SWOT任务提供高分辨率的全球海洋模拟。 LLC4320模式在多个方面具有开创性,特别是其高空间分辨率(全球分辨率在 1 到 2 公里之间)、潮汐驱动、高频(每小时)输出,其海面高度信号中包含了内潮、内波、地转平衡等信号。除了在SWOT相关工作取得应用之外,该模式也在海洋亚中尺度、内波等研究方向得到了广泛应用。 8 A' l) V' `* i
该模式主要特征是:
6 X0 g( n3 G( h3 ?% F) G$ I* k V
- • 全球覆盖(包含极地)
- • 垂向90层
- • 分辨率1/48°
- • 全球海洋分成13个face,每个face的网格数为4320*4320
- • 时间采样是1小时,总计时间维度9030
- • 共14 个月(2011 年 9 月至 2012 年 11 月)
- • 数据量巨大,PB级别
- • 以MDS自定义二进制数据格式存储,为MITgcm独有
- • 模型网格复杂,为lat-lon-cap (LLC) 曲线网格 ,很难在常规地图投影中可视化。' H& k; G% Z% M6 P
在数据发布之初,该数据集存储在高度安全的NASA超级计算机上,只有获得NASA资助的研究人员才能访问。 后来,NASA Ames研究中心创建数据共享网站(https://data.nas.nasa.gov/ecco/),开放了LLC4320数据。任何人都可以通过互联网访问数据。在此网站上,您可以单击下载单个大小40GB的二进制文件。除非您知道如何解码其中的内容,否则这些文件毫无用处。
. i* K5 t3 ^, S7 q E0 t! Q! }
$ T" Y1 N* @3 {+ } xmitgcm.llcreaderxmitgcm 是一个 python 包,可以将 MITgcm 二进制 MDS 文件读入 xarray 结构。通过 dask,xmitgcm可以实现并行计算。
为了使二进制数据方便利用,Ryan Abernathey等开发了xmitgcm的python包,其中llcreader用于读取这些二进制文件。该模块使用xarray和dask从ECCO数据门户网站在线访问数据,使模式大数据的操作变得轻而易举。
5 r! Z5 D' ~8 s. b 海面温度读取示例
# b2 o6 u0 f* f' J k以海面温度读取为例,展示其基本操作。用到了如下库: - • xmitgcm: 提供llcreader
- • xarray: 基本数据结构和操作
- • dask: 大数据并行和lazy计算
- • sholoviews: 交互式的图像展示& o6 Y$ P# U' q6 W( _' G
1 导入库
1 c I! G, g( L/ X# O' Q
# _/ s6 {" z* k! jimport xmitgcm.llcreader as llcreader& N6 A3 d2 S. `8 v" `# b$ e
%matplotlib inline; z- p# O8 C+ a/ s
import holoviews as hv
, O4 V# P) V9 M* d- F+ Ofrom holoviews.operation.datashader import regrid. j6 q+ q, e1 J9 E! b2 W; A8 Z
hv.extension('bokeh'): R! w) p& P& i' {0 J- e
' \" s c2 A/ D% x, V
2 初始化这里我们使用LLC4320模式数据: model = llcreader.ECCOPortalLLC4320Model()
+ w9 r0 T8 B) D* a9 Vmodel根据数据分辨率和来源,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 Austin1 H! f& |) s2 F( A2 Q- _
3 海表温度参数设置
. n; \9 E( ?& Q' f! P$ ?/ N8 Q
7 r5 s) _) R5 _( ~9 B5 zds_sst = model.get_dataset(varnames=['Theta'], k_levels=[0], type='latlon')
& [4 L! u3 {/ a; ]7 v) Z# p- u. ]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')
0 [7 a5 J( y R1 ]* n
, n7 m/ z4 h+ O3 [7 f1 [2 m2 N 4 动态交互可视化
3 o' E* G# p9 h5 Y9 D5 n2 w6 i- g5 v; I2 X" B2 p
dataset = hv.Dataset(ds_sst.Theta.isel(k=0).astype('f4'))
! W- Y* [5 X: s0 _4 J% Vhv_im = (dataset.to(hv.Image, ['i', 'j'], dynamic=True)9 t4 ~( t! I- e, x& c6 A
.options(cmap='Magma', width=950, height=600, colorbar=True))
' @8 p+ {$ ~4 m b2 d; j t, L9 l5 b* D+ n3 e/ |6 `
%output holomap='scrubber' fps=3
7 K3 ]+ G# B# B4 E' \' i; xregrid(hv_im, precompute=True)上图是南非Aghulhas Rings,可以看到强大的洋流和丰富的中小尺度涡旋。下图作为对比是LLC2160的结果,和4320的分辨能力比较有一定差距。 4 j0 ^* a1 W7 S, y
涡度计算示例下面展示LLC4320涡度计算步骤。 model = llcreader.ECCOPortalLLC4320Model()5 S9 Q: l) ^4 w* H0 e/ Q/ a
print(model)
; Q; @0 m1 z, W9 N6 l' C7 B
3 u+ j1 X, O% w# volecity
1 f' @6 C) J! N# rds = model.get_dataset(varnames=['U', 'V'], k_levels=[0], type='latlon',
5 B# @" B, P' A( C+ L iter_start=model.iter_start,! N6 o4 y2 H4 r& j# \& w
iter_stop=(model.iter_start + model.iter_step),% o1 n/ b+ {! T1 i, K6 t; J3 k
read_grid=True). E6 P: J. `: V6 J1 o, ^
* e9 c. q5 e9 }# Normal gridding0 ~' f+ r/ k$ E/ Y( r- G
import xgcm9 o, d9 X0 E) _$ a6 w
grid = xgcm.Grid(ds, periodic=['X']), ]7 L( o' A0 x' I( k
1 T, x' M5 ^+ f: P# Calculate vorticity7 V$ L% l- x* c0 D
zeta = (-grid.diff(ds.U * ds.dxC, 'Y', boundary='fill') + grid.diff(ds.V * ds.dyC, 'X'))/ds.rAz
, @( G! {3 P+ c0 P6 q3 U& ?9 s; o5 Uzeta = zeta.squeeze().rename('vorticity').reset_coords(drop=True)* Z% G8 @1 F+ R) Z7 T, A
7 f: }9 F2 |( _; X
# load data+ [3 i0 }9 {- _4 H& m% V
zeta.load()
, k7 e5 p6 T0 O$ H/ e
. n$ t/ U* [4 W/ E3 M& s# Show
3 q; y6 y$ N; O3 ^4 A& Idataset = hv.Dataset(zeta)9 G6 b3 X" ~4 I
hv_im = (dataset.to(hv.Image, ['i_g', 'j_g']): g p+ R+ q. t* Y
.options(cmap='RdBu_r', width=950, height=600, colorbar=True, symmetric=True))
; D7 ]2 u! \7 J' M
5 X3 M/ G% t8 |1 iregrid(hv_im, precompute=True)
5 C- W8 j4 a5 d. p1 `7 P, m扩展:云虽然 ECCO 门户实现了数据自由访问,但它的带宽有限,国内用户往往难以正常访问。虽然它适合交互探索,但如果想实际处理PB级别的数据,它可能无法提供足够的网络支持。 商业云存储(例如 Amazon S3 或 Google Cloud Storage)具备两全其美的优势。它既可公开访问,又具有极大的数据处理能力。 目前大量的地学大数据已经存储于云端,并可以通过Pangeo进行操作,这其中就包含LLC4320模式。 后面我将介绍云计算平台Pangeo。 1 C' t9 Z4 z- v0 Z
# m+ r" F% e8 F; Z) ]9 u
# r" s: `' Y1 B8 Y9 H- F+ l7 G- `
2 y6 X/ i+ a1 W
5 {1 { G) g7 Y9 A# g- A |