def nrel_earthsun_distance(time, how='numpy', delta_t=67.0, numthreads=4): """ Calculates the distance from the earth to the sun using the NREL SPA algorithm. The details of the NREL SPA algorithm are described in [1]_. Parameters ---------- time : pandas.DatetimeIndex Must be localized or UTC will be assumed. how : str, optional, default 'numpy' Options are 'numpy' or 'numba'. If numba >= 0.17.0 is installed, how='numba' will compile the spa functions to machine code and run them multithreaded. delta_t : float, optional, default 67.0 If delta_t is None, uses spa.calculate_deltat using time.year and time.month from pandas.DatetimeIndex. For most simulations specifing delta_t is sufficient. Difference between terrestrial time and UT1. *Note: delta_t = None will break code using nrel_numba, this will be fixed in a future version.* By default, use USNO historical data and predictions numthreads : int, optional, default 4 Number of threads to use if how == 'numba'. Returns ------- dist : pd.Series Earth-sun distance in AU. References ---------- .. [1] Reda, I., Andreas, A., 2003. Solar position algorithm for solar radiation applications. Technical report: NREL/TP-560- 34302. Golden, USA, http://www.nrel.gov. """ if not isinstance(time, pd.DatetimeIndex): try: time = pd.DatetimeIndex(time) except (TypeError, ValueError): time = pd.DatetimeIndex([time, ]) unixtime = np.array(time.astype(np.int64)/10**9) spa = _spa_python_import(how) delta_t = delta_t or spa.calculate_deltat(time.year, time.month) dist = spa.earthsun_distance(unixtime, delta_t, numthreads) dist = pd.Series(dist, index=time) return dist
def nrel_earthsun_distance(time, how='numpy', delta_t=67.0, numthreads=4): """ Calculates the distance from the earth to the sun using the NREL SPA algorithm described in [1]. Parameters ---------- time : pd.DatetimeIndex how : str, optional Options are 'numpy' or 'numba'. If numba >= 0.17.0 is installed, how='numba' will compile the spa functions to machine code and run them multithreaded. delta_t : float, optional If delta_t is None, uses spa.calculate_deltat using time.year and time.month from pandas.DatetimeIndex. For most simulations specifing delta_t is sufficient. Difference between terrestrial time and UT1. *Note: delta_t = None will break code using nrel_numba, this will be fixed in a future version. By default, use USNO historical data and predictions numthreads : int, optional Number of threads to use if how == 'numba'. Returns ------- dist : pd.Series Earth-sun distance in AU. References ---------- [1] Reda, I., Andreas, A., 2003. Solar position algorithm for solar radiation applications. Technical report: NREL/TP-560- 34302. Golden, USA, http://www.nrel.gov. """ if not isinstance(time, pd.DatetimeIndex): try: time = pd.DatetimeIndex(time) except (TypeError, ValueError): time = pd.DatetimeIndex([time, ]) unixtime = np.array(time.astype(np.int64)/10**9) spa = _spa_python_import(how) delta_t = delta_t or spa.calculate_deltat(time.year, time.month) dist = spa.earthsun_distance(unixtime, delta_t, numthreads) dist = pd.Series(dist, index=time) return dist
def nrel_earthsun_distance(time, how='numpy', delta_t=None, numthreads=4): """ Calculates the distance from the earth to the sun using the NREL SPA algorithm described in [1]. Parameters ---------- time : pd.DatetimeIndex how : str, optional Options are 'numpy' or 'numba'. If numba >= 0.17.0 is installed, how='numba' will compile the spa functions to machine code and run them multithreaded. delta_t : float, optional Difference between terrestrial time and UT1. By default, use USNO historical data and predictions numthreads : int, optional Number of threads to use if how == 'numba'. Returns ------- R : pd.Series Earth-sun distance in AU. References ---------- [1] Reda, I., Andreas, A., 2003. Solar position algorithm for solar radiation applications. Technical report: NREL/TP-560- 34302. Golden, USA, http://www.nrel.gov. """ delta_t = delta_t or 67.0 if not isinstance(time, pd.DatetimeIndex): try: time = pd.DatetimeIndex(time) except (TypeError, ValueError): time = pd.DatetimeIndex([time, ]) unixtime = time.astype(np.int64)/10**9 spa = _spa_python_import(how) R = spa.earthsun_distance(unixtime, delta_t, numthreads) R = pd.Series(R, index=time) return R