Integration with xarray
xarray is a powerful Python package for geospatial data analysis.
It provides DataArray and Dataset structures for self-describing gridded data.
For the convenience of xarray users, climlab provides tools for automatic translation
of the native Field object to xarray format.
Additionally, as of climlab v0.7.1, the insolation and orbital functions have been updated with an xarray-compatible interface:
climlab.solar.orbital.OrbitalTablereturns anxarray.Datasetobject with orbital data.climlab.solar.insolation.daily_insolationaccepts input in labeledxarray.DataArrayformat and return the same.
- Example 1:
Create a single column radiation model and view air temperature as
xarray.DataArray:>>> import climlab >>> state = climlab.column_state(num_lev=20) >>> model = climlab.radiation.RRTMG(state=state) >>> # display a single variable as xarray.DataArray >>> model.Tatm.to_xarray() <xarray.DataArray (lev: 20)> array([ 200. , 204.105263, 208.210526, 212.315789, 216.421053, 220.526316, 224.631579, 228.736842, 232.842105, 236.947368, 241.052632, 245.157895, 249.263158, 253.368421, 257.473684, 261.578947, 265.684211, 269.789474, 273.894737, 278. ]) Coordinates: * lev (lev) float64 25.0 75.0 125.0 175.0 225.0 275.0 325.0 375.0 ...- Example 2:
Display the entire model state dictionary as
xarray.Dataset:>>> model.to_xarray() <xarray.Dataset> Dimensions: (depth: 1, depth_bounds: 2, lev: 20, lev_bounds: 21) Coordinates: * depth (depth) float64 0.5 * depth_bounds (depth_bounds) float64 0.0 1.0 * lev (lev) float64 25.0 75.0 125.0 175.0 225.0 275.0 325.0 ... * lev_bounds (lev_bounds) float64 0.0 50.0 100.0 150.0 200.0 250.0 ... Data variables: Ts (depth) float64 288.0 Tatm (lev) float64 200.0 204.1 208.2 212.3 216.4 220.5 224.6 ...
- Example 3:
Combine model state and diagnostics into a single
xarray.Dataset:>>> # take a single timestep to populate the diagnostic variables >>> model.step_forward() >>> # Now look at the full output in xarray format >>> model.to_xarray(diagnostics=True) <xarray.Dataset> Dimensions: (depth: 1, depth_bounds: 2, lev: 20, lev_bounds: 21) Coordinates: * depth (depth) float64 0.5 * depth_bounds (depth_bounds) float64 0.0 1.0 * lev (lev) float64 25.0 75.0 125.0 175.0 225.0 275.0 325.0 ... * lev_bounds (lev_bounds) float64 0.0 50.0 100.0 150.0 200.0 250.0 ... Data variables: Ts (depth) float64 288.7 Tatm (lev) float64 201.3 204.0 208.0 212.0 216.1 220.2 ... ASR (depth) float64 240.0 ASRcld (depth) float64 0.0 ASRclr (depth) float64 240.0 LW_flux_down (lev_bounds) float64 0.0 12.63 19.47 26.07 32.92 40.1 ... LW_flux_down_clr (lev_bounds) float64 0.0 12.63 19.47 26.07 32.92 40.1 ... LW_flux_net (lev_bounds) float64 240.1 231.2 227.6 224.1 220.5 ... LW_flux_net_clr (lev_bounds) float64 240.1 231.2 227.6 224.1 220.5 ... LW_flux_up (lev_bounds) float64 240.1 243.9 247.1 250.2 253.4 ... LW_flux_up_clr (lev_bounds) float64 240.1 243.9 247.1 250.2 253.4 ... LW_sfc (depth) float64 128.9 LW_sfc_clr (depth) float64 128.9 OLR (depth) float64 240.1 OLRcld (depth) float64 0.0 OLRclr (depth) float64 240.1 SW_flux_down (lev_bounds) float64 341.3 323.1 318.0 313.5 309.5 ... SW_flux_down_clr (lev_bounds) float64 341.3 323.1 318.0 313.5 309.5 ... SW_flux_net (lev_bounds) float64 240.0 223.3 220.2 217.9 215.9 ... SW_flux_net_clr (lev_bounds) float64 240.0 223.3 220.2 217.9 215.9 ... SW_flux_up (lev_bounds) float64 101.3 99.88 97.77 95.64 93.57 ... SW_flux_up_clr (lev_bounds) float64 101.3 99.88 97.77 95.64 93.57 ... SW_sfc (depth) float64 163.8 SW_sfc_clr (depth) float64 163.8 TdotLW (lev) float64 -1.502 -0.6148 -0.5813 -0.6173 -0.6426 ... TdotLW_clr (lev) float64 -1.502 -0.6148 -0.5813 -0.6173 -0.6426 ... TdotSW (lev) float64 2.821 0.5123 0.3936 0.3368 0.3174 0.3299 ... TdotSW_clr (lev) float64 2.821 0.5123 0.3936 0.3368 0.3174 0.3299 ...
- Example 4:
Use the
climlab.to_xarray()method to convert thetimeavedictionary toxarray.Dataset:>>> # integrate forward one year and automatically store time averages >>> model.integrate_years(1) Integrating for 365 steps, 365.2422 days, or 1 years. Total elapsed time is 0.9993368783782377 years. >>> # Now look at model.timeave dictionary in xarray format >>> climlab.to_xarray(model.timeave) <xarray.Dataset> Dimensions: (depth: 1, depth_bounds: 2, lev: 20, lev_bounds: 21) Coordinates: * depth (depth) float64 0.5 * depth_bounds (depth_bounds) float64 0.0 1.0 * lev (lev) float64 25.0 75.0 125.0 175.0 225.0 275.0 325.0 ... * lev_bounds (lev_bounds) float64 0.0 50.0 100.0 150.0 200.0 250.0 ... Data variables: Ts (depth) float64 296.9 Tatm (lev) float64 217.1 203.1 200.8 200.4 201.7 204.2 ... ASR (depth) float64 240.1 ASRcld (depth) float64 0.0 ASRclr (depth) float64 240.1 LW_flux_down (lev_bounds) float64 0.0 16.55 20.24 24.12 28.15 32.57 ... LW_flux_down_clr (lev_bounds) float64 0.0 16.55 20.24 24.12 28.15 32.57 ... LW_flux_net (lev_bounds) float64 243.0 226.5 223.4 221.0 218.8 ... LW_flux_net_clr (lev_bounds) float64 243.0 226.5 223.4 221.0 218.8 ... LW_flux_up (lev_bounds) float64 243.0 243.0 243.7 245.1 246.9 ... LW_flux_up_clr (lev_bounds) float64 243.0 243.0 243.7 245.1 246.9 ... LW_sfc (depth) float64 162.5 LW_sfc_clr (depth) float64 162.5 OLR (depth) float64 243.0 OLRcld (depth) float64 0.0 OLRclr (depth) float64 243.0 SW_flux_down (lev_bounds) float64 341.3 323.1 317.9 313.5 309.5 ... SW_flux_down_clr (lev_bounds) float64 341.3 323.1 317.9 313.5 309.5 ... SW_flux_net (lev_bounds) float64 240.1 223.3 220.3 217.9 216.0 ... SW_flux_net_clr (lev_bounds) float64 240.1 223.3 220.3 217.9 216.0 ... SW_flux_up (lev_bounds) float64 101.2 99.81 97.69 95.56 93.5 ... SW_flux_up_clr (lev_bounds) float64 101.2 99.81 97.69 95.56 93.5 ... SW_sfc (depth) float64 163.7 SW_sfc_clr (depth) float64 163.7 TdotLW (lev) float64 -2.789 -0.5133 -0.4154 -0.3732 -0.3626 ... TdotLW_clr (lev) float64 -2.789 -0.5133 -0.4154 -0.3732 -0.3626 ... TdotSW (lev) float64 2.836 0.5078 0.3898 0.3332 0.3138 0.3267 ... TdotSW_clr (lev) float64 2.836 0.5078 0.3898 0.3332 0.3138 0.3267 ...