Module taurunner.body.earth

Expand source code
import numpy as np
from .body import Body

prem_params = [(13.0885,  0.0,    -8.8381,  0.0),
               (12.5815, -1.2638, -3.6426, -5.5281),
               (7.9565,  -6.4761,  5.5283, -3.0807),
               (5.3197,  -1.4836,  0.0,     0.0),
               (11.2494, -8.0298,  0.0,     0.0),
               (7.1089,  -3.8045,  0.0,     0.0),
               (2.6910,   0.6924,  0.0,     0.0),
               (2.9,      0.0,     0.0,     0.0),
               (2.6,      0.0,     0.0,     0.0),
              ]

def prem_density(r, params):
    return np.polynomial.polynomial.polyval(r, params)
def helper(param):
    func = lambda x: prem_density(x, param)
    return func

def construct_earth(layers: list=[]) -> Body:
    r'''
    Function for making the PREM Earth

    Params
    ______
    layers : Optional list of tuples with radii [km] and densities [gr/cm^3] to add as constant
             density layers on top of the PREM model. for example a 4km ocean layer is [(4, 1.0)]

    Returns
    _______
    earth : TauRunner Earth object
    '''
    r_tot            =  6368.
    layer_boundaries = [1221.5, 3480, 5701, 5771, 5971, 6151, 6346.6, 6356, 6368]
    pparams          = [_ for _ in prem_params] # hacky fix sorry
    for layer in layers:
        r, density = layer
        r_tot += r
        pparams.append((density, 0., 0., 0.))
        layer_boundaries.append(r_tot)
    pparams = list(pparams)
    layer_boundaries = np.array(layer_boundaries, dtype=float) / r_tot
    earth_densities  = [(helper(param), layer) for param, layer in zip(pparams, layer_boundaries)]
    earth            = Body(earth_densities, r_tot, name='PREM_earth')
    return earth

Functions

def construct_earth(layers: list = []) ‑> Body

Function for making the PREM Earth

Params


layers : Optional list of tuples with radii [km] and densities [gr/cm^3] to add as constant density layers on top of the PREM model. for example a 4km ocean layer is [(4, 1.0)]

Returns


earth : TauRunner Earth object

Expand source code
def construct_earth(layers: list=[]) -> Body:
    r'''
    Function for making the PREM Earth

    Params
    ______
    layers : Optional list of tuples with radii [km] and densities [gr/cm^3] to add as constant
             density layers on top of the PREM model. for example a 4km ocean layer is [(4, 1.0)]

    Returns
    _______
    earth : TauRunner Earth object
    '''
    r_tot            =  6368.
    layer_boundaries = [1221.5, 3480, 5701, 5771, 5971, 6151, 6346.6, 6356, 6368]
    pparams          = [_ for _ in prem_params] # hacky fix sorry
    for layer in layers:
        r, density = layer
        r_tot += r
        pparams.append((density, 0., 0., 0.))
        layer_boundaries.append(r_tot)
    pparams = list(pparams)
    layer_boundaries = np.array(layer_boundaries, dtype=float) / r_tot
    earth_densities  = [(helper(param), layer) for param, layer in zip(pparams, layer_boundaries)]
    earth            = Body(earth_densities, r_tot, name='PREM_earth')
    return earth
def helper(param)
Expand source code
def helper(param):
    func = lambda x: prem_density(x, param)
    return func
def prem_density(r, params)
Expand source code
def prem_density(r, params):
    return np.polynomial.polynomial.polyval(r, params)