ocnBgchem: 3D#
3D ocnBgchem data
Branding suffix of datasets
Datasets with the folloing branding suffix are shown in this page:
[time]-[vertical]-[horizontal]-[domain]
tavg-ol-hxy-sea
tavg: time average
ol: ocean levels
hxy: horizontal curvlinear grids
sea: ocean domain
# Parameters
cmorout = "/scratch/yanchun/cmorout"
source_id = "UKESM1-3-LL"
experiment_id = "piControl"
variant_label = "r1i1p1f1"
grid_label = "g143"
version = "v20260914"
List of datasets:
List of compound names of datasets that needs to be cmorized.
Those datasets which are not cmorized have no link.
``
Dataset validated:
Each validated dataset has some text information and some plots (2D and/or 1D)
ocnBgchem.calc.tavg-ol-hxy-sea.mon.glb
long name: Calcite Concentration (mol m-3)
vertical aggregation method for 3D->2D plot: mean
timeseries aggregation method for 3D->1D plot: mean
original_name: calclvl -> calc
ocnBgchem.chl.tavg-ol-hxy-sea.mon.glb
long name: Mass Concentration of Total Phytoplankton Expressed as Chlorophyll in Sea Water (kg m-3)
vertical aggregation method for 3D->2D plot: mean
timeseries aggregation method for 3D->1D plot: mean
original_name: phyclvl -> chl
history: chl = phyclvl*122*12/60/1000
ocnBgchem.detoc.tavg-ol-hxy-sea.mon.glb
long name: Detrital Organic Carbon Concentration (mol m-3)
vertical aggregation method for 3D->2D plot: mean
timeseries aggregation method for 3D->1D plot: mean
original_name: detoclvl -> detoc
history: detoc = detoclvl*122
ocnBgchem.dfe.tavg-ol-hxy-sea.mon.glb
long name: Dissolved Iron Concentration (mol m-3)
vertical aggregation method for 3D->2D plot: mean
timeseries aggregation method for 3D->1D plot: mean
original_name: dfelvl -> dfe
ocnBgchem.dissic.tavg-ol-hxy-sea.mon.glb
long name: Dissolved Inorganic Carbon Concentration (mol m-3)
vertical aggregation method for 3D->2D plot: mean
timeseries aggregation method for 3D->1D plot: mean
original_name: dissiclvl -> dissic
ocnBgchem.dissoc.tavg-ol-hxy-sea.mon.glb
long name: Dissolved Organic Carbon Concentration (mol m-3)
vertical aggregation method for 3D->2D plot: mean
timeseries aggregation method for 3D->1D plot: mean
original_name: dissoclvl -> dissoc
history: dissco = dissoclvl*122
ocnBgchem.nh4.tavg-ol-hxy-sea.mon.glb
long name: Dissolved Ammonium Concentration (mol m-3)
vertical aggregation method for 3D->2D plot: mean
timeseries aggregation method for 3D->1D plot: mean
original_name: nh4lvl -> nh4
ocnBgchem.no3.tavg-ol-hxy-sea.mon.glb
long name: Dissolved Nitrate Concentration (mol m-3)
vertical aggregation method for 3D->2D plot: mean
timeseries aggregation method for 3D->1D plot: mean
original_name: no3lvl -> no3
---------------------------------------------------------------------------
KeyboardInterrupt Traceback (most recent call last)
Cell In[6], line 88
84
85 # plot 2D map
86 ax1 = fig.add_subplot(gs[0], projection=proj)
87 # rescale
---> 88 vmin, vmax = data2d.quantile([0.01, 0.99], dim=None).values
89 if mth_cmap == 'cmocean.cm.balance':
90 vmax = max(abs(vmin),abs(vmax))
91 vmin = -vmax
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/xarray/core/dataarray.py:5334, in DataArray.quantile(self, q, dim, method, keep_attrs, skipna, interpolation)
5225 def quantile(
5226 self,
5227 q: ArrayLike,
(...) 5233 interpolation: QuantileMethods | None = None,
5234 ) -> Self:
5235 """Compute the qth quantile of the data along the specified dimension.
5236
5237 Returns the qth quantiles(s) of the array elements.
(...) 5331 The American Statistician, 50(4), pp. 361-365, 1996
5332 """
-> 5334 ds = self._to_temp_dataset().quantile(
5335 q,
5336 dim=dim,
5337 keep_attrs=keep_attrs,
5338 method=method,
5339 skipna=skipna,
5340 interpolation=interpolation,
5341 )
5342 return self._from_temp_dataset(ds)
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/xarray/core/dataset.py:8142, in Dataset.quantile(self, q, dim, method, numeric_only, keep_attrs, skipna, interpolation)
8138 not numeric_only
8139 or np.issubdtype(var.dtype, np.number)
8140 or var.dtype == np.bool_
8141 ):
-> 8142 variables[name] = var.quantile(
8143 q,
8144 dim=reduce_dims,
8145 method=method,
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/xarray/core/variable.py:1930, in Variable.quantile(self, q, dim, method, keep_attrs, skipna, interpolation)
1926 axis = tuple(range(-1, -1 * len(dim) - 1, -1))
1928 kwargs = {"q": q, "axis": axis, "method": method}
-> 1930 result = apply_ufunc(
1931 _wrapper,
1932 self,
1933 input_core_dims=[dim],
1934 exclude_dims=set(dim),
1935 output_core_dims=[["quantile"]],
1936 output_dtypes=[np.float64],
1937 dask_gufunc_kwargs=dict(output_sizes={"quantile": len(q)}),
1938 dask="allowed" if module_available("dask", "2024.11.0") else "parallelized",
1939 kwargs=kwargs,
1940 )
1942 # for backward compatibility
1943 result = result.transpose("quantile", ...)
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/xarray/computation/apply_ufunc.py:1277, in apply_ufunc(func, input_core_dims, output_core_dims, exclude_dims, vectorize, join, dataset_join, dataset_fill_value, keep_attrs, kwargs, dask, output_dtypes, output_sizes, meta, dask_gufunc_kwargs, on_missing_core_dim, *args)
1275 # feed Variables directly through apply_variable_ufunc
1276 elif any(isinstance(a, Variable) for a in args):
-> 1277 return variables_vfunc(*args)
1278 else:
1279 # feed anything else through apply_array_ufunc
1280 return apply_array_ufunc(func, *args, dask=dask)
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/xarray/computation/apply_ufunc.py:818, in apply_variable_ufunc(func, signature, exclude_dims, dask, output_dtypes, vectorize, keep_attrs, dask_gufunc_kwargs, *args)
813 if vectorize:
814 func = _vectorize(
815 func, signature, output_dtypes=output_dtypes, exclude_dims=exclude_dims
816 )
--> 818 result_data = func(*input_data)
820 if signature.num_outputs == 1:
821 result_data = (result_data,)
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/xarray/core/variable.py:1923, in Variable.quantile.<locals>._wrapper(npa, **kwargs)
1921 def _wrapper(npa, **kwargs):
1922 # move quantile axis to end. required for apply_ufunc
-> 1923 return xp.moveaxis(_quantile_func(npa, **kwargs), 0, -1)
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/xarray/core/nputils.py:242, in _create_method.<locals>.f(values, axis, **kwargs)
240 result = np.float64(result)
241 else:
--> 242 result = getattr(npmodule, name)(values, axis=axis, **kwargs)
244 return result
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/numpy/lib/_nanfunctions_impl.py:1573, in nanquantile(a, q, axis, out, overwrite_input, method, keepdims, weights)
1570 if np.any(weights < 0):
1571 raise ValueError("Weights must be non-negative.")
-> 1573 return _nanquantile_unchecked(
1574 a, q, axis, out, overwrite_input, method, keepdims, weights, weak_q)
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/numpy/lib/_nanfunctions_impl.py:1593, in _nanquantile_unchecked(a, q, axis, out, overwrite_input, method, keepdims, weights, weak_q)
1591 if a.size == 0:
1592 return np.nanmean(a, axis, out=out, keepdims=keepdims)
-> 1593 return fnb._ureduce(a,
1594 func=_nanquantile_ureduce_func,
1595 q=q,
1596 weights=weights,
1597 keepdims=keepdims,
1598 axis=axis,
1599 out=out,
1600 overwrite_input=overwrite_input,
1601 method=method,
1602 weak_q=weak_q)
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/numpy/lib/_function_base_impl.py:3880, in _ureduce(a, func, keepdims, **kwargs)
3877 index_out = (0, ) * nd
3878 kwargs['out'] = out[(Ellipsis, ) + index_out]
-> 3880 r = func(a, **kwargs)
3882 if out is not None:
3883 return out
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/numpy/lib/_nanfunctions_impl.py:1623, in _nanquantile_ureduce_func(a, q, weights, axis, out, overwrite_input, method, weak_q)
1621 part = a.ravel()
1622 wgt = None if weights is None else weights.ravel()
-> 1623 result = _nanquantile_1d(part, q, overwrite_input, method,
1624 weights=wgt, weak_q=weak_q)
1625 # Note that this code could try to fill in `out` right away
1626 elif weights is None:
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/numpy/lib/_nanfunctions_impl.py:1677, in _nanquantile_1d(arr1d, q, overwrite_input, method, weights, weak_q)
1673 if arr1d.size == 0:
1674 # convert to scalar
1675 return np.full(q.shape, np.nan, dtype=arr1d.dtype)[()]
-> 1677 return fnb._quantile_unchecked(
1678 arr1d,
1679 q,
1680 overwrite_input=overwrite_input,
1681 method=method,
1682 weights=weights,
1683 weak_q=weak_q,
1684 )
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/numpy/lib/_function_base_impl.py:4510, in _quantile_unchecked(a, q, axis, out, overwrite_input, method, keepdims, weights, weak_q)
4500 def _quantile_unchecked(a,
4501 q,
4502 axis=None,
(...) 4507 weights=None,
4508 weak_q=False):
4509 """Assumes that q is in [0, 1], and is an ndarray"""
-> 4510 return _ureduce(a,
4511 func=_quantile_ureduce_func,
4512 q=q,
4513 weights=weights,
4514 keepdims=keepdims,
4515 axis=axis,
4516 out=out,
4517 overwrite_input=overwrite_input,
4518 method=method,
4519 weak_q=weak_q)
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/numpy/lib/_function_base_impl.py:3880, in _ureduce(a, func, keepdims, **kwargs)
3877 index_out = (0, ) * nd
3878 kwargs['out'] = out[(Ellipsis, ) + index_out]
-> 3880 r = func(a, **kwargs)
3882 if out is not None:
3883 return out
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/numpy/lib/_function_base_impl.py:4669, in _quantile_ureduce_func(a, q, weights, axis, out, overwrite_input, method, weak_q)
4667 arr = a.copy()
4668 wgt = weights
-> 4669 result = _quantile(arr,
4670 quantiles=q,
4671 axis=axis,
4672 method=method,
4673 out=out,
4674 weights=wgt,
4675 weak_q=weak_q)
4676 return result
File /diagnostics/cmip7validate-env/lib/python3.13/site-packages/numpy/lib/_function_base_impl.py:4786, in _quantile(arr, quantiles, axis, method, out, weights, weak_q)
4782 previous_indexes, next_indexes = _get_indexes(arr,
4783 virtual_indexes,
4784 values_count)
4785 # --- Sorting
-> 4786 arr.partition(
4787 np.unique(np.concatenate(([0, -1],
4788 previous_indexes.ravel(),
4789 next_indexes.ravel(),
4790 ))),
4791 axis=0)
4792 if supports_nans:
4793 slices_having_nans = np.isnan(arr[-1, ...])
KeyboardInterrupt: