Source code for TidalPy.tides.universal_coeffs

""" Universal coefficients used to calculate tidal heating and tidal potential derivatives
    Precomputed here to avoid calls to gamma functions in expensive loops.
    Defined as:
        [(l - m)!  / (l + m)!] * (2 - delta_0m)
    Stored as:
        [order_l] [m]
        Starting with order_l = 2 and m = 0
"""

from TidalPy.exceptions import TidalPyValueException
from TidalPy.utilities.performance.numba import njit


[docs] @njit(cacheable=True) def get_universal_coeffs(order_l: int): # TODO: Right now this is defined inside the function to ensure that it is compiled correctly by njit - if we make a typed dict it may be possible to pull it outside the function for better optimization universal_coeffs_by_orderl_minus2 = ( # l = 2 { 0: 1., 1: 1. / 3., 2: 1. / 12. }, # l = 3 { 0: 1., 1: 1. / 6., 2: 1. / 60., 3: 1. / 360. }, # l = 4 { 0: 1., 1: 1. / 10., 2: 1. / 180., 3: 1. / 2520., 4: 1. / 20160. }, # l = 5 { 0: 1., 1: 1. / 15., 2: 1. / 420., 3: 1. / 10080., 4: 1. / 181440., 5: 1. / 1814400. }, # l = 6 { 0: 1., 1: 1. / 21., 2: 1. / 840., 3: 1. / 30240., 4: 1. / 907200., 5: 1. / 19958400., 6: 1. / 239500800. }, # l = 7 { 0: 1., 1: 1. / 28., 2: 1. / 1512., 3: 1. / 75600, 4: 1. / 3326400., 5: 1. / 119750400., 6: 1. / 3113510400., 7: 1. / 43589145600. } ) if order_l < 2: raise TidalPyValueException('Tidal order l must be an integer >= 2.') return universal_coeffs_by_orderl_minus2[order_l - 2]