|
LLC4320模式简介 LLC4320是MITgcm 1/48°全球海洋模式,其诞生的直接原因是为即将到来的SWOT任务提供高分辨率的全球海洋模拟。 LLC4320模式在多个方面具有开创性,特别是其高空间分辨率(全球分辨率在 1 到 2 公里之间)、潮汐驱动、高频(每小时)输出,其海面高度信号中包含了内潮、内波、地转平衡等信号。除了在SWOT相关工作取得应用之外,该模式也在海洋亚中尺度、内波等研究方向得到了广泛应用。 ( n" v+ }: s4 T$ H0 [
该模式主要特征是: 4 |" M4 ~2 a# y% W, m- v
- • 全球覆盖(包含极地)
- • 垂向90层
- • 分辨率1/48°
- • 全球海洋分成13个face,每个face的网格数为4320*4320
- • 时间采样是1小时,总计时间维度9030
- • 共14 个月(2011 年 9 月至 2012 年 11 月)
- • 数据量巨大,PB级别
- • 以MDS自定义二进制数据格式存储,为MITgcm独有
- • 模型网格复杂,为lat-lon-cap (LLC) 曲线网格 ,很难在常规地图投影中可视化。+ a+ Q% ^! u2 F
在数据发布之初,该数据集存储在高度安全的NASA超级计算机上,只有获得NASA资助的研究人员才能访问。 后来,NASA Ames研究中心创建数据共享网站(https://data.nas.nasa.gov/ecco/),开放了LLC4320数据。任何人都可以通过互联网访问数据。在此网站上,您可以单击下载单个大小40GB的二进制文件。除非您知道如何解码其中的内容,否则这些文件毫无用处。
" G% r* g7 p$ ~9 E7 [4 ` 4 S" m$ n* O- r" V( N3 @
xmitgcm.llcreaderxmitgcm 是一个 python 包,可以将 MITgcm 二进制 MDS 文件读入 xarray 结构。通过 dask,xmitgcm可以实现并行计算。
为了使二进制数据方便利用,Ryan Abernathey等开发了xmitgcm的python包,其中llcreader用于读取这些二进制文件。该模块使用xarray和dask从ECCO数据门户网站在线访问数据,使模式大数据的操作变得轻而易举。
" G- I$ N, K# V9 h( M- P 海面温度读取示例3 `9 F& W4 u7 K+ |/ v
以海面温度读取为例,展示其基本操作。用到了如下库: - • xmitgcm: 提供llcreader
- • xarray: 基本数据结构和操作
- • dask: 大数据并行和lazy计算
- • sholoviews: 交互式的图像展示 P) W* q3 a5 _( [7 k; F
1 导入库
* ]; _) g: L4 m6 ]0 |6 W: S" [/ u7 i7 x n
import xmitgcm.llcreader as llcreader
' U4 u+ N5 i+ D" v7 ?%matplotlib inline
* K! w9 }/ s3 |0 Kimport holoviews as hv
+ f5 E/ ~+ |, ^4 A/ I7 N* }4 ffrom holoviews.operation.datashader import regrid4 m) s; H5 j s# L$ f& u
hv.extension('bokeh')
+ J O D* r* _$ R9 W; z; F, U6 R5 |' t; n0 v# }$ w) l% c
2 初始化这里我们使用LLC4320模式数据: model = llcreader.ECCOPortalLLC4320Model()& C {/ {7 W: @) O) }/ J- Y
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: ?; h. L' z& o1 ~; t& ~- K# L c
3 海表温度参数设置
% a8 u6 o0 ^8 S. A6 X: g) }2 T$ n0 l/ t9 R) z3 f$ \0 U* X: U
ds_sst = model.get_dataset(varnames=['Theta'], k_levels=[0], type='latlon')
v. \% B% P) F: ^; Tds_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')
1 `* H1 B S H! t$ }& G
" S. D. u4 O. \( b( o8 g 4 动态交互可视化0 r/ a5 J7 n8 g% n
& ^' r2 W6 Z1 @1 b' p+ Q5 K
dataset = hv.Dataset(ds_sst.Theta.isel(k=0).astype('f4'))
- C+ [" D4 T Xhv_im = (dataset.to(hv.Image, ['i', 'j'], dynamic=True)
$ i V+ q0 N6 v7 G% ^6 y+ w .options(cmap='Magma', width=950, height=600, colorbar=True))% r7 B3 s* j2 y
3 c% F$ L: Z- j5 V, f
%output holomap='scrubber' fps=3- N: G! b# V/ S6 u/ A1 f' P7 b
regrid(hv_im, precompute=True)上图是南非Aghulhas Rings,可以看到强大的洋流和丰富的中小尺度涡旋。下图作为对比是LLC2160的结果,和4320的分辨能力比较有一定差距。 5 I; o( i; C2 v
涡度计算示例下面展示LLC4320涡度计算步骤。 model = llcreader.ECCOPortalLLC4320Model(), ?- I( f* ~: | z* }! t' _
print(model)
) a7 M9 M8 m4 W% ~2 g2 d5 |) T d1 s7 r1 g
# volecity! L$ g% M* O* ^+ Z
ds = model.get_dataset(varnames=['U', 'V'], k_levels=[0], type='latlon',
/ t1 P) o0 H2 p' w& l iter_start=model.iter_start,0 q& l/ v3 X/ B6 _+ N: S! L' n
iter_stop=(model.iter_start + model.iter_step),
3 V6 O! \+ n3 ` read_grid=True)
) U8 t6 \/ ^- j( w; O1 H
, y y/ E1 o( ^8 z& ]/ Z# Normal gridding
! q! N4 D2 P8 G d$ ]$ ~; X0 wimport xgcm
! C1 ^- _% l/ k5 e9 bgrid = xgcm.Grid(ds, periodic=['X'])
& h$ Z. v+ L7 ^) y# |; R* i$ S' s7 J# G" P+ E
# Calculate vorticity" _7 E- J" C( a- O( u
zeta = (-grid.diff(ds.U * ds.dxC, 'Y', boundary='fill') + grid.diff(ds.V * ds.dyC, 'X'))/ds.rAz
% X9 v( u- s0 N& k* j( u( m5 Uzeta = zeta.squeeze().rename('vorticity').reset_coords(drop=True)
9 z+ W! Y- @& ]$ Q# ~; P( r! o) x7 g0 h- ]: ]: q! f. B
# load data
) y3 E4 l# C* x E! mzeta.load(). o r! b# u; f2 N" l) d8 \1 b
+ _* R5 \" Z7 m/ O7 \" v# Show" r, I( q' v% r( Y1 x
dataset = hv.Dataset(zeta)
. I& ]) O0 H) K3 bhv_im = (dataset.to(hv.Image, ['i_g', 'j_g'])0 n9 {/ O3 c N' i
.options(cmap='RdBu_r', width=950, height=600, colorbar=True, symmetric=True))8 W7 H& D* L" t6 ]
; p9 d C- J& o; V- G" L9 aregrid(hv_im, precompute=True)
' _$ D6 c/ D7 u/ g扩展:云虽然 ECCO 门户实现了数据自由访问,但它的带宽有限,国内用户往往难以正常访问。虽然它适合交互探索,但如果想实际处理PB级别的数据,它可能无法提供足够的网络支持。 商业云存储(例如 Amazon S3 或 Google Cloud Storage)具备两全其美的优势。它既可公开访问,又具有极大的数据处理能力。 目前大量的地学大数据已经存储于云端,并可以通过Pangeo进行操作,这其中就包含LLC4320模式。 后面我将介绍云计算平台Pangeo。 : Q& S! A8 c) ~% D H! t
. d+ k7 o/ I* B- A
" A& M* [1 U$ F+ B3 C$ F2 Z2 L! n0 S9 {1 R$ h9 k8 h4 w
. s4 |9 A" G2 e, G G% j# @# e! l
7 Q" O8 T* ~4 ]& v% T( P
|