|
LLC4320模式简介 LLC4320是MITgcm 1/48°全球海洋模式,其诞生的直接原因是为即将到来的SWOT任务提供高分辨率的全球海洋模拟。 LLC4320模式在多个方面具有开创性,特别是其高空间分辨率(全球分辨率在 1 到 2 公里之间)、潮汐驱动、高频(每小时)输出,其海面高度信号中包含了内潮、内波、地转平衡等信号。除了在SWOT相关工作取得应用之外,该模式也在海洋亚中尺度、内波等研究方向得到了广泛应用。
# I7 {' w+ {. y
该模式主要特征是: 8 X( R% w( s" _& ^5 s6 v
- • 全球覆盖(包含极地)
- • 垂向90层
- • 分辨率1/48°
- • 全球海洋分成13个face,每个face的网格数为4320*4320
- • 时间采样是1小时,总计时间维度9030
- • 共14 个月(2011 年 9 月至 2012 年 11 月)
- • 数据量巨大,PB级别
- • 以MDS自定义二进制数据格式存储,为MITgcm独有
- • 模型网格复杂,为lat-lon-cap (LLC) 曲线网格 ,很难在常规地图投影中可视化。
9 c6 O; ?# i9 z/ x+ m5 @/ w% V$ O% p
在数据发布之初,该数据集存储在高度安全的NASA超级计算机上,只有获得NASA资助的研究人员才能访问。 后来,NASA Ames研究中心创建数据共享网站(https://data.nas.nasa.gov/ecco/),开放了LLC4320数据。任何人都可以通过互联网访问数据。在此网站上,您可以单击下载单个大小40GB的二进制文件。除非您知道如何解码其中的内容,否则这些文件毫无用处。
; d9 E- {2 c0 e 0 J) @2 O- s! f; H8 w: P3 J% p, e
xmitgcm.llcreaderxmitgcm 是一个 python 包,可以将 MITgcm 二进制 MDS 文件读入 xarray 结构。通过 dask,xmitgcm可以实现并行计算。
为了使二进制数据方便利用,Ryan Abernathey等开发了xmitgcm的python包,其中llcreader用于读取这些二进制文件。该模块使用xarray和dask从ECCO数据门户网站在线访问数据,使模式大数据的操作变得轻而易举。 1 D% M9 q& P( R3 D$ q& h# J8 e$ y
海面温度读取示例8 Y6 s p* ?% P
以海面温度读取为例,展示其基本操作。用到了如下库: - • xmitgcm: 提供llcreader
- • xarray: 基本数据结构和操作
- • dask: 大数据并行和lazy计算
- • sholoviews: 交互式的图像展示
, n1 N$ V" W9 ]2 Y$ g _. O 1 导入库
# R8 c6 F5 }6 G$ U; V" K) i% C9 |: y
import xmitgcm.llcreader as llcreader
6 u. i( S6 G( q7 M%matplotlib inline" o8 z$ B) N/ p0 W9 R {
import holoviews as hv+ c$ }' p e" o/ ~
from holoviews.operation.datashader import regrid
& ~* O0 E% ?; [& j Bhv.extension('bokeh')
/ X+ E& ~5 ^& H* q% g% H9 P9 ~
) D& z3 p' s1 t% K5 s0 S! i0 G7 k1 l2 初始化这里我们使用LLC4320模式数据: model = llcreader.ECCOPortalLLC4320Model()
# M* O6 F% 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
, s$ y6 o& {$ X% C. V6 E 3 海表温度参数设置
: g$ o4 k7 S3 t: {3 s
7 K8 [" ` k6 ~! Pds_sst = model.get_dataset(varnames=['Theta'], k_levels=[0], type='latlon')
( _2 L& ]7 J1 u/ zds_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')
f( B" f8 _! b6 o, }3 `
. |/ E+ @% Z3 N: v) Y 4 动态交互可视化
! ]+ T5 \6 b) U- [5 N2 W# v8 K" n! Z2 E
dataset = hv.Dataset(ds_sst.Theta.isel(k=0).astype('f4'))+ X6 `" G/ J/ U: R' P
hv_im = (dataset.to(hv.Image, ['i', 'j'], dynamic=True)
5 `+ y0 @6 ]) @6 J( x' G% c .options(cmap='Magma', width=950, height=600, colorbar=True))
3 H& W# c: \0 L4 d& g" i0 ~5 [$ {3 j: {# H5 O
%output holomap='scrubber' fps=3 ?' k% n; g# C U
regrid(hv_im, precompute=True)上图是南非Aghulhas Rings,可以看到强大的洋流和丰富的中小尺度涡旋。下图作为对比是LLC2160的结果,和4320的分辨能力比较有一定差距。
: ^ p4 A+ U+ `: W, e2 F `涡度计算示例下面展示LLC4320涡度计算步骤。 model = llcreader.ECCOPortalLLC4320Model() h( S5 e6 }- s
print(model)
: S: K, ?6 E3 w' X4 Z0 g% A
0 P) K7 l! m7 i# volecity/ h* s+ i# s$ b+ z
ds = model.get_dataset(varnames=['U', 'V'], k_levels=[0], type='latlon',
+ M/ y" E X8 H' I iter_start=model.iter_start, g3 a! _" B( R9 K5 z
iter_stop=(model.iter_start + model.iter_step),8 P* |# Z, T% O$ F* }
read_grid=True)
9 V# y/ ~7 ]. ]& {* a0 K# a
" h( F/ y# U `, U" a# Normal gridding+ J5 G2 b5 l+ V; ?: c
import xgcm
3 y. e( [) H) Y( N" {) W6 ugrid = xgcm.Grid(ds, periodic=['X'])
* X5 R1 ?" f' O. N
% ?5 B% @# V8 G% |0 T$ X# Calculate vorticity2 h9 l" F& Q3 W5 E- Y
zeta = (-grid.diff(ds.U * ds.dxC, 'Y', boundary='fill') + grid.diff(ds.V * ds.dyC, 'X'))/ds.rAz
. r; o3 L- k! R( F" {, izeta = zeta.squeeze().rename('vorticity').reset_coords(drop=True) Y0 d8 f- H$ }+ w. q9 ~, t: S
- {6 a% X% h) G3 J9 f. S# load data
1 _# V4 K X, m! M* n/ uzeta.load()0 J: |" v* h1 s& a+ n4 H3 \+ Z
0 F5 t* I7 k$ i4 M- j+ Z# Show
1 Q+ c# O' B) @3 adataset = hv.Dataset(zeta)' _: I+ k1 t0 u0 j
hv_im = (dataset.to(hv.Image, ['i_g', 'j_g'])
2 P; K- C+ ]9 t f .options(cmap='RdBu_r', width=950, height=600, colorbar=True, symmetric=True))
9 e1 H# l# S9 d9 g- L. e: |9 A4 `; G! a+ Y( a+ u
regrid(hv_im, precompute=True)* T8 ?2 v# d. X1 S6 o5 M, Z p
扩展:云虽然 ECCO 门户实现了数据自由访问,但它的带宽有限,国内用户往往难以正常访问。虽然它适合交互探索,但如果想实际处理PB级别的数据,它可能无法提供足够的网络支持。 商业云存储(例如 Amazon S3 或 Google Cloud Storage)具备两全其美的优势。它既可公开访问,又具有极大的数据处理能力。 目前大量的地学大数据已经存储于云端,并可以通过Pangeo进行操作,这其中就包含LLC4320模式。 后面我将介绍云计算平台Pangeo。 , J v* n' ]1 c+ ~+ k* f; g
{5 u; D( i2 r1 w
7 f- |& ^- l: b2 p
% j8 B: S, B& D' I1 M
7 W2 R0 U( v9 o; b
9 B c, B H. }: |/ ~# d+ N |