Data is from a large eddy simulation of trade cumulus clouds.
Single timestep at 12.5 m x, y, z grid spacing
Variable is QN -- cloud liquid water (g/kg)
link to data file¶
The netcdf file: bomex_qv_qn.nc -- 527 Mbytes
import xarray as xr
from pathlib import Path
from vapor import session, renderer, dataset, camera
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[1], line 1
----> 1 import xarray as xr
2 from pathlib import Path
3 from vapor import session, renderer, dataset, camera
ModuleNotFoundError: No module named 'xarray'
adjust path to point to file¶
the_file = Path().resolve() / 'bomex_qv_qn.nc'
print(the_file)
the_file.exists()
Inspect the xarray dataset¶
bomex_data = xr.open_dataset(the_file)
bomex_data
open as a Vapor dataset¶
ses = session.Session()
data = ses.OpenDataset(dataset.CF, [str(the_file)])
ses.Load('session.vs3')
print("Time Coordinate Variable Name:", data.GetTimeCoordVarName())
print("Coordinate Variable Names:", data.GetCoordVarNames())
print("Dimensions:")
for dim in data.GetDimensionNames():
print(f" {dim}:", data.GetDimensionLength(dim, 0))
print("Data Variables:")
for var in data.GetDataVarNames():
print(f" {var}")
print(f" Time Varying:", bool(data.IsTimeVarying(var)))
print(f" Dimensionality:", data.GetVarGeometryDim(var))
print(f" Coordinates:", data.GetVarCoordVars(var, True))
print(" Data Range:", data.GetDataRange(var))
Show gridcells¶
- Red: watervapor
- Grey: cloud liquid water
Top view of cloud field, with condensation threshold set to 0.01 g/kg
ren = data.NewRenderer(renderer.VolumeIsoRenderer)
ren.SetVariableName(data.GetDataVarNames(3)[0]) # Set to first 3D data variable
ren.SetIsoValues([0.01])
ses.GetCamera().ViewAll()
ses.Show()
Create visualizer widget¶
from jupyter_vapor_widget import *
viz = VaporVisualizerWidget(ses)
viz
Add a slider bar¶
tf = ren.GetPrimaryTransferFunction()
dataRange = tf.GetMinMaxMapValue()
def sliderChanged(change):
ren.SetIsoValues([change.new])
viz.Render(fast=True)
slider = widgets.FloatSlider(value=ren.GetIsoValues()[0], min=dataRange[0], max=dataRange[1], step=(dataRange[1]-dataRange[0])/100)
slider.observe(sliderChanged, names='value')
widgets.VBox([
viz,
widgets.HBox([widgets.Label("Iso value:"), slider])
])