|
LLC4320模式简介 LLC4320是MITgcm 1/48°全球海洋模式,其诞生的直接原因是为即将到来的SWOT任务提供高分辨率的全球海洋模拟。 LLC4320模式在多个方面具有开创性,特别是其高空间分辨率(全球分辨率在 1 到 2 公里之间)、潮汐驱动、高频(每小时)输出,其海面高度信号中包含了内潮、内波、地转平衡等信号。除了在SWOT相关工作取得应用之外,该模式也在海洋亚中尺度、内波等研究方向得到了广泛应用。
- W& ?6 w( R: O: `7 J$ S
该模式主要特征是: , P: N( L" S) f3 y! p
- • 全球覆盖(包含极地)
- • 垂向90层
- • 分辨率1/48°
- • 全球海洋分成13个face,每个face的网格数为4320*4320
- • 时间采样是1小时,总计时间维度9030
- • 共14 个月(2011 年 9 月至 2012 年 11 月)
- • 数据量巨大,PB级别
- • 以MDS自定义二进制数据格式存储,为MITgcm独有
- • 模型网格复杂,为lat-lon-cap (LLC) 曲线网格 ,很难在常规地图投影中可视化。
' s6 d' Q$ G; ^0 M c# I
在数据发布之初,该数据集存储在高度安全的NASA超级计算机上,只有获得NASA资助的研究人员才能访问。 后来,NASA Ames研究中心创建数据共享网站(https://data.nas.nasa.gov/ecco/),开放了LLC4320数据。任何人都可以通过互联网访问数据。在此网站上,您可以单击下载单个大小40GB的二进制文件。除非您知道如何解码其中的内容,否则这些文件毫无用处。' v4 x p" n- \" Q/ N7 S, J
: \# L' y& G4 M% O' {7 G
xmitgcm.llcreaderxmitgcm 是一个 python 包,可以将 MITgcm 二进制 MDS 文件读入 xarray 结构。通过 dask,xmitgcm可以实现并行计算。
为了使二进制数据方便利用,Ryan Abernathey等开发了xmitgcm的python包,其中llcreader用于读取这些二进制文件。该模块使用xarray和dask从ECCO数据门户网站在线访问数据,使模式大数据的操作变得轻而易举。 ( c1 s. [0 q3 g4 `" A# T- x
海面温度读取示例
/ }3 y- r J+ e! Y- ^5 a3 r' ~以海面温度读取为例,展示其基本操作。用到了如下库: - • xmitgcm: 提供llcreader
- • xarray: 基本数据结构和操作
- • dask: 大数据并行和lazy计算
- • sholoviews: 交互式的图像展示
/ J: t5 i; Z* K. K 1 导入库
0 c$ m* z/ ] `
( C7 a" M: m0 F* Z& U2 @1 Cimport xmitgcm.llcreader as llcreader# H& G) {; P7 n
%matplotlib inline* r* r* {1 y$ v8 f0 ?' o
import holoviews as hv! c e/ J% m- K; n# U
from holoviews.operation.datashader import regrid0 p5 I- N2 O) t( I6 p: r! Q& ^
hv.extension('bokeh')2 M" n) r" g" F& D
. r9 S) m, [* B
2 初始化这里我们使用LLC4320模式数据: model = llcreader.ECCOPortalLLC4320Model()
. w+ ]! \) Q7 R4 B; N; N9 Imodel根据数据分辨率和来源,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% x4 x% C5 I$ E1 [3 G' W
3 海表温度参数设置/ x7 C+ n) b% v7 {* L3 c
- |3 ?8 M1 ]9 Y9 Wds_sst = model.get_dataset(varnames=['Theta'], k_levels=[0], type='latlon')
8 F, ~, @6 G" `& r$ kds_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 K7 N3 P: `) H6 Z7 h9 g. m4 E' Y" F
" |1 D9 k8 y# l+ h2 e0 p. p$ d 4 动态交互可视化
, @, G2 s; g' O
# G8 I+ o0 P5 K6 L ]$ ]dataset = hv.Dataset(ds_sst.Theta.isel(k=0).astype('f4'))
) p) n% f" L% ?; P& xhv_im = (dataset.to(hv.Image, ['i', 'j'], dynamic=True)6 |5 c! q: d P; o# f
.options(cmap='Magma', width=950, height=600, colorbar=True))5 V- z, O5 J. s9 C& w1 M% \5 z
! v1 c' U' L( [! R+ G0 |: _/ ]%output holomap='scrubber' fps=36 Y7 J+ Y: T9 }/ s' o- Y; A) T
regrid(hv_im, precompute=True)上图是南非Aghulhas Rings,可以看到强大的洋流和丰富的中小尺度涡旋。下图作为对比是LLC2160的结果,和4320的分辨能力比较有一定差距。
, a2 e! r* T. F7 p' J1 f涡度计算示例下面展示LLC4320涡度计算步骤。 model = llcreader.ECCOPortalLLC4320Model()
0 f. @/ a! V" k8 v6 {print(model)& Y9 T2 o3 L1 h, `, |+ S
+ L9 q% W' M) D, S: k3 ?& Z% F0 t6 e) @# volecity
) ?1 X2 `( }2 n# z; I# P" ods = model.get_dataset(varnames=['U', 'V'], k_levels=[0], type='latlon',0 v1 g) `* e- {' G8 B
iter_start=model.iter_start,
, [" B r! q9 M+ F iter_stop=(model.iter_start + model.iter_step),$ i/ q/ [# u! u" V `- d
read_grid=True)2 I, e: z6 f- y S0 e: m
9 [4 C: _/ i J) ~7 o: d& b( d
# Normal gridding
% d- L8 M9 J2 ]* B3 oimport xgcm4 p& D H U5 {( v
grid = xgcm.Grid(ds, periodic=['X'])' L/ V6 \) ?5 Q; ?
! o; a( }/ \/ x; t. W# Calculate vorticity$ F, I/ X( z) u* Z
zeta = (-grid.diff(ds.U * ds.dxC, 'Y', boundary='fill') + grid.diff(ds.V * ds.dyC, 'X'))/ds.rAz% K" I* B$ D8 }$ ^
zeta = zeta.squeeze().rename('vorticity').reset_coords(drop=True)5 Y" r0 X2 x' z$ T8 w
" [# q1 Q" L4 U) d* f& F# A; q
# load data2 Z; x* H9 i5 H) {, N
zeta.load()
w5 K2 y3 Y! r% p7 X2 q/ F& F
* o; [& ~3 U' Y* `# Show, ~/ e* v$ Q" `# a, x
dataset = hv.Dataset(zeta)
8 T* B; A9 ]5 _hv_im = (dataset.to(hv.Image, ['i_g', 'j_g'])
2 }( J, [6 B- \0 | .options(cmap='RdBu_r', width=950, height=600, colorbar=True, symmetric=True))2 @5 ^7 D/ K' e$ p( }
+ X8 t& C8 `+ ^# G# d: R
regrid(hv_im, precompute=True)
0 j" @4 ~! j. f: ?& J扩展:云虽然 ECCO 门户实现了数据自由访问,但它的带宽有限,国内用户往往难以正常访问。虽然它适合交互探索,但如果想实际处理PB级别的数据,它可能无法提供足够的网络支持。 商业云存储(例如 Amazon S3 或 Google Cloud Storage)具备两全其美的优势。它既可公开访问,又具有极大的数据处理能力。 目前大量的地学大数据已经存储于云端,并可以通过Pangeo进行操作,这其中就包含LLC4320模式。 后面我将介绍云计算平台Pangeo。
: O" H3 J) f$ C/ L5 U- b6 x5 |' k/ J+ d# D
! ]. T8 s5 {6 e! ]
1 a8 `/ W6 ~8 {: t
+ V5 ?, U$ Z2 s! C. {- \, W, r9 o1 ~" a0 G$ S" s8 ?: d
|