Esempio n. 1
0
def get_profile(R):
    M = params.recipe['mass']

    g = params.G * M / pow(R, 2.0)
    P = params.recipe['P_surf']
    T = None
    phase = phases.get_phase(0, None, P, params.recipe['T_surf'])
    rho = phase['rho_0']
    q_surf = params.recipe['q_surf_est']

    layersbelow_mass = params.recipe['mass']
    radius = R

    solution = [None] * 2

    for layer_number in xrange(0, params.recipe['layers']):

        x = np.linspace(0, radius, params.layerpoints)

        layersbelow_mass = layersbelow_mass - params.recipe['layer_masses'][layer_number]
        define_mass_event(layersbelow_mass)

        layer_solution = odelay(structure_equations, [rho, g, M, P], x, events=[mass_event], args=(phase, radius, False))

        # if(T is None): # uncomment this when you have T solved for and indent the next line
        # If this is our first iteration we don't have an initial temperature profile yet
        # create a constant profile of temperature T_surf.
        # This means phase relations won't go insane in subsequent steps

        T = np.zeros_like(layer_solution[0]) + params.recipe['T_surf']

        solution[layer_number] = get_layer_properties(layer_solution, T, q_surf, layer_number, radius)

        if (layer_number < params.recipe['layers'] - 1):
            phase = phases.get_phase(layer_number + 1, None, P, 300)

            radius = solution[layer_number]['bottom_r']
            P = solution[layer_number]['bottom_P']
            rho = phases.vinet_density(P, phase)
            g = solution[layer_number]['bottom_g']
            M = solution[layer_number]['bottom_m']

        # Interp all my fields for use in the temperature ODE

    solution = interp_solution(solution)

    # Toss to the temperature solver


    return solution
def get_param_avg(layer_solution, layer_number, param):
    param_vals = np.zeros_like(layer_solution['r'])
    i = 0

    if ((params.recipe['layer_' + str(layer_number)]['type']).upper() == 'GEOM'):
        for (r, T, P) in zip(layer_solution['r'], layer_solution['T'], layer_solution['y'][:, 3]):
            param_vals[i] = phases.get_phase(layer_number, None, P, T)[param]
            i = i + 1

    return -np.trapz(param_vals * (layer_solution['r'] ** 2), x=layer_solution['r']) * 3.0 / (
        layer_solution['top_r'] ** 3 - layer_solution['bottom_r'] ** 3)