Source code for TidalPy.tides.love1d

from typing import TYPE_CHECKING

from TidalPy.utilities.performance.numba import njit

if TYPE_CHECKING:
    from TidalPy.utilities.types import FloatArray


[docs] @njit(cacheable=True) def complex_love(complex_compliance: 'FloatArray', shear_modulus: 'FloatArray', eff_rigidity: 'FloatArray') -> 'FloatArray': """ Calculates the 2nd order complex Love number Parameters ---------- complex_compliance : FloatArray Complex compliance (rheology based) [Pa-1] shear_modulus : FloatArray Temperature modulated rigidity [Pa] eff_rigidity : FloatArray 2nd order effective rigidity Returns ------- cmplx_love : FloatArray 2nd order complex Love number """ rheology_factor = complex_compliance * shear_modulus cmplx_love = (3. / 2.) * (1. / (1. + (eff_rigidity / rheology_factor))) return cmplx_love
[docs] @njit(cacheable=True) def complex_love_general( complex_compliance: 'FloatArray', shear_modulus: 'FloatArray', eff_rigidity_general: 'FloatArray', order_l: int = 2 ) -> 'FloatArray': """ Calculates the l-th order complex Love number Parameters ---------- complex_compliance : FloatArray Complex compliance (rheology based) [Pa-1] shear_modulus : FloatArray Temperature modulated rigidity [Pa] eff_rigidity_general : FloatArray l-th order effective rigidity order_l : int Outermost Fourier summation integer Returns ------- cmplx_love : FloatArray l-th order complex Love number """ rheology_factor = complex_compliance * shear_modulus cmplx_love = (3. / (2. * (order_l - 1))) * (1. / (1. + (eff_rigidity_general / rheology_factor))) return cmplx_love
[docs] @njit(cacheable=True) def static_love(eff_rigidity: 'FloatArray') -> 'FloatArray': """ Calculate the static (non-complex) 2nd order Love number Parameters ---------- eff_rigidity : FloatArray 2nd order effective rigidity Returns ------- static_love : FloatArray 2nd order complex Love number """ static_love_ = (3. / 2.) * (1. / (1. + eff_rigidity)) return static_love_
[docs] @njit(cacheable=True) def static_love_general(eff_rigidity_general: 'FloatArray', order_l: int = 2) -> 'FloatArray': """ Calculate the static (non-complex) tidal Love number k. Parameters ---------- eff_rigidity_general : FloatArray l-th order effective rigidity order_l : int Outermost Fourier summation integer Returns ------- static_love : FloatArray l-th order complex Love number """ static_love = (3. / (2. * (order_l - 1))) * (1. / (1. + eff_rigidity_general)) return static_love
[docs] @njit(cacheable=True) def effective_rigidity(shear_modulus: 'FloatArray', gravity: float, radius: float, density: float) -> 'FloatArray': """ Calculates the 2nd order effective rigidity Parameters ---------- shear_modulus : FloatArray Temperature modulated rigidity [Pa] gravity : float Surface (of planet or layer) gravity [m s-2] radius : float Surface (of planet or layer) radius [m] density : float Bulk density (of planet or layer) [kg m-3] Returns ------- eff_rigid : FloatArray 2nd order Effective Rigidity """ eff_rigid = (19. / 2.) * shear_modulus / (gravity * radius * density) return eff_rigid
[docs] @njit(cacheable=True) def effective_rigidity_general( shear_modulus: 'FloatArray', gravity: float, radius: float, density: float, order_l: int = 2 ) -> 'FloatArray': """ Calculates the l-th order effective rigidity Parameters ---------- shear_modulus : FloatArray Temperature modulated rigidity [Pa] gravity : float Surface (of planet or layer) gravity [m s-2] radius : float Surface (of planet or layer) radius [m] density : float Bulk density (of planet or layer) [kg m-3] order_l : int Outermost Fourier summation integer Returns ------- eff_rigid : FloatArray l-th order Effective Rigidity """ eff_rigid = (2. * order_l**2 + 4. * order_l + 3. / order_l) * shear_modulus / (gravity * radius * density) return eff_rigid