|
LLC4320模式简介 LLC4320是MITgcm 1/48°全球海洋模式,其诞生的直接原因是为即将到来的SWOT任务提供高分辨率的全球海洋模拟。 LLC4320模式在多个方面具有开创性,特别是其高空间分辨率(全球分辨率在 1 到 2 公里之间)、潮汐驱动、高频(每小时)输出,其海面高度信号中包含了内潮、内波、地转平衡等信号。除了在SWOT相关工作取得应用之外,该模式也在海洋亚中尺度、内波等研究方向得到了广泛应用。
& }( I9 m6 S. J6 K6 U
该模式主要特征是:
& S" X' I0 p3 L
- • 全球覆盖(包含极地)
- • 垂向90层
- • 分辨率1/48°
- • 全球海洋分成13个face,每个face的网格数为4320*4320
- • 时间采样是1小时,总计时间维度9030
- • 共14 个月(2011 年 9 月至 2012 年 11 月)
- • 数据量巨大,PB级别
- • 以MDS自定义二进制数据格式存储,为MITgcm独有
- • 模型网格复杂,为lat-lon-cap (LLC) 曲线网格 ,很难在常规地图投影中可视化。
+ s% C; M" j E# }( c
在数据发布之初,该数据集存储在高度安全的NASA超级计算机上,只有获得NASA资助的研究人员才能访问。 后来,NASA Ames研究中心创建数据共享网站(https://data.nas.nasa.gov/ecco/),开放了LLC4320数据。任何人都可以通过互联网访问数据。在此网站上,您可以单击下载单个大小40GB的二进制文件。除非您知道如何解码其中的内容,否则这些文件毫无用处。
6 b' a8 \) V0 V* |* o9 d 9 V. D" t2 k/ |4 H
xmitgcm.llcreaderxmitgcm 是一个 python 包,可以将 MITgcm 二进制 MDS 文件读入 xarray 结构。通过 dask,xmitgcm可以实现并行计算。
为了使二进制数据方便利用,Ryan Abernathey等开发了xmitgcm的python包,其中llcreader用于读取这些二进制文件。该模块使用xarray和dask从ECCO数据门户网站在线访问数据,使模式大数据的操作变得轻而易举。
; ]$ p: ~5 \- t/ f/ v1 _- h+ \ 海面温度读取示例
) O \4 N( _+ \. x# Y以海面温度读取为例,展示其基本操作。用到了如下库: - • xmitgcm: 提供llcreader
- • xarray: 基本数据结构和操作
- • dask: 大数据并行和lazy计算
- • sholoviews: 交互式的图像展示
& s" j: s8 L( ?1 ? s$ |+ q 1 导入库
8 s7 z2 Z, M0 @+ @) e' ]. o: c. H- Y- Q1 u Q
import xmitgcm.llcreader as llcreader# b9 Q4 G7 t, z# K
%matplotlib inline& b, [/ v* g2 d% Q
import holoviews as hv! b- a. g7 ]2 c I; n5 j
from holoviews.operation.datashader import regrid
2 o( o% l6 I% K) Dhv.extension('bokeh')" P" V% b0 q/ @; Y2 ^
. Q6 m: l Z* z& {' e" N* [3 U' T$ p
2 初始化这里我们使用LLC4320模式数据: model = llcreader.ECCOPortalLLC4320Model()
: Y# r. L! n1 J6 i% f; g5 zmodel根据数据分辨率和来源,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( T1 g" y: G) Z6 ` p" s* H% A4 H
3 海表温度参数设置' \' L4 \6 Z9 ?( d
: L" }1 A% I6 D& n( a
ds_sst = model.get_dataset(varnames=['Theta'], k_levels=[0], type='latlon')/ M, K0 U6 R, D
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')
% B, f3 i% v" o& v( n( y
. l+ ^/ m G9 S* n+ ~ 4 动态交互可视化% M# L$ A3 a! A
! h4 c& S4 w! `* m$ ndataset = hv.Dataset(ds_sst.Theta.isel(k=0).astype('f4')); v# W/ T: j' g
hv_im = (dataset.to(hv.Image, ['i', 'j'], dynamic=True)7 _ N* a" b: [5 q1 `
.options(cmap='Magma', width=950, height=600, colorbar=True))
9 u2 v8 l( Y3 n2 Y4 Q. E. N8 f! z# D+ u* o& H% y) W! E
%output holomap='scrubber' fps=31 R0 m# {+ a+ G) L4 c& U
regrid(hv_im, precompute=True)上图是南非Aghulhas Rings,可以看到强大的洋流和丰富的中小尺度涡旋。下图作为对比是LLC2160的结果,和4320的分辨能力比较有一定差距。 * o6 |5 d) o: W; ~8 `
涡度计算示例下面展示LLC4320涡度计算步骤。 model = llcreader.ECCOPortalLLC4320Model()
3 S. H; k& C4 F3 } pprint(model)
* \8 n U1 G) w! C4 P* b+ U; ~) N+ h5 H( F
# volecity0 R2 p' D! x0 }
ds = model.get_dataset(varnames=['U', 'V'], k_levels=[0], type='latlon',: H9 p7 I$ a$ j1 I. C
iter_start=model.iter_start,3 A f( q7 @, a+ y; Z# Q( V' h
iter_stop=(model.iter_start + model.iter_step), t$ N2 j, ^. Q; C
read_grid=True)( l- h* P3 \0 x
) s: a- `2 i2 z% @, p! R1 P- O4 X# Normal gridding8 d( j4 O1 m% f' V' Q
import xgcm
; q. ^1 y1 \0 Q' Hgrid = xgcm.Grid(ds, periodic=['X'])
( w4 v2 j* b* g/ F7 O3 L" j' o) v. n. A
- y2 T* r$ D- x0 D. s3 i# Calculate vorticity' [$ m' `. z. @; V2 F; N
zeta = (-grid.diff(ds.U * ds.dxC, 'Y', boundary='fill') + grid.diff(ds.V * ds.dyC, 'X'))/ds.rAz
% X" q) D! a) Q2 t! e$ \+ y5 e/ V3 Mzeta = zeta.squeeze().rename('vorticity').reset_coords(drop=True)
+ ]3 ~" v/ ]2 e
2 K' Z6 D: {6 @1 m# load data
M( P. i5 y9 }zeta.load()
) Y8 v) N+ `% j3 G- m( T
* i5 h* |2 Z" q0 t9 i6 K( k# Show- e' @4 a* x7 k; R5 A& | @3 ~
dataset = hv.Dataset(zeta)
: D! T8 i: [4 `* X$ @1 J) \hv_im = (dataset.to(hv.Image, ['i_g', 'j_g'])
6 P( d* F* _$ G4 I' G" i .options(cmap='RdBu_r', width=950, height=600, colorbar=True, symmetric=True))8 \% q" y0 \4 X0 m; O! l7 s3 q
# Z. f t' {' @0 q6 J
regrid(hv_im, precompute=True), E6 W/ L+ B" r4 r* _4 [8 h
扩展:云虽然 ECCO 门户实现了数据自由访问,但它的带宽有限,国内用户往往难以正常访问。虽然它适合交互探索,但如果想实际处理PB级别的数据,它可能无法提供足够的网络支持。 商业云存储(例如 Amazon S3 或 Google Cloud Storage)具备两全其美的优势。它既可公开访问,又具有极大的数据处理能力。 目前大量的地学大数据已经存储于云端,并可以通过Pangeo进行操作,这其中就包含LLC4320模式。 后面我将介绍云计算平台Pangeo。 + U) f+ z' n4 U0 \. T O
: x `# e1 D- Z, c) E
7 }6 N$ V8 {7 Z7 A" O! A8 D) E6 |, [$ y% |) c+ S0 R- T
4 t" O8 X* j0 c2 }% T. q% [
6 d! n2 m- ]- C6 p c) p |