import matplotlib.pyplot as plt
import numpy as np
import cftime
import xarray
path1 = "/projects/dgs/persad_research/SIMULATION_DATA/ZARR/LENS1/SIM_VARIABLES/all_day_TREFHTMN.zarr"
path2 = "/projects/dgs/persad_research/SIMULATION_DATA/ZARR/LENS1/SIM_VARIABLES/all_day_TREFHTMX.zarr"
ds1 = xarray.open_zarr(path1)["TREFHTMN"].sel(member="001").sel(lat=30.26, lon=360-97.74, method='nearest')
ds2 = xarray.open_zarr(path2)["TREFHTMX"].sel(member="001").sel(lat=30.26, lon=360-97.74, method='nearest')
ds = (ds1 + ds2) / 2
start_a = cftime.DatetimeNoLeap(2021, 7, 1, 0, 0, 0, 0, has_year_zero=True)
end_a = cftime.DatetimeNoLeap(2021, 8, 30, 0, 0, 0, 0, has_year_zero=True)
start_b = cftime.DatetimeNoLeap(2024, 7, 1, 0, 0, 0, 0, has_year_zero=True)
end_b = cftime.DatetimeNoLeap(2024, 8, 30, 0, 0, 0, 0, has_year_zero=True)
scenario_a = (ds - 273.15).sel(time=slice(start_a, end_a))
scenario_b = (ds - 273.15).sel(time=slice(start_b, end_b))
f, (ax1, ax2) = plt.subplots(1, 2, figsize=(20, 6), facecolor='w')
scenario_a.plot(ax=ax1, color="Red", label="TREFHT")
scenario_b.plot(ax=ax2, color="Red", label="TREFHT")
ax1.plot([start_a, end_a], [scenario_a.mean(), scenario_a.mean()], color="Black", label="Time Average", linestyle="--")
ax2.plot([start_b, end_b], [scenario_b.mean(), scenario_b.mean()], color="Black", label="Time Average", linestyle="--")
ax1.set_title("Temperature Scenario A", fontsize=20)
ax2.set_title("Temperature Scenario B", fontsize=20)
ax1.set_ylabel("Temperature ($\\degree$C)", fontsize=15)
ax2.set_ylabel("Temperature ($\\degree$C)", fontsize=15)
ax1.set_xlabel("Time (Date)", fontsize=15)
ax2.set_xlabel("Time (Date)", fontsize=15)
ax1.set_ylim(22, 34)
ax2.set_ylim(22, 34)
ax1.set_xticks(
[
cftime.DatetimeNoLeap(2021, 7, 1, 0, 0, 0, 0, has_year_zero=True),
cftime.DatetimeNoLeap(2021, 7, 15, 0, 0, 0, 0, has_year_zero=True),
cftime.DatetimeNoLeap(2021, 8, 1, 0, 0, 0, 0, has_year_zero=True),
cftime.DatetimeNoLeap(2021, 8, 15, 0, 0, 0, 0, has_year_zero=True),
cftime.DatetimeNoLeap(2021, 8, 30, 0, 0, 0, 0, has_year_zero=True)
]
)
ax2.set_xticks(
[
cftime.DatetimeNoLeap(2024, 7, 1, 0, 0, 0, 0, has_year_zero=True),
cftime.DatetimeNoLeap(2024, 7, 15, 0, 0, 0, 0, has_year_zero=True),
cftime.DatetimeNoLeap(2024, 8, 1, 0, 0, 0, 0, has_year_zero=True),
cftime.DatetimeNoLeap(2024, 8, 15, 0, 0, 0, 0, has_year_zero=True),
cftime.DatetimeNoLeap(2024, 8, 30, 0, 0, 0, 0, has_year_zero=True)
]
)
ax1.set_xlim(start_a, end_a)
ax2.set_xlim(start_b, end_b)
ax1.grid()
ax2.grid()
ax1.legend(fontsize=12)
ax2.legend(fontsize=12)
f.show()
The mean state for these two summers is the same, but the temporal structures are very different. We can easily compare the heatwave patterns between the two summers by hand, but what about the other summers? Probably not, and this is just for one grid cell:
f, ax = plt.subplots(1, 1, figsize=(12, 6), facecolor='w')
(ds - 273.15).plot(ax=ax, color="Red")
ax.set_xlim(cftime.DatetimeNoLeap(2015, 12, 31, 0, 0, 0, 0, has_year_zero=True), cftime.DatetimeNoLeap(2080, 12, 31, 0, 0, 0, 0, has_year_zero=True))
ax.set_title("TREFHT LENS1 001 ALL-Forcing, lat=30.63, lon=262.5", fontsize=16)
ax.set_ylabel("Temperature ($\\degree$C)", fontsize=15)
ax.set_xlabel("Time (Date)", fontsize=15)
ax.set_ylim(-10, 40)
ax.grid()
Can we develop a system for automatically identifying heatwaves? Answer: yes!ΒΆ
First, we will use an extreme heat threshold for determining days of extreme heat. In the figure below, the red dots indicate hot days above that threshold:
A fixed or constant threshold may be useful for physical effects, such as material deformation, but is less useful for capturing physiological and environmental effects. Let's consider a seasonally variable threshold:
A seasonal threshold is typically generated by measuring the some percentile of day-of-year temperatures from a baseline dataset such as a preindustrial control or historical simulation. For example, the ETCCDI uses 90th percentile temperatures from 1961-1990.
The hot days identified by the threshold may or may not constitute a heatwave. Now we can start to identify heatwaves using a heatwave definition. The yellow dots in the figure below identify heatwave days alongside labels identifying each distinct heatwave.
We can sum the number of heatwave days to obtain a heatwave metric known as heatwave frequency (HWF).ΒΆ
We can modify the heatwave definition to filter for different "flavors" of heatwave. Notice how changing the definition influences which days constitute a heatwave, how many heatwaves are detected, and the value of HWF:
The Heatwave Parameter SpaceΒΆ
This system takes in several inputs and choices to produce the heatwave metrics. We can generalize these inputs and choices to describe the "heatwave parameter space":
What is the HDP and what problem does it solve?ΒΆ
All of these parameters makes systematically quantifying heatwave metrics a non-trivial task, particularly when working with large ensembles of global climate model data. If we streamline this process and develop software that is computationally fast enough, we can efficicently sample large samples of this parameter space to better understand how heatwave patterns evolve in the climate system. The HDP therefore adheres to the FAIR software principles:
Live DemonstrationΒΆ
First, we import the packages we need:
import xarray
import matplotlib.pyplot as plt
from dask.distributed import Client, LocalCluster
import src.hdp as hdp
import numpy as np
import cftime
import cartopy.crs as ccrs
Spin up a dask cluster to take advantage of parallel and distributed computing.
cluster = LocalCluster(
dashboard_address=":8004",
memory_limit="50GB",
threads_per_worker=2,
processes=True
)
client = Client(cluster)
cluster.scale(20)
client
Client
Client-c4fb3064-444c-11ef-b143-1423f23d0d20
Connection method: Cluster object | Cluster type: distributed.LocalCluster |
Dashboard: http://127.0.0.1:8004/status |
Cluster Info
LocalCluster
ab351c75
Dashboard: http://127.0.0.1:8004/status | Workers: 168 |
Total threads: 336 | Total memory: 7.64 TiB |
Status: running | Using processes: True |
Scheduler Info
Scheduler
Scheduler-5d13b6f3-672b-4059-a9b9-f1dfc372c8c3
Comm: tcp://127.0.0.1:46541 | Workers: 168 |
Dashboard: http://127.0.0.1:8004/status | Total threads: 336 |
Started: Just now | Total memory: 7.64 TiB |
Workers
Worker: 0
Comm: tcp://127.0.0.1:40235 | Total threads: 2 |
Dashboard: http://127.0.0.1:32893/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:45913 | |
Local directory: /tmp/dask-scratch-space/worker-vqneos_w |
Worker: 1
Comm: tcp://127.0.0.1:38673 | Total threads: 2 |
Dashboard: http://127.0.0.1:46825/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43751 | |
Local directory: /tmp/dask-scratch-space/worker-dd3fwhv6 |
Worker: 2
Comm: tcp://127.0.0.1:34569 | Total threads: 2 |
Dashboard: http://127.0.0.1:38357/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40723 | |
Local directory: /tmp/dask-scratch-space/worker-3l34vhlz |
Worker: 3
Comm: tcp://127.0.0.1:46361 | Total threads: 2 |
Dashboard: http://127.0.0.1:38619/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:34131 | |
Local directory: /tmp/dask-scratch-space/worker-af7jq2t1 |
Worker: 4
Comm: tcp://127.0.0.1:32933 | Total threads: 2 |
Dashboard: http://127.0.0.1:33591/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:41017 | |
Local directory: /tmp/dask-scratch-space/worker-ppd6wltj |
Worker: 5
Comm: tcp://127.0.0.1:36721 | Total threads: 2 |
Dashboard: http://127.0.0.1:42935/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:41771 | |
Local directory: /tmp/dask-scratch-space/worker-z05cxcke |
Worker: 6
Comm: tcp://127.0.0.1:40871 | Total threads: 2 |
Dashboard: http://127.0.0.1:45173/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:34813 | |
Local directory: /tmp/dask-scratch-space/worker-u51ss259 |
Worker: 7
Comm: tcp://127.0.0.1:41237 | Total threads: 2 |
Dashboard: http://127.0.0.1:37295/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36717 | |
Local directory: /tmp/dask-scratch-space/worker-gurzc9ae |
Worker: 8
Comm: tcp://127.0.0.1:40159 | Total threads: 2 |
Dashboard: http://127.0.0.1:45973/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:41553 | |
Local directory: /tmp/dask-scratch-space/worker-jcokhyty |
Worker: 9
Comm: tcp://127.0.0.1:38099 | Total threads: 2 |
Dashboard: http://127.0.0.1:33515/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:41779 | |
Local directory: /tmp/dask-scratch-space/worker-3evfwe4n |
Worker: 10
Comm: tcp://127.0.0.1:44813 | Total threads: 2 |
Dashboard: http://127.0.0.1:37639/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:42645 | |
Local directory: /tmp/dask-scratch-space/worker-46qdnx5e |
Worker: 11
Comm: tcp://127.0.0.1:33309 | Total threads: 2 |
Dashboard: http://127.0.0.1:40167/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:38555 | |
Local directory: /tmp/dask-scratch-space/worker-pl28afya |
Worker: 12
Comm: tcp://127.0.0.1:41907 | Total threads: 2 |
Dashboard: http://127.0.0.1:34767/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35613 | |
Local directory: /tmp/dask-scratch-space/worker-f93w9_0l |
Worker: 13
Comm: tcp://127.0.0.1:44957 | Total threads: 2 |
Dashboard: http://127.0.0.1:41873/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:44303 | |
Local directory: /tmp/dask-scratch-space/worker-owg3_gp5 |
Worker: 14
Comm: tcp://127.0.0.1:39887 | Total threads: 2 |
Dashboard: http://127.0.0.1:42949/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40125 | |
Local directory: /tmp/dask-scratch-space/worker-1j6_ze2j |
Worker: 15
Comm: tcp://127.0.0.1:36661 | Total threads: 2 |
Dashboard: http://127.0.0.1:43607/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:46271 | |
Local directory: /tmp/dask-scratch-space/worker-viv2bg0e |
Worker: 16
Comm: tcp://127.0.0.1:38807 | Total threads: 2 |
Dashboard: http://127.0.0.1:46477/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:38785 | |
Local directory: /tmp/dask-scratch-space/worker-xkx7iml8 |
Worker: 17
Comm: tcp://127.0.0.1:43737 | Total threads: 2 |
Dashboard: http://127.0.0.1:45383/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:46321 | |
Local directory: /tmp/dask-scratch-space/worker-zcuequtb |
Worker: 18
Comm: tcp://127.0.0.1:41021 | Total threads: 2 |
Dashboard: http://127.0.0.1:39257/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:32967 | |
Local directory: /tmp/dask-scratch-space/worker-pel9k7b7 |
Worker: 19
Comm: tcp://127.0.0.1:34243 | Total threads: 2 |
Dashboard: http://127.0.0.1:33585/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:39899 | |
Local directory: /tmp/dask-scratch-space/worker-gf5b7s13 |
Worker: 20
Comm: tcp://127.0.0.1:44581 | Total threads: 2 |
Dashboard: http://127.0.0.1:44671/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:34805 | |
Local directory: /tmp/dask-scratch-space/worker-ka01o4og |
Worker: 21
Comm: tcp://127.0.0.1:45263 | Total threads: 2 |
Dashboard: http://127.0.0.1:46279/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:38343 | |
Local directory: /tmp/dask-scratch-space/worker-0m1bplso |
Worker: 22
Comm: tcp://127.0.0.1:41421 | Total threads: 2 |
Dashboard: http://127.0.0.1:42723/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:38837 | |
Local directory: /tmp/dask-scratch-space/worker-my9bfqns |
Worker: 23
Comm: tcp://127.0.0.1:37183 | Total threads: 2 |
Dashboard: http://127.0.0.1:33729/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:42717 | |
Local directory: /tmp/dask-scratch-space/worker-a2820bfr |
Worker: 24
Comm: tcp://127.0.0.1:35551 | Total threads: 2 |
Dashboard: http://127.0.0.1:45083/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:45993 | |
Local directory: /tmp/dask-scratch-space/worker-z3016u4s |
Worker: 25
Comm: tcp://127.0.0.1:41789 | Total threads: 2 |
Dashboard: http://127.0.0.1:35889/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:44507 | |
Local directory: /tmp/dask-scratch-space/worker-aeteqo7t |
Worker: 26
Comm: tcp://127.0.0.1:38889 | Total threads: 2 |
Dashboard: http://127.0.0.1:33297/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:42719 | |
Local directory: /tmp/dask-scratch-space/worker-2e42q3y9 |
Worker: 27
Comm: tcp://127.0.0.1:45833 | Total threads: 2 |
Dashboard: http://127.0.0.1:34057/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:42849 | |
Local directory: /tmp/dask-scratch-space/worker-4dp6s5pq |
Worker: 28
Comm: tcp://127.0.0.1:34667 | Total threads: 2 |
Dashboard: http://127.0.0.1:43253/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:46153 | |
Local directory: /tmp/dask-scratch-space/worker-gp88_cis |
Worker: 29
Comm: tcp://127.0.0.1:38871 | Total threads: 2 |
Dashboard: http://127.0.0.1:40201/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35781 | |
Local directory: /tmp/dask-scratch-space/worker-_dwc2j5r |
Worker: 30
Comm: tcp://127.0.0.1:34077 | Total threads: 2 |
Dashboard: http://127.0.0.1:33231/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:39995 | |
Local directory: /tmp/dask-scratch-space/worker-5ikqwgv9 |
Worker: 31
Comm: tcp://127.0.0.1:32781 | Total threads: 2 |
Dashboard: http://127.0.0.1:42177/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:39719 | |
Local directory: /tmp/dask-scratch-space/worker-yx61_8df |
Worker: 32
Comm: tcp://127.0.0.1:33289 | Total threads: 2 |
Dashboard: http://127.0.0.1:42363/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35763 | |
Local directory: /tmp/dask-scratch-space/worker-2zg0m92a |
Worker: 33
Comm: tcp://127.0.0.1:36063 | Total threads: 2 |
Dashboard: http://127.0.0.1:36247/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35149 | |
Local directory: /tmp/dask-scratch-space/worker-u8yrzw9o |
Worker: 34
Comm: tcp://127.0.0.1:33371 | Total threads: 2 |
Dashboard: http://127.0.0.1:33607/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:32779 | |
Local directory: /tmp/dask-scratch-space/worker-spjpe582 |
Worker: 35
Comm: tcp://127.0.0.1:46085 | Total threads: 2 |
Dashboard: http://127.0.0.1:34849/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:42597 | |
Local directory: /tmp/dask-scratch-space/worker-5_zo_sm9 |
Worker: 36
Comm: tcp://127.0.0.1:39983 | Total threads: 2 |
Dashboard: http://127.0.0.1:35419/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40131 | |
Local directory: /tmp/dask-scratch-space/worker-iftj4gn1 |
Worker: 37
Comm: tcp://127.0.0.1:43891 | Total threads: 2 |
Dashboard: http://127.0.0.1:39515/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:38107 | |
Local directory: /tmp/dask-scratch-space/worker-lqlktjsq |
Worker: 38
Comm: tcp://127.0.0.1:40257 | Total threads: 2 |
Dashboard: http://127.0.0.1:40147/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43949 | |
Local directory: /tmp/dask-scratch-space/worker-5ozju3e_ |
Worker: 39
Comm: tcp://127.0.0.1:37041 | Total threads: 2 |
Dashboard: http://127.0.0.1:41171/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36713 | |
Local directory: /tmp/dask-scratch-space/worker-99cueyxx |
Worker: 40
Comm: tcp://127.0.0.1:43461 | Total threads: 2 |
Dashboard: http://127.0.0.1:44363/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:41947 | |
Local directory: /tmp/dask-scratch-space/worker-msb5rz8e |
Worker: 41
Comm: tcp://127.0.0.1:44599 | Total threads: 2 |
Dashboard: http://127.0.0.1:43905/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:33333 | |
Local directory: /tmp/dask-scratch-space/worker-hxz2q7mr |
Worker: 42
Comm: tcp://127.0.0.1:40293 | Total threads: 2 |
Dashboard: http://127.0.0.1:39513/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36295 | |
Local directory: /tmp/dask-scratch-space/worker-n3od5rxk |
Worker: 43
Comm: tcp://127.0.0.1:38517 | Total threads: 2 |
Dashboard: http://127.0.0.1:45707/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36341 | |
Local directory: /tmp/dask-scratch-space/worker-vg_04mg1 |
Worker: 44
Comm: tcp://127.0.0.1:36951 | Total threads: 2 |
Dashboard: http://127.0.0.1:37817/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:46015 | |
Local directory: /tmp/dask-scratch-space/worker-8enkq434 |
Worker: 45
Comm: tcp://127.0.0.1:33749 | Total threads: 2 |
Dashboard: http://127.0.0.1:35511/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35509 | |
Local directory: /tmp/dask-scratch-space/worker-blip8c4u |
Worker: 46
Comm: tcp://127.0.0.1:39611 | Total threads: 2 |
Dashboard: http://127.0.0.1:42981/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36715 | |
Local directory: /tmp/dask-scratch-space/worker-7_f3lf7o |
Worker: 47
Comm: tcp://127.0.0.1:46121 | Total threads: 2 |
Dashboard: http://127.0.0.1:45495/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:44341 | |
Local directory: /tmp/dask-scratch-space/worker-a7p7tpe8 |
Worker: 48
Comm: tcp://127.0.0.1:41981 | Total threads: 2 |
Dashboard: http://127.0.0.1:43893/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36615 | |
Local directory: /tmp/dask-scratch-space/worker-bf34avme |
Worker: 49
Comm: tcp://127.0.0.1:37109 | Total threads: 2 |
Dashboard: http://127.0.0.1:42851/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:41429 | |
Local directory: /tmp/dask-scratch-space/worker-n7ay6jnl |
Worker: 50
Comm: tcp://127.0.0.1:42599 | Total threads: 2 |
Dashboard: http://127.0.0.1:38489/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:45657 | |
Local directory: /tmp/dask-scratch-space/worker-1i7xnpzj |
Worker: 51
Comm: tcp://127.0.0.1:46467 | Total threads: 2 |
Dashboard: http://127.0.0.1:46281/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:41401 | |
Local directory: /tmp/dask-scratch-space/worker-4r475m88 |
Worker: 52
Comm: tcp://127.0.0.1:39497 | Total threads: 2 |
Dashboard: http://127.0.0.1:39715/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:42937 | |
Local directory: /tmp/dask-scratch-space/worker-35z4mb6t |
Worker: 53
Comm: tcp://127.0.0.1:34321 | Total threads: 2 |
Dashboard: http://127.0.0.1:39145/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36377 | |
Local directory: /tmp/dask-scratch-space/worker-fv46n4dr |
Worker: 54
Comm: tcp://127.0.0.1:35925 | Total threads: 2 |
Dashboard: http://127.0.0.1:33701/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36445 | |
Local directory: /tmp/dask-scratch-space/worker-m_vlm58n |
Worker: 55
Comm: tcp://127.0.0.1:39563 | Total threads: 2 |
Dashboard: http://127.0.0.1:36461/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36795 | |
Local directory: /tmp/dask-scratch-space/worker-95t50rfw |
Worker: 56
Comm: tcp://127.0.0.1:45313 | Total threads: 2 |
Dashboard: http://127.0.0.1:45365/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36743 | |
Local directory: /tmp/dask-scratch-space/worker-sncaay64 |
Worker: 57
Comm: tcp://127.0.0.1:44409 | Total threads: 2 |
Dashboard: http://127.0.0.1:40177/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:33287 | |
Local directory: /tmp/dask-scratch-space/worker-gh9tawlg |
Worker: 58
Comm: tcp://127.0.0.1:37487 | Total threads: 2 |
Dashboard: http://127.0.0.1:33709/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36483 | |
Local directory: /tmp/dask-scratch-space/worker-2xq5fiax |
Worker: 59
Comm: tcp://127.0.0.1:40835 | Total threads: 2 |
Dashboard: http://127.0.0.1:37245/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:45949 | |
Local directory: /tmp/dask-scratch-space/worker-zdhppmib |
Worker: 60
Comm: tcp://127.0.0.1:42925 | Total threads: 2 |
Dashboard: http://127.0.0.1:34827/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:42093 | |
Local directory: /tmp/dask-scratch-space/worker-np_luekh |
Worker: 61
Comm: tcp://127.0.0.1:45201 | Total threads: 2 |
Dashboard: http://127.0.0.1:42139/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:37165 | |
Local directory: /tmp/dask-scratch-space/worker-ns2xg6xl |
Worker: 62
Comm: tcp://127.0.0.1:35979 | Total threads: 2 |
Dashboard: http://127.0.0.1:43105/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:45413 | |
Local directory: /tmp/dask-scratch-space/worker-e915cpcl |
Worker: 63
Comm: tcp://127.0.0.1:34665 | Total threads: 2 |
Dashboard: http://127.0.0.1:38983/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43545 | |
Local directory: /tmp/dask-scratch-space/worker-bj8l_a_l |
Worker: 64
Comm: tcp://127.0.0.1:45475 | Total threads: 2 |
Dashboard: http://127.0.0.1:41963/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35677 | |
Local directory: /tmp/dask-scratch-space/worker-nyw5lbu1 |
Worker: 65
Comm: tcp://127.0.0.1:41423 | Total threads: 2 |
Dashboard: http://127.0.0.1:46817/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:41083 | |
Local directory: /tmp/dask-scratch-space/worker-klwaeefx |
Worker: 66
Comm: tcp://127.0.0.1:44645 | Total threads: 2 |
Dashboard: http://127.0.0.1:40505/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:45615 | |
Local directory: /tmp/dask-scratch-space/worker-f7f10x5k |
Worker: 67
Comm: tcp://127.0.0.1:40015 | Total threads: 2 |
Dashboard: http://127.0.0.1:40263/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:41003 | |
Local directory: /tmp/dask-scratch-space/worker-rcwidb9w |
Worker: 68
Comm: tcp://127.0.0.1:38175 | Total threads: 2 |
Dashboard: http://127.0.0.1:38017/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:42813 | |
Local directory: /tmp/dask-scratch-space/worker-zgqlb_kt |
Worker: 69
Comm: tcp://127.0.0.1:44291 | Total threads: 2 |
Dashboard: http://127.0.0.1:45667/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:45571 | |
Local directory: /tmp/dask-scratch-space/worker-7fotqv4p |
Worker: 70
Comm: tcp://127.0.0.1:43535 | Total threads: 2 |
Dashboard: http://127.0.0.1:45747/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36177 | |
Local directory: /tmp/dask-scratch-space/worker-f2jz4u0c |
Worker: 71
Comm: tcp://127.0.0.1:35625 | Total threads: 2 |
Dashboard: http://127.0.0.1:37801/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36025 | |
Local directory: /tmp/dask-scratch-space/worker-pnlmvini |
Worker: 72
Comm: tcp://127.0.0.1:34389 | Total threads: 2 |
Dashboard: http://127.0.0.1:43179/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:42247 | |
Local directory: /tmp/dask-scratch-space/worker-mhkw6q5o |
Worker: 73
Comm: tcp://127.0.0.1:40645 | Total threads: 2 |
Dashboard: http://127.0.0.1:37269/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36729 | |
Local directory: /tmp/dask-scratch-space/worker-d87xchl2 |
Worker: 74
Comm: tcp://127.0.0.1:44111 | Total threads: 2 |
Dashboard: http://127.0.0.1:34615/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:37969 | |
Local directory: /tmp/dask-scratch-space/worker-g3z0vn9j |
Worker: 75
Comm: tcp://127.0.0.1:34605 | Total threads: 2 |
Dashboard: http://127.0.0.1:40457/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40971 | |
Local directory: /tmp/dask-scratch-space/worker-d5l19vfi |
Worker: 76
Comm: tcp://127.0.0.1:41685 | Total threads: 2 |
Dashboard: http://127.0.0.1:39487/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:45155 | |
Local directory: /tmp/dask-scratch-space/worker-n8qogpws |
Worker: 77
Comm: tcp://127.0.0.1:43875 | Total threads: 2 |
Dashboard: http://127.0.0.1:43379/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36719 | |
Local directory: /tmp/dask-scratch-space/worker-h4vepwq9 |
Worker: 78
Comm: tcp://127.0.0.1:34413 | Total threads: 2 |
Dashboard: http://127.0.0.1:42823/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:44389 | |
Local directory: /tmp/dask-scratch-space/worker-x_l92yvk |
Worker: 79
Comm: tcp://127.0.0.1:33761 | Total threads: 2 |
Dashboard: http://127.0.0.1:40043/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:45633 | |
Local directory: /tmp/dask-scratch-space/worker-_afm18lw |
Worker: 80
Comm: tcp://127.0.0.1:40615 | Total threads: 2 |
Dashboard: http://127.0.0.1:34107/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:46029 | |
Local directory: /tmp/dask-scratch-space/worker-a9rg4wu2 |
Worker: 81
Comm: tcp://127.0.0.1:43045 | Total threads: 2 |
Dashboard: http://127.0.0.1:43941/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35815 | |
Local directory: /tmp/dask-scratch-space/worker-wffm1ehq |
Worker: 82
Comm: tcp://127.0.0.1:44275 | Total threads: 2 |
Dashboard: http://127.0.0.1:46819/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40561 | |
Local directory: /tmp/dask-scratch-space/worker-vcow_l31 |
Worker: 83
Comm: tcp://127.0.0.1:33335 | Total threads: 2 |
Dashboard: http://127.0.0.1:43039/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:37315 | |
Local directory: /tmp/dask-scratch-space/worker-j81sra61 |
Worker: 84
Comm: tcp://127.0.0.1:33437 | Total threads: 2 |
Dashboard: http://127.0.0.1:36279/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43629 | |
Local directory: /tmp/dask-scratch-space/worker-4naegvbc |
Worker: 85
Comm: tcp://127.0.0.1:40987 | Total threads: 2 |
Dashboard: http://127.0.0.1:40867/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:46295 | |
Local directory: /tmp/dask-scratch-space/worker-of27b_80 |
Worker: 86
Comm: tcp://127.0.0.1:39979 | Total threads: 2 |
Dashboard: http://127.0.0.1:42939/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:34795 | |
Local directory: /tmp/dask-scratch-space/worker-2l_lq3a5 |
Worker: 87
Comm: tcp://127.0.0.1:39553 | Total threads: 2 |
Dashboard: http://127.0.0.1:44399/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36771 | |
Local directory: /tmp/dask-scratch-space/worker-bw7oqzw_ |
Worker: 88
Comm: tcp://127.0.0.1:43689 | Total threads: 2 |
Dashboard: http://127.0.0.1:37545/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43141 | |
Local directory: /tmp/dask-scratch-space/worker-lylwyzib |
Worker: 89
Comm: tcp://127.0.0.1:37157 | Total threads: 2 |
Dashboard: http://127.0.0.1:46067/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:32827 | |
Local directory: /tmp/dask-scratch-space/worker-45f29nfx |
Worker: 90
Comm: tcp://127.0.0.1:35069 | Total threads: 2 |
Dashboard: http://127.0.0.1:39927/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:45895 | |
Local directory: /tmp/dask-scratch-space/worker-qy3nh7ib |
Worker: 91
Comm: tcp://127.0.0.1:39671 | Total threads: 2 |
Dashboard: http://127.0.0.1:42433/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:33209 | |
Local directory: /tmp/dask-scratch-space/worker-liw58u8a |
Worker: 92
Comm: tcp://127.0.0.1:45367 | Total threads: 2 |
Dashboard: http://127.0.0.1:35357/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:46831 | |
Local directory: /tmp/dask-scratch-space/worker-opdvmc_5 |
Worker: 93
Comm: tcp://127.0.0.1:40821 | Total threads: 2 |
Dashboard: http://127.0.0.1:41653/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43763 | |
Local directory: /tmp/dask-scratch-space/worker-5fc8byhz |
Worker: 94
Comm: tcp://127.0.0.1:34117 | Total threads: 2 |
Dashboard: http://127.0.0.1:32891/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43067 | |
Local directory: /tmp/dask-scratch-space/worker-s5k1_w4m |
Worker: 95
Comm: tcp://127.0.0.1:44287 | Total threads: 2 |
Dashboard: http://127.0.0.1:46417/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35223 | |
Local directory: /tmp/dask-scratch-space/worker-aparuqwz |
Worker: 96
Comm: tcp://127.0.0.1:41315 | Total threads: 2 |
Dashboard: http://127.0.0.1:45473/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40191 | |
Local directory: /tmp/dask-scratch-space/worker-vhx5kf_s |
Worker: 97
Comm: tcp://127.0.0.1:44875 | Total threads: 2 |
Dashboard: http://127.0.0.1:41425/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43363 | |
Local directory: /tmp/dask-scratch-space/worker-jni6qrw0 |
Worker: 98
Comm: tcp://127.0.0.1:36755 | Total threads: 2 |
Dashboard: http://127.0.0.1:40307/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:45897 | |
Local directory: /tmp/dask-scratch-space/worker-52dxf0rg |
Worker: 99
Comm: tcp://127.0.0.1:33495 | Total threads: 2 |
Dashboard: http://127.0.0.1:36575/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40979 | |
Local directory: /tmp/dask-scratch-space/worker-3ty_2748 |
Worker: 100
Comm: tcp://127.0.0.1:40551 | Total threads: 2 |
Dashboard: http://127.0.0.1:44913/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35405 | |
Local directory: /tmp/dask-scratch-space/worker-d73_cq83 |
Worker: 101
Comm: tcp://127.0.0.1:36551 | Total threads: 2 |
Dashboard: http://127.0.0.1:34199/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:34217 | |
Local directory: /tmp/dask-scratch-space/worker-hox28jah |
Worker: 102
Comm: tcp://127.0.0.1:43817 | Total threads: 2 |
Dashboard: http://127.0.0.1:44727/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:41773 | |
Local directory: /tmp/dask-scratch-space/worker-2a4lzgh0 |
Worker: 103
Comm: tcp://127.0.0.1:43759 | Total threads: 2 |
Dashboard: http://127.0.0.1:42615/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:44871 | |
Local directory: /tmp/dask-scratch-space/worker-6__fih0q |
Worker: 104
Comm: tcp://127.0.0.1:38085 | Total threads: 2 |
Dashboard: http://127.0.0.1:37745/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:38075 | |
Local directory: /tmp/dask-scratch-space/worker-8bbroc3g |
Worker: 105
Comm: tcp://127.0.0.1:38797 | Total threads: 2 |
Dashboard: http://127.0.0.1:45397/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43071 | |
Local directory: /tmp/dask-scratch-space/worker-m2iyu1x9 |
Worker: 106
Comm: tcp://127.0.0.1:37195 | Total threads: 2 |
Dashboard: http://127.0.0.1:35199/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:44071 | |
Local directory: /tmp/dask-scratch-space/worker-wvxevix5 |
Worker: 107
Comm: tcp://127.0.0.1:40763 | Total threads: 2 |
Dashboard: http://127.0.0.1:44209/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35669 | |
Local directory: /tmp/dask-scratch-space/worker-zksabfak |
Worker: 108
Comm: tcp://127.0.0.1:33541 | Total threads: 2 |
Dashboard: http://127.0.0.1:35853/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:42257 | |
Local directory: /tmp/dask-scratch-space/worker-eqj1swn0 |
Worker: 109
Comm: tcp://127.0.0.1:45839 | Total threads: 2 |
Dashboard: http://127.0.0.1:36471/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40117 | |
Local directory: /tmp/dask-scratch-space/worker-59dlma9t |
Worker: 110
Comm: tcp://127.0.0.1:46431 | Total threads: 2 |
Dashboard: http://127.0.0.1:37607/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:46763 | |
Local directory: /tmp/dask-scratch-space/worker-2j6nzdui |
Worker: 111
Comm: tcp://127.0.0.1:40981 | Total threads: 2 |
Dashboard: http://127.0.0.1:34895/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:45059 | |
Local directory: /tmp/dask-scratch-space/worker-68vucuu7 |
Worker: 112
Comm: tcp://127.0.0.1:45009 | Total threads: 2 |
Dashboard: http://127.0.0.1:44493/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36027 | |
Local directory: /tmp/dask-scratch-space/worker-upjafwvq |
Worker: 113
Comm: tcp://127.0.0.1:45269 | Total threads: 2 |
Dashboard: http://127.0.0.1:43133/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:34281 | |
Local directory: /tmp/dask-scratch-space/worker-vun0v2wi |
Worker: 114
Comm: tcp://127.0.0.1:46211 | Total threads: 2 |
Dashboard: http://127.0.0.1:33543/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40499 | |
Local directory: /tmp/dask-scratch-space/worker-tobdzmvv |
Worker: 115
Comm: tcp://127.0.0.1:45497 | Total threads: 2 |
Dashboard: http://127.0.0.1:35463/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:37189 | |
Local directory: /tmp/dask-scratch-space/worker-fdiu5u97 |
Worker: 116
Comm: tcp://127.0.0.1:45825 | Total threads: 2 |
Dashboard: http://127.0.0.1:43483/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43257 | |
Local directory: /tmp/dask-scratch-space/worker-7uacstnz |
Worker: 117
Comm: tcp://127.0.0.1:45485 | Total threads: 2 |
Dashboard: http://127.0.0.1:37163/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43643 | |
Local directory: /tmp/dask-scratch-space/worker-i5k5vwb5 |
Worker: 118
Comm: tcp://127.0.0.1:36633 | Total threads: 2 |
Dashboard: http://127.0.0.1:37895/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:37887 | |
Local directory: /tmp/dask-scratch-space/worker-lmmj6f7y |
Worker: 119
Comm: tcp://127.0.0.1:37821 | Total threads: 2 |
Dashboard: http://127.0.0.1:35353/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:33015 | |
Local directory: /tmp/dask-scratch-space/worker-ghyrtq2m |
Worker: 120
Comm: tcp://127.0.0.1:37413 | Total threads: 2 |
Dashboard: http://127.0.0.1:42137/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:44283 | |
Local directory: /tmp/dask-scratch-space/worker-9miinvnr |
Worker: 121
Comm: tcp://127.0.0.1:33279 | Total threads: 2 |
Dashboard: http://127.0.0.1:38123/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35255 | |
Local directory: /tmp/dask-scratch-space/worker-ayn49kvq |
Worker: 122
Comm: tcp://127.0.0.1:39007 | Total threads: 2 |
Dashboard: http://127.0.0.1:42097/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40681 | |
Local directory: /tmp/dask-scratch-space/worker-higj94bj |
Worker: 123
Comm: tcp://127.0.0.1:43687 | Total threads: 2 |
Dashboard: http://127.0.0.1:40663/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:39593 | |
Local directory: /tmp/dask-scratch-space/worker-2ux24z7u |
Worker: 124
Comm: tcp://127.0.0.1:44497 | Total threads: 2 |
Dashboard: http://127.0.0.1:44031/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:37605 | |
Local directory: /tmp/dask-scratch-space/worker-w80qb5ds |
Worker: 125
Comm: tcp://127.0.0.1:37229 | Total threads: 2 |
Dashboard: http://127.0.0.1:36507/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40689 | |
Local directory: /tmp/dask-scratch-space/worker-4xzhtkro |
Worker: 126
Comm: tcp://127.0.0.1:40379 | Total threads: 2 |
Dashboard: http://127.0.0.1:34727/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:45231 | |
Local directory: /tmp/dask-scratch-space/worker-mci43e8g |
Worker: 127
Comm: tcp://127.0.0.1:45499 | Total threads: 2 |
Dashboard: http://127.0.0.1:45159/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:46409 | |
Local directory: /tmp/dask-scratch-space/worker-8aa9haj0 |
Worker: 128
Comm: tcp://127.0.0.1:45635 | Total threads: 2 |
Dashboard: http://127.0.0.1:40055/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:38299 | |
Local directory: /tmp/dask-scratch-space/worker-w8b359bv |
Worker: 129
Comm: tcp://127.0.0.1:34369 | Total threads: 2 |
Dashboard: http://127.0.0.1:33439/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:45261 | |
Local directory: /tmp/dask-scratch-space/worker-0ex7i6zc |
Worker: 130
Comm: tcp://127.0.0.1:38845 | Total threads: 2 |
Dashboard: http://127.0.0.1:35367/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43623 | |
Local directory: /tmp/dask-scratch-space/worker-6z4dgp20 |
Worker: 131
Comm: tcp://127.0.0.1:33789 | Total threads: 2 |
Dashboard: http://127.0.0.1:42735/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:33201 | |
Local directory: /tmp/dask-scratch-space/worker-1svqpv10 |
Worker: 132
Comm: tcp://127.0.0.1:37391 | Total threads: 2 |
Dashboard: http://127.0.0.1:44517/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35835 | |
Local directory: /tmp/dask-scratch-space/worker-8aee6vyq |
Worker: 133
Comm: tcp://127.0.0.1:44831 | Total threads: 2 |
Dashboard: http://127.0.0.1:34325/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43405 | |
Local directory: /tmp/dask-scratch-space/worker-31jhipcg |
Worker: 134
Comm: tcp://127.0.0.1:35549 | Total threads: 2 |
Dashboard: http://127.0.0.1:41191/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:42379 | |
Local directory: /tmp/dask-scratch-space/worker-nnkzq_yz |
Worker: 135
Comm: tcp://127.0.0.1:33563 | Total threads: 2 |
Dashboard: http://127.0.0.1:38491/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40895 | |
Local directory: /tmp/dask-scratch-space/worker-mb34hiww |
Worker: 136
Comm: tcp://127.0.0.1:34555 | Total threads: 2 |
Dashboard: http://127.0.0.1:40839/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43929 | |
Local directory: /tmp/dask-scratch-space/worker-0wnnr_jm |
Worker: 137
Comm: tcp://127.0.0.1:36287 | Total threads: 2 |
Dashboard: http://127.0.0.1:46517/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43259 | |
Local directory: /tmp/dask-scratch-space/worker-gea0eipo |
Worker: 138
Comm: tcp://127.0.0.1:38443 | Total threads: 2 |
Dashboard: http://127.0.0.1:35407/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35519 | |
Local directory: /tmp/dask-scratch-space/worker-948we71n |
Worker: 139
Comm: tcp://127.0.0.1:33205 | Total threads: 2 |
Dashboard: http://127.0.0.1:38185/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:39975 | |
Local directory: /tmp/dask-scratch-space/worker-bae67e4j |
Worker: 140
Comm: tcp://127.0.0.1:44903 | Total threads: 2 |
Dashboard: http://127.0.0.1:37933/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:39357 | |
Local directory: /tmp/dask-scratch-space/worker-6qo16chz |
Worker: 141
Comm: tcp://127.0.0.1:33101 | Total threads: 2 |
Dashboard: http://127.0.0.1:35795/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35349 | |
Local directory: /tmp/dask-scratch-space/worker-ctq2qczo |
Worker: 142
Comm: tcp://127.0.0.1:44467 | Total threads: 2 |
Dashboard: http://127.0.0.1:39221/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:44909 | |
Local directory: /tmp/dask-scratch-space/worker-r7k88u22 |
Worker: 143
Comm: tcp://127.0.0.1:44815 | Total threads: 2 |
Dashboard: http://127.0.0.1:45621/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40027 | |
Local directory: /tmp/dask-scratch-space/worker-u_3mtxtt |
Worker: 144
Comm: tcp://127.0.0.1:32953 | Total threads: 2 |
Dashboard: http://127.0.0.1:40683/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43425 | |
Local directory: /tmp/dask-scratch-space/worker-w6_ue73r |
Worker: 145
Comm: tcp://127.0.0.1:35921 | Total threads: 2 |
Dashboard: http://127.0.0.1:34817/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:44799 | |
Local directory: /tmp/dask-scratch-space/worker-23vfokjj |
Worker: 146
Comm: tcp://127.0.0.1:40859 | Total threads: 2 |
Dashboard: http://127.0.0.1:39049/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:33203 | |
Local directory: /tmp/dask-scratch-space/worker-dhxgeh0g |
Worker: 147
Comm: tcp://127.0.0.1:38783 | Total threads: 2 |
Dashboard: http://127.0.0.1:37945/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:37369 | |
Local directory: /tmp/dask-scratch-space/worker-l3rlasqj |
Worker: 148
Comm: tcp://127.0.0.1:36849 | Total threads: 2 |
Dashboard: http://127.0.0.1:45681/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:37565 | |
Local directory: /tmp/dask-scratch-space/worker-eajazkxl |
Worker: 149
Comm: tcp://127.0.0.1:34419 | Total threads: 2 |
Dashboard: http://127.0.0.1:44843/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:33511 | |
Local directory: /tmp/dask-scratch-space/worker-2f83jqca |
Worker: 150
Comm: tcp://127.0.0.1:42399 | Total threads: 2 |
Dashboard: http://127.0.0.1:38003/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35851 | |
Local directory: /tmp/dask-scratch-space/worker-y9b9js1l |
Worker: 151
Comm: tcp://127.0.0.1:45105 | Total threads: 2 |
Dashboard: http://127.0.0.1:46779/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40059 | |
Local directory: /tmp/dask-scratch-space/worker-nx8zk6s_ |
Worker: 152
Comm: tcp://127.0.0.1:41519 | Total threads: 2 |
Dashboard: http://127.0.0.1:35849/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:44349 | |
Local directory: /tmp/dask-scratch-space/worker-94i8v7a4 |
Worker: 153
Comm: tcp://127.0.0.1:42467 | Total threads: 2 |
Dashboard: http://127.0.0.1:33353/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:44095 | |
Local directory: /tmp/dask-scratch-space/worker-9tfbqmo4 |
Worker: 154
Comm: tcp://127.0.0.1:41809 | Total threads: 2 |
Dashboard: http://127.0.0.1:37435/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:37491 | |
Local directory: /tmp/dask-scratch-space/worker-_ufoeio1 |
Worker: 155
Comm: tcp://127.0.0.1:36387 | Total threads: 2 |
Dashboard: http://127.0.0.1:36635/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:45243 | |
Local directory: /tmp/dask-scratch-space/worker-gp2elojv |
Worker: 156
Comm: tcp://127.0.0.1:46109 | Total threads: 2 |
Dashboard: http://127.0.0.1:41745/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:41705 | |
Local directory: /tmp/dask-scratch-space/worker-06uh0r9z |
Worker: 157
Comm: tcp://127.0.0.1:35939 | Total threads: 2 |
Dashboard: http://127.0.0.1:35493/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:39203 | |
Local directory: /tmp/dask-scratch-space/worker-q9zq3k9l |
Worker: 158
Comm: tcp://127.0.0.1:46143 | Total threads: 2 |
Dashboard: http://127.0.0.1:33593/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:44695 | |
Local directory: /tmp/dask-scratch-space/worker-w05xg1bi |
Worker: 159
Comm: tcp://127.0.0.1:35247 | Total threads: 2 |
Dashboard: http://127.0.0.1:34445/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36159 | |
Local directory: /tmp/dask-scratch-space/worker-43sn9dqo |
Worker: 160
Comm: tcp://127.0.0.1:40445 | Total threads: 2 |
Dashboard: http://127.0.0.1:37145/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:34573 | |
Local directory: /tmp/dask-scratch-space/worker-34wpxhqu |
Worker: 161
Comm: tcp://127.0.0.1:39873 | Total threads: 2 |
Dashboard: http://127.0.0.1:43423/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40013 | |
Local directory: /tmp/dask-scratch-space/worker-oxj4pycn |
Worker: 162
Comm: tcp://127.0.0.1:36687 | Total threads: 2 |
Dashboard: http://127.0.0.1:37653/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:43593 | |
Local directory: /tmp/dask-scratch-space/worker-ipkct5oy |
Worker: 163
Comm: tcp://127.0.0.1:39041 | Total threads: 2 |
Dashboard: http://127.0.0.1:43121/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:40803 | |
Local directory: /tmp/dask-scratch-space/worker-9gk7omzm |
Worker: 164
Comm: tcp://127.0.0.1:46243 | Total threads: 2 |
Dashboard: http://127.0.0.1:46429/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:35197 | |
Local directory: /tmp/dask-scratch-space/worker-w28i9g2j |
Worker: 165
Comm: tcp://127.0.0.1:38901 | Total threads: 2 |
Dashboard: http://127.0.0.1:44775/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:41555 | |
Local directory: /tmp/dask-scratch-space/worker-cv0o5i_1 |
Worker: 166
Comm: tcp://127.0.0.1:39055 | Total threads: 2 |
Dashboard: http://127.0.0.1:39617/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:36143 | |
Local directory: /tmp/dask-scratch-space/worker-vmvo1iuo |
Worker: 167
Comm: tcp://127.0.0.1:37095 | Total threads: 2 |
Dashboard: http://127.0.0.1:39925/status | Memory: 46.57 GiB |
Nanny: tcp://127.0.0.1:42047 | |
Local directory: /tmp/dask-scratch-space/worker-xhibsmei |
Load our pre-industrial control dataset, selecting a smaller time range for the sake of time.
lens1_PIC_ensemble_trefhtmn_path = "/projects/dgs/persad_research/SIMULATION_DATA/ZARR/LENS1/SIM_VARIABLES/preindustrial_day_TREFHTMN.zarr"
lens1_PIC_ensemble_trefhtmn = xarray.open_zarr(lens1_PIC_ensemble_trefhtmn_path)["TREFHTMN"]
start_time = cftime.DatetimeNoLeap(1800, 1, 1, 0, 0, 0, 0, has_year_zero=True)
end_time = cftime.DatetimeNoLeap(1849, 12, 31, 0, 0, 0, 0, has_year_zero=True)
lens1_PIC_ensemble_trefhtmn = lens1_PIC_ensemble_trefhtmn.sel(time=slice(start_time, end_time))
Then call the HDP to compute a seasonally-varying threshold for a range of percentiles.
pic_threshold_ds = hdp.compute_threshold(lens1_PIC_ensemble_trefhtmn, percentiles=np.array([0.9, 0.95, 0.99]))
pic_threshold_ds
<xarray.Dataset> Size: 484MB Dimensions: (lat: 192, lon: 288, day: 365, percentile: 3) Coordinates: * lon (lon) float64 2kB 0.0 1.25 2.5 3.75 ... 355.0 356.2 357.5 358.8 * lat (lat) float64 2kB -90.0 -89.06 -88.12 ... 88.12 89.06 90.0 * day (day) int64 3kB 0 1 2 3 4 5 6 7 ... 358 359 360 361 362 363 364 * percentile (percentile) float64 24B 0.9 0.95 0.99 Data variables: threshold (lat, lon, day, percentile) float64 484MB dask.array<chunksize=(48, 36, 365, 3), meta=np.ndarray> Attributes: description: Percentile temperatures. percentiles: [0.9 0.95 0.99] temperature dataset path: No path provided.
%%time
pic_threshold_ds = pic_threshold_ds.compute()
CPU times: user 3.77 s, sys: 1.79 s, total: 5.56 s Wall time: 32.9 s
To confirm our threshold, let's plot the global mean for a percentile:
pic_threshold_ds["threshold"].weighted(np.cos(np.deg2rad(pic_threshold_ds.lat))).mean(dim=["lat", "lon"]).sel(percentile=0.9, method="nearest").plot()
[<matplotlib.lines.Line2D at 0x7f75b71bc3b0>]
Now let's load the dataset we are interested in calculating heatwave metrics for. LENS1, ALL-forcing, we will select one ensemble member for the sake of time, but it is entirely possible to select more and add as many additional dimensions to the xarray dataset.
lens1_ALL_ensemble_trefhtmn_path = "/projects/dgs/persad_research/SIMULATION_DATA/ZARR/LENS1/SIM_VARIABLES/all_day_TREFHTMN.zarr"
lens1_ALL_ensemble_trefhtmn = xarray.open_zarr(lens1_ALL_ensemble_trefhtmn_path)["TREFHTMN"].sel(member='001')
start_time = cftime.DatetimeNoLeap(2015, 1, 1, 0, 0, 0, 0, has_year_zero=True)
end_time = cftime.DatetimeNoLeap(2090, 12, 31, 0, 0, 0, 0, has_year_zero=True)
lens1_ALL_ensemble_trefhtmn = lens1_ALL_ensemble_trefhtmn.sel(time=slice(start_time, end_time))
We then call the HDP again to build our metric dataset, supplying our definitions. Note that it will only compute heatwave metrics for the warm seasons for bot hemispheres separately by default. In a future update, this will be easily configured.
definitions = [
[3, 0, 0],
[3, 1, 1],
[4, 0, 0],
[4, 1, 1]
]
hw_metrics = hdp.sample_heatwave_metrics(lens1_ALL_ensemble_trefhtmn, pic_threshold_ds["threshold"], definitions)
hw_metrics
<xarray.Dataset> Size: 807MB Dimensions: (percentile: 3, definition: 4, lat: 192, lon: 288, year: 76) Coordinates: * lat (lat) float64 2kB -90.0 -89.06 -88.12 ... 88.12 89.06 90.0 * lon (lon) float64 2kB 0.0 1.25 2.5 3.75 ... 355.0 356.2 357.5 358.8 member <U3 12B '001' * percentile (percentile) float64 24B 0.9 0.95 0.99 * year (year) int64 608B 2015 2016 2017 2018 ... 2087 2088 2089 2090 * definition (definition) <U5 80B '3-0-0' '3-1-1' '4-0-0' '4-1-1' Data variables: HWF (percentile, definition, lat, lon, year) int64 403MB dask.array<chunksize=(1, 1, 96, 72, 76), meta=np.ndarray> HWD (percentile, definition, lat, lon, year) int64 403MB dask.array<chunksize=(1, 1, 96, 72, 76), meta=np.ndarray>
%%time
hw_metrics = hw_metrics.compute()
/home/jupyterhub/miniconda-persad/envs/lab/lib/python3.12/site-packages/distributed/client.py:3164: UserWarning: Sending large graph of size 526.40 MiB. This may cause some slowdown. Consider scattering data ahead of time and using futures. warnings.warn(
CPU times: user 8.86 s, sys: 4.66 s, total: 13.5 s Wall time: 1min 12s
We can then explore the results by applying various reductions and plotting. Automatic figure generation is not fully implemented in the HDP, but is planned for the 1.0 release as an integral feature of the package. For now, we can manually generate plots from the dataset:
f, (ax1, ax2) = plt.subplots(1, 2, figsize=(20, 8), facecolor='w')
hw_metrics["HWF"].weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon"]).sel(definition="3-0-0").sel(percentile=0.9, method="nearest").plot(ax=ax1, color="Blue", label="90th Perc.")
hw_metrics["HWF"].weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon"]).sel(definition="3-0-0").sel(percentile=0.95, method="nearest").plot(ax=ax1, color="Purple", label="95th Perc.")
hw_metrics["HWF"].weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon"]).sel(definition="3-0-0").sel(percentile=0.99, method="nearest").plot(ax=ax1, color="Red", label="99th Perc.")
hw_metrics["HWF"].weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon"]).sel(definition="3-0-0").sel(percentile=0.9, method="nearest").plot(ax=ax2, color="Blue", label="3-0-0")
hw_metrics["HWF"].weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon"]).sel(definition="3-1-1").sel(percentile=0.9, method="nearest").plot(ax=ax2, color="Purple", label="3-1-1")
hw_metrics["HWF"].weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon"]).sel(definition="4-0-0").sel(percentile=0.9, method="nearest").plot(ax=ax2, color="Red", label="4-0-0")
hw_metrics["HWF"].weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon"]).sel(definition="4-1-1").sel(percentile=0.9, method="nearest").plot(ax=ax2, color="Orange", label="4-1-1")
hw_metrics["HWF"].weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon"]).sel(definition="3-0-0").sel(percentile=0.95, method="nearest").plot(ax=ax2, color="Blue",)
hw_metrics["HWF"].weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon"]).sel(definition="3-1-1").sel(percentile=0.95, method="nearest").plot(ax=ax2, color="Purple")
hw_metrics["HWF"].weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon"]).sel(definition="4-0-0").sel(percentile=0.95, method="nearest").plot(ax=ax2, color="Red")
hw_metrics["HWF"].weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon"]).sel(definition="4-1-1").sel(percentile=0.95, method="nearest").plot(ax=ax2, color="Orange")
hw_metrics["HWF"].weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon"]).sel(definition="3-0-0").sel(percentile=0.99, method="nearest").plot(ax=ax2, color="Blue")
hw_metrics["HWF"].weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon"]).sel(definition="3-1-1").sel(percentile=0.99, method="nearest").plot(ax=ax2, color="Purple")
hw_metrics["HWF"].weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon"]).sel(definition="4-0-0").sel(percentile=0.99, method="nearest").plot(ax=ax2, color="Red")
hw_metrics["HWF"].weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon"]).sel(definition="4-1-1").sel(percentile=0.99, method="nearest").plot(ax=ax2, color="Orange")
ax1.set_xlim(2015, 2090)
ax1.set_ylim(0, 140)
ax1.grid()
ax1.legend(fontsize=15)
ax1.set_xlabel("Time (Year)", fontsize=15)
ax1.set_ylabel("Heatwave Frequency (Days)", fontsize=15)
ax1.set_title("Fixed at Definition 3-0-0", fontsize=18)
ax2.set_xlim(2015, 2090)
ax2.set_ylim(0, 140)
ax2.grid()
ax2.legend(fontsize=15)
ax2.set_xlabel("Time (Year)", fontsize=15)
ax2.set_ylabel("Heatwave Frequency (Days)", fontsize=15)
ax2.set_title("Fixed at 90th, 95th, and 99th Percentiles", fontsize=18)
f.suptitle("Heatwave Frequency, Global Mean, LENS1 ALL-Forcing, Member 001", fontsize=22)
f.show()
proj = ccrs.Robinson()
f, axes = plt.subplots(2, 3, figsize=(20, 8), facecolor='w', subplot_kw=dict(projection=proj))
cmap = "Reds"
transform = ccrs.PlateCarree()
levels = np.arange(0, 141, 20)
hw_metrics["HWF"].rename("Heatwave Frequency (Days)").sel(percentile=0.9, method="nearest").sel(definition="3-1-1").mean(dim="year").plot(ax=axes[0, 0], cmap=cmap, transform=transform, levels=levels)
hw_metrics["HWF"].rename("Heatwave Frequency (Days)").sel(percentile=0.9, method="nearest").sel(definition="4-1-1").mean(dim="year").plot(ax=axes[1, 0], cmap=cmap, transform=transform, levels=levels)
hw_metrics["HWF"].rename("Heatwave Frequency (Days)").sel(percentile=0.95, method="nearest").sel(definition="3-1-1").mean(dim="year").plot(ax=axes[0, 1], cmap=cmap, transform=transform, levels=levels)
hw_metrics["HWF"].rename("Heatwave Frequency (Days)").sel(percentile=0.95, method="nearest").sel(definition="4-1-1").mean(dim="year").plot(ax=axes[1, 1], cmap=cmap, transform=transform, levels=levels)
hw_metrics["HWF"].rename("Heatwave Frequency (Days)").sel(percentile=0.99, method="nearest").sel(definition="3-1-1").mean(dim="year").plot(ax=axes[0, 2], cmap=cmap, transform=transform, levels=levels)
hw_metrics["HWF"].rename("Heatwave Frequency (Days)").sel(percentile=0.99, method="nearest").sel(definition="4-1-1").mean(dim="year").plot(ax=axes[1, 2], cmap=cmap, transform=transform, levels=levels)
fz = 12
axes[0, 0].set_title("90th Percentile, 3-1-1", fontsize=fz)
axes[1, 0].set_title("90th Percentile, 4-1-1", fontsize=fz)
axes[0, 1].set_title("95th Percentile, 3-1-1", fontsize=fz)
axes[1, 1].set_title("95th Percentile, 4-1-1", fontsize=fz)
axes[0, 2].set_title("99th Percentile, 3-1-1", fontsize=fz)
axes[1, 2].set_title("99th Percentile, 4-1-1", fontsize=fz)
for ax in axes.flatten():
ax.coastlines()
f.suptitle("Heatwave Frequency, 2015-2090 Mean, LENS1 ALL-Forcing, Member 001", fontsize=22)
f.show()
ds1 = hw_metrics["HWF"].sel(percentile=0.9, method="nearest").sel(definition="3-1-1").mean(dim="year")
ds2 = hw_metrics["HWF"].sel(percentile=0.99, method="nearest").sel(definition="4-1-1").mean(dim="year")
diff = (ds1 - ds2).rename("$\\Delta$ Heatwave Frequency (Days)")
proj = ccrs.Robinson()
f, ax1 = plt.subplots(1, 1, figsize=(10, 5), facecolor='w', subplot_kw=dict(projection=proj))
transform = ccrs.PlateCarree()
levels = np.arange(-80, 81, 20)
cmap="Reds"
transform = ccrs.PlateCarree()
diff.plot(ax=ax1, cmap="bwr", vmax=70, vmin=-70, transform=transform, levels=levels)
ax1.coastlines()
ax1.set_title("90th Perc. 3-1-1 minus 99th Perc. 4-1-1", fontsize=16)
f.show()
f, ax1 = plt.subplots(1, 1, figsize=(10, 5), facecolor='w')
hw_metrics["HWF"].rename("Heatwave Frequency (Days)").weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon", "year"]).plot(cmap="Reds", vmin=60, vmax=100)
ax1.set_yticks([0.9, 0.95, 0.99])
ax1.set_ylabel("Percentile (Unitless)", fontsize=12)
ax1.set_xlabel("Heatwave Definition (Code)", fontsize=12)
ax1.set_title("Heatwave Frequency, Spatial-Temporal Mean, LENS1 ALL-Forcing, Member 001", fontsize=14)
f.show()
Outside of this demo, I ran this same analysis but for a large range in about 20 minutes on the same dask cluster:
hr_ds = xarray.open_zarr("/local1/hw_metrics_large_param_space.zarr")
f, ax1 = plt.subplots(1, 1, figsize=(10, 5), facecolor='w')
hr_ds["HWF"].rename("Heatwave Frequency (Days)").weighted(np.cos(np.deg2rad(hw_metrics.lat))).mean(dim=["lat", "lon", "year"]).plot(cmap="Reds", vmin=60, vmax=100)
ax1.set_ylabel("Percentile (Unitless)", fontsize=12)
ax1.set_xlabel("Heatwave Definition (Code)", fontsize=12)
ax1.set_title("Heatwave Frequency, Global Spatial-Temporal Mean", fontsize=16)
f.show()
AcknowledgementsΒΆ
These acknowledgements indicate the contributions made by various individuals and their roles in developing the HDP:
Cameron Cummins
Computational Engineer
Contact: cameron.cummins@utexas.edu
Webpage: https://www.jsg.utexas.edu/student/cameron_cummins
Affiliation: Persad Aero-Climate Lab, The University of Texas at Austin
Dr. Geeta Persad
Advisor
Contact: geeta.persad@jsg.utexas.edu
Webpage: https://www.ggpersad.com/
Affiliation: Persad Aero-Climate Lab, The University of Texas at Austin
Dr. Jane Baldwin
Heatwave Specialist
Contact: jane.baldwin@uci.edu
Webpage: https://www.janebaldw.in/
Affiliation: Climate and Extreme Event Risk Group, University of California, Irvine
Dr. Danielle Touma
Heatwave Specialist
Contact: danielle.touma@utexas.edu
Webpage: https://www.jsg.utexas.edu/researcher/danielle_touma/
Affiliation: Institute for Geophysics, The University of Texas at Austin