|
LLC4320模式简介 LLC4320是MITgcm 1/48°全球海洋模式,其诞生的直接原因是为即将到来的SWOT任务提供高分辨率的全球海洋模拟。 LLC4320模式在多个方面具有开创性,特别是其高空间分辨率(全球分辨率在 1 到 2 公里之间)、潮汐驱动、高频(每小时)输出,其海面高度信号中包含了内潮、内波、地转平衡等信号。除了在SWOT相关工作取得应用之外,该模式也在海洋亚中尺度、内波等研究方向得到了广泛应用。 & t6 L( `* s' f3 k8 `% t
该模式主要特征是:
, g0 d; y0 g) Q3 }( A w9 W6 C
- • 全球覆盖(包含极地)
- • 垂向90层
- • 分辨率1/48°
- • 全球海洋分成13个face,每个face的网格数为4320*4320
- • 时间采样是1小时,总计时间维度9030
- • 共14 个月(2011 年 9 月至 2012 年 11 月)
- • 数据量巨大,PB级别
- • 以MDS自定义二进制数据格式存储,为MITgcm独有
- • 模型网格复杂,为lat-lon-cap (LLC) 曲线网格 ,很难在常规地图投影中可视化。
% e$ o5 ?( `3 W: W5 G! K
在数据发布之初,该数据集存储在高度安全的NASA超级计算机上,只有获得NASA资助的研究人员才能访问。 后来,NASA Ames研究中心创建数据共享网站(https://data.nas.nasa.gov/ecco/),开放了LLC4320数据。任何人都可以通过互联网访问数据。在此网站上,您可以单击下载单个大小40GB的二进制文件。除非您知道如何解码其中的内容,否则这些文件毫无用处。
7 v* N4 H; I. u7 P o: W
+ W( ] P* _- t4 I7 A2 |* r- g/ Y xmitgcm.llcreaderxmitgcm 是一个 python 包,可以将 MITgcm 二进制 MDS 文件读入 xarray 结构。通过 dask,xmitgcm可以实现并行计算。
为了使二进制数据方便利用,Ryan Abernathey等开发了xmitgcm的python包,其中llcreader用于读取这些二进制文件。该模块使用xarray和dask从ECCO数据门户网站在线访问数据,使模式大数据的操作变得轻而易举。 1 n9 V2 Q% Y$ @9 G5 z8 o
海面温度读取示例
, c% b# \9 W# S以海面温度读取为例,展示其基本操作。用到了如下库: - • xmitgcm: 提供llcreader
- • xarray: 基本数据结构和操作
- • dask: 大数据并行和lazy计算
- • sholoviews: 交互式的图像展示7 ~. c N4 m) e
1 导入库
2 x. p7 z% D5 X, Z) h+ D U: t1 q6 D5 ~# p* |- O% g
import xmitgcm.llcreader as llcreader& X3 u. K3 S# ?7 P+ {
%matplotlib inline
: D0 y4 o1 m: j$ aimport holoviews as hv
7 u( G. m$ C3 F; a6 m6 t% X. Tfrom holoviews.operation.datashader import regrid
+ F$ l7 U. w6 ?, W B# h. R* m1 Khv.extension('bokeh')
9 U) D6 W1 N: L G; h( J& p2 I0 ]
- v y6 n* k8 O. l2 初始化这里我们使用LLC4320模式数据: model = llcreader.ECCOPortalLLC4320Model(). _& t. n: l4 [0 I8 V2 Q. [0 t C
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) F5 j! H) ?+ `
3 海表温度参数设置2 L0 B* d# [+ c* v+ @
8 }& o* k" ^; T- ]9 ^9 ?
ds_sst = model.get_dataset(varnames=['Theta'], k_levels=[0], type='latlon')
. o9 g9 F% v1 a* gds_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')- T! C6 t( Y% j' z9 G+ |
" G$ R. u. |( `! w 4 动态交互可视化
; i$ y1 a" V. Q2 P N" P/ r' k+ B# a7 n; b8 A( `
dataset = hv.Dataset(ds_sst.Theta.isel(k=0).astype('f4'))1 o2 M. x' S+ O, Z
hv_im = (dataset.to(hv.Image, ['i', 'j'], dynamic=True). V- A- D2 U! G: q+ Y( h9 q" W
.options(cmap='Magma', width=950, height=600, colorbar=True))! ]* Q8 e8 L; v3 [
H* m: C4 [5 j0 f" Q) l
%output holomap='scrubber' fps=3
; `8 \! s: W! C0 l6 Hregrid(hv_im, precompute=True)上图是南非Aghulhas Rings,可以看到强大的洋流和丰富的中小尺度涡旋。下图作为对比是LLC2160的结果,和4320的分辨能力比较有一定差距。 ! I: S, p) u- a+ H: t6 _
涡度计算示例下面展示LLC4320涡度计算步骤。 model = llcreader.ECCOPortalLLC4320Model()% ^0 N5 s, F/ V
print(model)
. M6 `6 s$ y0 U7 m
# \9 a0 _5 {5 O- ?( x- `# volecity$ o8 d3 \! k o. U; [ Z
ds = model.get_dataset(varnames=['U', 'V'], k_levels=[0], type='latlon',
/ C7 T m- Z& {1 C5 Y5 J iter_start=model.iter_start,
3 T% q: B) l5 h+ r2 U1 q iter_stop=(model.iter_start + model.iter_step),( v0 M( a3 V ^/ D+ ^
read_grid=True)
! {. |) D# h; |, Y' @
( k0 C# k7 d$ I; ^6 e" S# Normal gridding7 K8 m Y6 |& y ~4 Y: E( u
import xgcm
8 P9 D$ I7 I) p+ t# Agrid = xgcm.Grid(ds, periodic=['X'])
4 H! j4 N$ G& t8 w9 b7 B" S2 V1 t0 z( E. m# B
# Calculate vorticity$ k& D' |' K0 ~% {6 w0 C
zeta = (-grid.diff(ds.U * ds.dxC, 'Y', boundary='fill') + grid.diff(ds.V * ds.dyC, 'X'))/ds.rAz1 A) L2 R9 ~* a
zeta = zeta.squeeze().rename('vorticity').reset_coords(drop=True)
4 w2 G r4 M' t. T9 u. D2 f0 u2 {7 f; A0 \2 k
# load data
" W- M5 y8 a$ uzeta.load()
; h1 ?0 G6 S7 C5 e# [% F$ F- V0 y1 f$ K. L/ L8 C! F
# Show7 X# P9 n( Q! `
dataset = hv.Dataset(zeta). W, Y. b7 }0 N% E
hv_im = (dataset.to(hv.Image, ['i_g', 'j_g'])- x) B% d4 q' t' ]8 F' [) h% R
.options(cmap='RdBu_r', width=950, height=600, colorbar=True, symmetric=True))2 ^1 o" V$ w# n4 f- X0 k
/ F9 j( K; h* u% Cregrid(hv_im, precompute=True)
7 S1 o. K$ y o0 ~扩展:云虽然 ECCO 门户实现了数据自由访问,但它的带宽有限,国内用户往往难以正常访问。虽然它适合交互探索,但如果想实际处理PB级别的数据,它可能无法提供足够的网络支持。 商业云存储(例如 Amazon S3 或 Google Cloud Storage)具备两全其美的优势。它既可公开访问,又具有极大的数据处理能力。 目前大量的地学大数据已经存储于云端,并可以通过Pangeo进行操作,这其中就包含LLC4320模式。 后面我将介绍云计算平台Pangeo。
/ O/ u) V1 `# U5 X3 k6 [: I; P7 T# r) Z% x
- O8 x! s U- k# d. F
( U: s$ G) ?+ y, R4 g& E$ c4 H) v5 h7 `% L3 t3 e, h1 x
. `) e N0 _! v$ x$ g2 T
|