Code: Select all
import xarray as xr
import numpy as np
# Open the dataset
data = xr.open_dataset(r"Data", decode_times=True)
# Variable name
sw_variable = "ssrd" # Surface solar radiation downwards (J/m² per month)
# Ensure valid_time is correctly formatted
data = xr.decode_cf(data) # Decode CF-conventions
valid_time = data['valid_time']
# Convert time coordinate to year-month format
data = data.assign_coords(year_month=valid_time.dt.strftime('%Y-%m'))
# Convert SSRD from J/m² per month to W/m²
# First convert to daily average (divide by days in month)
days_in_month = valid_time.dt.days_in_month
data["SSRD_Wm2"] = data[sw_variable] / (86400 * days_in_month) # divide by seconds in day and days in month
# Calculate daily PAR (45% of SSRD)
data["PAR"] = data["SSRD_Wm2"] * 0.45
data["PAR"].attrs["units"] = "W/m²"
# Calculate total monthly PAR (W/m² * days * seconds_per_day)
data["PAR_total"] = data["PAR"] * days_in_month * 86400 # multiply back by days and seconds
data["PAR_total"].attrs["units"] = "J/m²"
# Compute the monthly total PAR
monthly_total_par = data["PAR_total"].groupby("year_month").mean(dim="valid_time")
# Save
monthly_total_par.to_netcdf("monthly_total_par.nc")