Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Calculate solar intensity / insolation for a segment/run/ski area #28

Open
dhimmel opened this issue Dec 26, 2024 · 6 comments
Open

Calculate solar intensity / insolation for a segment/run/ski area #28

dhimmel opened this issue Dec 26, 2024 · 6 comments

Comments

@dhimmel
Copy link
Owner

dhimmel commented Dec 26, 2024

Calculating the amount of sunlight (insolation) that hits a run segment would be a powerful way for us to quantify the effect of trail orientation. I think it's most helpful to start thinking here in terms of run segments, because I imagine we could then aggregate any metric to the level of a whole run, ski area, or ski area aggregation.

For the MVP, I could see us incorporating:

  • sun's declination, where latitude is the input
  • segment bearing and slope

This would assume no vegetative shadowing, cloud cover, and limited topographic shadowing. Up for discussion.

Let's use this issue to discuss methods and implementations. @joshimmel is interested in methods here. @nbarbier-s2 has opened a POC in #24.

@joshimmel
Copy link
Collaborator

Agreed, it's best to start simple and ignore shadowing effects, which would require the use of continuous raster data (digital elevation maps + canopy height / digital surface maps) beyond the ski area of interest.

To begin, it appears the Python photovoltaic library pvlib possesses the functionalities we are interested in.

Using position on earth (latitude/longitude), trail segment aspect, and trail segment slope, and assuming either a single day/hour (winter solstice @ solar noon), we can produce solar irradiance values (W/m²) for each trail segment, then aggregate. Obviously limited, but I think a necessary step to infer capacity for melt dependent on "which way you ski".

A couple of later considerations / improvements:

  • Integrate across winter season (approximately Dec 21–Mar 20) as opposed to a single time
  • Incorporate cloud cover percentage or cloud radiative effect (extracted from a global product like CERES SYN1deg

Happy to discuss/work on an MVP with @nbarbier-s2 which ideally capitalizes on the existing outputs from the project.

@dhimmel
Copy link
Owner Author

dhimmel commented Dec 26, 2024

sunpath3d is helpful for building mental models of the sun's path by latitude and date.

assuming a single day/hour (winter solstice @ solar noon)

A single day / hour is a nice simplifying assumption for a first pass. Do we ultimately expect integrating over all daylight hours across a typical ski season will produce proportionally similar results, or could it change the ranking of ski areas?

we can produce solar irradiance values (W/m²) for each trail segment, then aggregate

Presumably we want to scale or weight somehow. For example, if adding a trail to a ski area, it should not increase its solar irradiance unless the trail receives more sun than the average of the remaining ski area. What do we weight by? Vertical, 3d distance, etc?

We have observed an eastward orientation preference across the totality of ski areas, presumably because morning sun exposure is preferable when temperatures are cooler. If we were to eventually model this, it seems to be going beyond just solar irradiance by including temperature to model melt-inducing irradiance. Is there terminology for this phenomenon?

@dhimmel
Copy link
Owner Author

dhimmel commented Dec 27, 2024

Here is what ChatGPT o1 suggested for:

Using Python's pvlib, calculate solar irradiance at a given location (lat, lon, ele) and a given slope/bearing to represent the orientation of a ski run segment. For now, just compute this at solar noon on the winter solstice based on the location.

@joshimmel
Copy link
Collaborator

A single day / hour is a nice simplifying assumption for a first pass. Do we ultimately expect integrating over all daylight hours across a typical ski season will produce proportionally similar results, or could it change the ranking of ski areas?

I think integrating across all daylight hours will cause a reordering of ski area rankings in terms of seasonal insolation received. Especially because ski seasons are not evenly centered on the solstice, thus ski areas which experience rapid accelerations in daylight hours post solstice (higher latitudes) may rise more rapidly in cumulative insolation (dependent on the timeframe considered "ski-season").

Whatever we choose as ski season start and end dates, I think should be fixed for each hemisphere so as to compare the total without some need for normalization (by # of days in season, light-hours, etc...). If integrating over season, which seems like an important step after we produce a solar irradiance MVP, I propose a start date of Dec 1st and end date of Apr 15th (for N Hemipshere). Arbitrary and based on little beyond when it feels like ski season!

Presumably we want to scale or weight somehow. For example, if adding a trail to a ski area, it should not increase its solar irradiance unless the trail receives more sun than the average of the remaining ski area. What do we weight by? Vertical, 3d distance, etc?

Slope (vertical and distance) are in part baked into the solar irradiance. I lean towards weighting by 3d distance.

We have observed an eastward orientation preference across the totality of ski areas, presumably because morning sun exposure is preferable when temperatures are cooler. If we were to eventually model this, it seems to be going beyond just solar irradiance by including temperature to model melt-inducing irradiance. Is there terminology for this phenomenon?

It's a good point - and probably so. Also, evaporative flux increases during the daylight hours as wind speeds increase due to solar induced thermal gradients. Wind plays a huge role in refreshing locally moist air at the snow-air interface with drier air which accepts more water vapor off of the snow surface during melt. These winds vary by altitude and geographic setting, and are not easily resolved. If we do aim to estimate potential melt conditions beyond solar irradiance, I think incorporating both temperature and wind is important. But this would represent a large step into modeling melt as opposed to our current attempts at correlating static (driven solely by geostationary data - lat, long, elevation) mountain characteristics with melt potential.

@joshimmel
Copy link
Collaborator

Here is what ChatGPT o1 suggested for:

Using a similar ChatGPT output I began yesterday and modifying it to represent Dartmouth Skiway, on the solstice, for the NbNW aspects and a slope of 20, here is a plot of irradiance through the day (peaking at 60 W/m2). No built in functionality for irradiance on SunPath3d. Will look into this more, but as a gut check I feel these values are in the right ballpark.
image

@joshimmel
Copy link
Collaborator

Plotting daily irradiance sums (Wh/m2/day) across an arbitrarily defined ski season (Dec 01 2024 to Apr 15, 2025), than summing those, we can produce total irradiance for any lat/long aspect slope combo. Perhaps we preserve the daily irradiance and produce daily normalized sums for each ski area. Then we can produce an animation or interactive graphic/table of solar irradiance through the season (which may vary more radically for mountains with narrower aspect distributions).

image

To do:

  • Integrate pvlib analysis into openskistats
  • Decide whether to incorporate cloudiness (reflected in GHI (Global Horizontal Irradiance))
  • Determine how to normalize daily irradiance values (3d distance?)
  • Determine whether aggregating these normalized values most accurately reflects melt potential

dhimmel added a commit that referenced this issue Dec 30, 2024
Co-authored-by: Joshua Himmelstein <[email protected]>

refs #28
dhimmel added a commit that referenced this issue Dec 31, 2024
Co-authored-by: Joshua Himmelstein <[email protected]>

refs #28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants