miχPODS: New baseline#
TODO#
Add diagnostic for convective “adjustment” or
diff == 1
fix EUC coordinate shear
fix daily composites.
finish the deepening metric
Add EQUIX, LES
write out data reading
Figures#
Figure 1 : Jochum background mixing map
Figure 2: spectra?
mean z-space: u, T, S2?N2?
mean EUC space: ν, K, u, T, Ri
daily : deepening
some daily composite: vertical profile or timeseries
seasonal mean heat flux profile.
seasonal: monthly mean Jq, SST timeseries
ENSO: N2-S2 ENSO + ε-Ri
appendix: RigT distribution
Setup#
Show code cell source
%load_ext autoreload
%load_ext rich
%load_ext watermark
%xmode minimal
import os
import warnings
import cf_xarray as cfxr
import datatree
import dcpy.datatree # noqa
import distributed
import holoviews as hv
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import tqdm
from datatree import DataTree
import xarray as xr
%aimport pump
from holoviews.plotting.bokeh.util import select_legends
from pump import mixpods # noqa
hv.notebook_extension("bokeh")
cfxr.set_options(warn_on_missing_variables=False)
xr.set_options(keep_attrs=True, display_expand_data=False)
plt.style.use("bmh")
plt.rcParams["figure.dpi"] = 140
%watermark -iv
Show code cell output
The autoreload extension is already loaded. To reload it, use:
%reload_ext autoreload
Exception reporting mode: Minimal
/glade/u/home/dcherian/miniconda3/envs/pump/lib/python3.10/site-packages/dask_jobqueue/core.py:20: FutureWarning: tmpfile is deprecated and will be removed in a future release. Please use dask.utils.tmpfile instead.
from distributed.utils import tmpfile
json : 2.0.9
matplotlib : 3.7.1
numpy : 1.24.4
pandas : 2.0.3
cf_xarray : 0.8.4
holoviews : 1.17.0
xarray : 2023.7.0
pump : 1.0+273.g892024e.dirty
datatree : 0.0.12
dcpy : 0.1.dev387+gd06c937
distributed: 2023.8.0
sys : 3.10.12 | packaged by conda-forge | (main, Jun 23 2023, 22:40:32) [GCC 12.3.0]
tqdm : 4.66.1
Show code cell source
if "client" in locals():
client.close() # noqa
del client # noqa
if "cluster" in locals():
cluster.close() # noqa
import ncar_jobqueue
cluster = ncar_jobqueue.NCARCluster(
local_directory="/local_scratch/pbs.$PBS_JOBID/dask/spill",
)
cluster.adapt(minimum_jobs=2, maximum_jobs=8)
client = distributed.Client(cluster)
client
Show code cell output
Client
Client-03546858-3d3b-11ee-a985-3cecef1ac722
Connection method: Cluster object | Cluster type: dask_jobqueue.PBSCluster |
Dashboard: https://jupyterhub.hpc.ucar.edu/stable/user/dcherian/casper/proxy/8787/status |
Cluster Info
PBSCluster
dc63bf49
Dashboard: https://jupyterhub.hpc.ucar.edu/stable/user/dcherian/casper/proxy/8787/status | Workers: 0 |
Total threads: 0 | Total memory: 0 B |
Scheduler Info
Scheduler
Scheduler-59a98c46-193e-4ac3-84ec-4c1d36a1b525
Comm: tcp://10.12.206.36:45478 | Workers: 0 |
Dashboard: https://jupyterhub.hpc.ucar.edu/stable/user/dcherian/casper/proxy/8787/status | Total threads: 0 |
Started: Just now | Total memory: 0 B |
Workers
Introduction#
Analysis of χpod shear mixing measurements recorded over approximately 15 years has revealed that mixing varies on multiple timescales, from hourly to interannual, in the tropical Pacific and Indian Oceans (Moum, 2021; Cherian et al., 2020b; Warner et al., 2016; Warner and Moum, 2019; Pujiana et al., 2018; Moum et al., 2009, 2013). These results show that equatorial mixing is organized in large-scale coherent patterns.
We pask whether these patterns, a decade-long observed mixing dataset (from χpods) to develop mixing process-oriented diagnostics (miχPODs) that assess the variability of parameterized equatorial mixing from monthly to decadal timescales; and its accumu- lated impact on model biases by applying miχPODs to a suite of existing CMIP6-class forced ocean and coupled model experiments from NCAR and GFDL.
Following Large and Gent (1999), the comparison of a 1D mixing model with LES or DNS is clean, because the forcing is the same, and direct, because the evaluation compares turbulence quantities (despite shortcomings such as model errors and idealized forcing). In contrast, the performance of a mixing scheme in global and regional model simulations is tested by comparing the simulated mean state to an observed mean state after a long integration (for e.g. Blanke and Delecluse, 1993; Robitaille and Weaver, 1995; Large and Gent, 1999; Gutjahr et al., 2020). This comparison is not clean, because of errors in forcing fields, nor is it direct, since mean state properties are not a direct output of the mixing scheme.
We propose diagnostics that evaluate the representation of the variability in parameterized equatorial mixing using the multiyear χpod turbulence dataset. While this comparison is not clean, it is direct, a substantial improvement to the current state-of-the-art approach.
These diagnostics are direct evaluations of the models’ ability to simulate the observed variability of ocean vertical mixing and reproduce large-scale patterns recorded in equatorial mixing observations.
Datasets#
Observations#
TAO \(T, S, u, v\) and turbulence (Moum et al XXX)
Note which depth χpods are being used
Add a figure showing sampling and gaps
Model Simulations#
The effect of these parameter changes are examined in a IPCC-class climate model: the development version of Community Earth System Model version 3 (CESM3), using the Modular Ocean Model version 6 (MOM6) ocean component, and the K Profile Paramerization vertical mixing scheme (Large et al., 1994).
Ocean-ice simulations (“g case”) are integrated using JRA-55 forcing dataset.
Viscosity and diffusivity in the model#
TODO write down KPP and Jochum equations
Total diffusivity \(K_D^{Total} = K_D + K_D^{Jochum}(x, y)+ K_D^{KPP}(x,y,z,t) \) . The constant \(K_D\) and the spatially varying \(K_D^{Jochum}(x,y)\) model the diffusivity due to breaking internal waves. \(K_D^{KPP}\) models surface layer mixing and mixing due to shear instability.
Split \(K_D^{KPP}\) too.
The same decomposition applies to viscosity \(K_V\).
staticfile = "/glade/campaign/cgd/oce/projects/pump/cesm/gmom.e23.GJRAv3.TL319_t061_zstar_N65.new_baseline.hb/run/*static*.nc"
static = xr.open_mfdataset(staticfile).squeeze()
(
static.Kd_bkgnd.cf.sel(Z=200, method="nearest").hvplot.quadmesh(
cmap="spectral_r",
cnorm="log",
clim=(5e-7, 2e-4),
title="Jochum (2009) background diffusivity",
)
+ static.Kv_bkgnd.cf.sel(Z=200, method="nearest").hvplot.quadmesh(
cmap="spectral_r",
cnorm="log",
clim=(5e-7, 2e-4),
title="Jochum (2009) background viscosity",
)
).cols(1)
/glade/u/home/dcherian/miniconda3/envs/pump/lib/python3.10/site-packages/holoviews/plotting/bokeh/plot.py:967: UserWarning: found multiple competing values for 'toolbar.active_drag' property; using the latest value
layout_plot = gridplot(
/glade/u/home/dcherian/miniconda3/envs/pump/lib/python3.10/site-packages/holoviews/plotting/bokeh/plot.py:967: UserWarning: found multiple competing values for 'toolbar.active_scroll' property; using the latest value
layout_plot = gridplot(