|
LLC4320模式简介 LLC4320是MITgcm 1/48°全球海洋模式,其诞生的直接原因是为即将到来的SWOT任务提供高分辨率的全球海洋模拟。 LLC4320模式在多个方面具有开创性,特别是其高空间分辨率(全球分辨率在 1 到 2 公里之间)、潮汐驱动、高频(每小时)输出,其海面高度信号中包含了内潮、内波、地转平衡等信号。除了在SWOT相关工作取得应用之外,该模式也在海洋亚中尺度、内波等研究方向得到了广泛应用。 ( [9 S7 W. ]! m* s- I
该模式主要特征是:
: z- F) K! v7 i% M
- • 全球覆盖(包含极地)
- • 垂向90层
- • 分辨率1/48°
- • 全球海洋分成13个face,每个face的网格数为4320*4320
- • 时间采样是1小时,总计时间维度9030
- • 共14 个月(2011 年 9 月至 2012 年 11 月)
- • 数据量巨大,PB级别
- • 以MDS自定义二进制数据格式存储,为MITgcm独有
- • 模型网格复杂,为lat-lon-cap (LLC) 曲线网格 ,很难在常规地图投影中可视化。
4 B. Z* k7 i2 u) p& W
在数据发布之初,该数据集存储在高度安全的NASA超级计算机上,只有获得NASA资助的研究人员才能访问。 后来,NASA Ames研究中心创建数据共享网站(https://data.nas.nasa.gov/ecco/),开放了LLC4320数据。任何人都可以通过互联网访问数据。在此网站上,您可以单击下载单个大小40GB的二进制文件。除非您知道如何解码其中的内容,否则这些文件毫无用处。
$ f g4 ]9 i# ^0 v/ o
: Z9 f# |7 t, q, h: A* b xmitgcm.llcreaderxmitgcm 是一个 python 包,可以将 MITgcm 二进制 MDS 文件读入 xarray 结构。通过 dask,xmitgcm可以实现并行计算。
为了使二进制数据方便利用,Ryan Abernathey等开发了xmitgcm的python包,其中llcreader用于读取这些二进制文件。该模块使用xarray和dask从ECCO数据门户网站在线访问数据,使模式大数据的操作变得轻而易举。
1 _6 h) h* W* Z( d( D) ~, e8 d" e 海面温度读取示例
. V2 ?: X/ i' G- l4 A: @) Q c! G/ K以海面温度读取为例,展示其基本操作。用到了如下库: - • xmitgcm: 提供llcreader
- • xarray: 基本数据结构和操作
- • dask: 大数据并行和lazy计算
- • sholoviews: 交互式的图像展示
3 J; [, R$ |/ q/ t; e$ ^ 1 导入库; w: |# T8 C0 \; C
! B7 _9 \6 |- u0 |
import xmitgcm.llcreader as llcreader6 j5 T* f1 u# X, L' ~; A
%matplotlib inline
, ?4 A1 I: A; T0 timport holoviews as hv
$ K5 \ c# Q, ?3 Dfrom holoviews.operation.datashader import regrid! R: c5 d9 l! H2 X9 c: T
hv.extension('bokeh')
( p3 W9 s: |: P% G$ M, y
9 {! ]- j. J {2 初始化这里我们使用LLC4320模式数据: model = llcreader.ECCOPortalLLC4320Model()+ Y7 @. X% B" f* J
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& O, _" }: O& _ X1 a
3 海表温度参数设置1 G, X, [/ E, a0 v! C
. T L! `% M/ r; ^
ds_sst = model.get_dataset(varnames=['Theta'], k_levels=[0], type='latlon'): h$ ?: E; @. 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')
6 E" L3 z; N3 X$ o0 M6 \3 P+ o* q3 ?
) L6 L4 N' C0 M7 C( y 4 动态交互可视化# l% Q# r! \. u" P* u
I! r2 C$ [7 N/ R4 C
dataset = hv.Dataset(ds_sst.Theta.isel(k=0).astype('f4'))
; B z1 j; }. s* T2 ?4 c$ w6 Ehv_im = (dataset.to(hv.Image, ['i', 'j'], dynamic=True). J! g& k* D) C/ w# H% E A! U
.options(cmap='Magma', width=950, height=600, colorbar=True))
" j: p3 `: Y( _7 r! R5 |) c: N; j' B2 K
%output holomap='scrubber' fps=30 P3 M% t( ?5 y
regrid(hv_im, precompute=True)上图是南非Aghulhas Rings,可以看到强大的洋流和丰富的中小尺度涡旋。下图作为对比是LLC2160的结果,和4320的分辨能力比较有一定差距。 : T X" t" k+ L
涡度计算示例下面展示LLC4320涡度计算步骤。 model = llcreader.ECCOPortalLLC4320Model()
' z: X% U# o. n% G. k; g& C" W7 \3 |print(model), I; S- A2 v" v. V6 Q; n
' a% F( ]. _3 a) Z- Y5 ]# volecity
; @/ k* }0 ?* p5 _ N, `ds = model.get_dataset(varnames=['U', 'V'], k_levels=[0], type='latlon',
- k- x3 d2 s9 f: ]: N S: b iter_start=model.iter_start,
; }5 ]9 f9 ?! R) a# v* p1 s( e: y9 R iter_stop=(model.iter_start + model.iter_step),
1 R3 @( i5 c* C* i, O# K* R8 {" X3 A read_grid=True)
7 w! g Z) L* T
/ `/ l& v) | j1 `9 n# Normal gridding
0 ]2 k( Z5 z4 R; himport xgcm8 [4 Y/ e4 Q5 p1 w. B: G0 Q
grid = xgcm.Grid(ds, periodic=['X'])1 b) F6 z$ M/ m0 s5 \- O
1 O5 e5 s7 a& \% p" C' @
# Calculate vorticity
: x0 u$ { ]7 S9 a% nzeta = (-grid.diff(ds.U * ds.dxC, 'Y', boundary='fill') + grid.diff(ds.V * ds.dyC, 'X'))/ds.rAz3 C. p6 X& \# k5 t, f5 C
zeta = zeta.squeeze().rename('vorticity').reset_coords(drop=True)
: S+ D9 ~' a# }2 T( C2 R+ `
5 _! `6 n3 c- d! s/ d, T# load data& h! p1 [; E" d: V/ r1 k
zeta.load() g2 v0 e% S& k2 y. f; ^3 I
" b# S: Q& p/ k2 f* D8 [# Show
6 ^( o. \, b$ L S3 [dataset = hv.Dataset(zeta)
/ \' l" f- \9 S; h! [hv_im = (dataset.to(hv.Image, ['i_g', 'j_g'])0 N& z: ], i3 u5 T% S
.options(cmap='RdBu_r', width=950, height=600, colorbar=True, symmetric=True))' ?- b' n: }, s' j6 H. ^
, f; @7 W8 G0 Vregrid(hv_im, precompute=True)
# G0 T+ r1 _6 W" x" i扩展:云虽然 ECCO 门户实现了数据自由访问,但它的带宽有限,国内用户往往难以正常访问。虽然它适合交互探索,但如果想实际处理PB级别的数据,它可能无法提供足够的网络支持。 商业云存储(例如 Amazon S3 或 Google Cloud Storage)具备两全其美的优势。它既可公开访问,又具有极大的数据处理能力。 目前大量的地学大数据已经存储于云端,并可以通过Pangeo进行操作,这其中就包含LLC4320模式。 后面我将介绍云计算平台Pangeo。
$ h& }" C: l; u |6 L- r
4 P, o9 u% ]$ ~6 E/ g6 T" n. O* r
8 d1 N) S' r9 Y2 l8 H
) k9 _* [( W! l( e. `, J8 [; R
! Z: P, `2 D: ^; |# u
|