raytraverse.skycalc

functions for loading sky data and computing sun position

raytraverse.skycalc.read_epw(epw)[source]

read daylight sky data from epw or wea file

Returns

out – (month, day, hour, dirnorn, difhoriz)

Return type

np.array

raytraverse.skycalc.get_loc_epw(epw, name=False)[source]

get location from epw or wea header

raytraverse.skycalc.sunpos_utc(timesteps, lat, lon, builtin=True)[source]

Calculate sun position with local time

Calculate sun position (altitude, azimuth) for a particular location (longitude, latitude) for a specific date and time (time is in UTC)

Parameters
  • timesteps (np.array(datetime.datetime)) –

  • lon (float) – longitude in decimals. West is +ve

  • lat (float) – latitude in decimals. North is +ve

  • builtin (bool) – use skyfield builtin timescale

Returns

  • (skyfield.units.Angle, skyfield.units.Angle)

  • altitude and azimuth in degrees

raytraverse.skycalc.row_2_datetime64(ts, year=2020)[source]
raytraverse.skycalc.datetime64_2_datetime(timesteps, mer=0.0)[source]

convert datetime representation and offset for timezone

Parameters
  • timesteps (np.array(np.datetime64)) –

  • mer (float) – Meridian of the time zone. West is +ve

Returns

Return type

np.array(datetime.datetime)

raytraverse.skycalc.sunpos_degrees(timesteps, lat, lon, mer, builtin=True, ro=0.0)[source]

Calculate sun position with local time

Calculate sun position (altitude, azimuth) for a particular location (longitude, latitude) for a specific date and time (time is in local time)

Parameters
  • timesteps (np.array(np.datetime64)) –

  • lon (float) – longitude in decimals. West is +ve

  • lat (float) – latitude in decimals. North is +ve

  • mer (float) – Meridian of the time zone. West is +ve

  • builtin (bool, optional) – use skyfield builtin timescale

  • ro (float, optional) – ccw rotation (project to true north) in degrees

Returns

Sun position as (altitude, azimuth) in degrees

Return type

np.array([float, float])

raytraverse.skycalc.sunpos_radians(timesteps, lat, lon, mer, builtin=True, ro=0.0)[source]

Calculate sun position with local time

Calculate sun position (altitude, azimuth) for a particular location (longitude, latitude) for a specific date and time (time is in local time)

Parameters
  • timesteps (np.array(np.datetime64)) –

  • lon (float) – longitude in decimals. West is +ve

  • lat (float) – latitude in decimals. North is +ve

  • mer (float) – Meridian of the time zone. West is +ve

  • builtin (bool) – use skyfield builtin timescale

  • ro (float, optional) – ccw rotation (project to true north) in radians

Returns

Sun position as (altitude, azimuth) in radians

Return type

np.array([float, float])

raytraverse.skycalc.sunpos_xyz(timesteps, lat, lon, mer, builtin=True, ro=0.0)[source]

Calculate sun position with local time

Calculate sun position (altitude, azimuth) for a particular location (longitude, latitude) for a specific date and time (time is in local time)

Parameters
  • timesteps (np.array(np.datetime64)) –

  • lon (float) – longitude in decimals. West is +ve

  • lat (float) – latitude in decimals. North is +ve

  • mer (float) – Meridian of the time zone. West is +ve

  • builtin (bool) – use skyfield builtin timescale

  • ro (float, optional) – ccw rotation (project to true north) in degrees

Returns

Sun position as (x, y, z)

Return type

np.array

raytraverse.skycalc.generate_wea(ts, wea, interp='linear')[source]
raytraverse.skycalc.coeff_lum_perez(sunz, epsilon, delta, catn)[source]

matches coeff_lum_perez in gendaylit.c

raytraverse.skycalc.perez_apply_coef(coefs, cgamma, dz)[source]
raytraverse.skycalc.perez_lum_raw(tp, dz, sunz, coefs)[source]

matches calc_rel_lum_perez in gendaylit.c

raytraverse.skycalc.perez_lum(xyz, coefs)[source]

matches perezlum.cal

raytraverse.skycalc.perez(sxyz, dirdif, md=None, ground_fac=0.2)[source]

compute perez coefficients

Notes

to match the results of gendaylit, for a given sun angle without associated date, the assumed eccentricity is 1.035020

Parameters
  • sxyz (np.array) – (N, 3) dx, dy, dz sun position

  • dirdif (np.array) – (N, 2) direct normal, diffuse horizontal W/m^2

  • md (np.array, optional) – (N, 2) month day of sky calcs (for more precise eccentricity calc)

  • ground_fac (float) – scaling factor (reflecctance) for ground brightness

Returns

perez – (N, 10) diffuse normalization, ground brightness, perez coefs, x, y, z

Return type

np.array

raytraverse.skycalc.sky_mtx(sxyz, dirdif, side, jn=4, ground_fac=0.2)[source]

generate sky, ground and sun values from sun position and sky values

Parameters
  • sxyz (np.array) – sun directions (N, 3)

  • dirdif (np.array) – direct normal and diffuse horizontal radiation (W/m^2) (N, 2)

  • side (int) – sky subdivision

  • jn (int) – sky patch subdivision n = jn^2

  • ground_fac (float) – scaling factor (reflecctance) for ground brightness

Returns

  • skymtx (np.array) – (N, side*side)

  • grndval (np.array) – (N,)

  • sunval (np.array) – (N, 4) - sun direction and radiance