Example #1
0
def calculate_angular_momentum_flux(lambda0, G_ring, shear_viscosity,
                                    bulk_viscosity, c, r, t, vr, vt, wt,
                                    fast_gravity):
    #select two central streamlines
    total_number_of_outputs, number_of_streamlines, particles_per_streamline = r.shape
    middle_index = number_of_streamlines / 2
    rc = r[:, middle_index - 1:middle_index + 1, :]
    tc = t[:, middle_index - 1:middle_index + 1, :]
    vrc = vr[:, middle_index - 1:middle_index + 1, :]
    vtc = vt[:, middle_index - 1:middle_index + 1, :]
    wtc = wt[:, middle_index - 1:middle_index + 1, :]
    lambdac = lambda0[middle_index - 1:middle_index + 1, :]
    #compute angular momentum flux and luminosity
    twopi = 2 * np.pi
    angular_momentum_flux_list = []
    angular_momentum_luminosity_list = []
    for t_idx in range(total_number_of_outputs):
        Ar, At = accelerations(lambdac, G_ring, shear_viscosity,
                               bulk_viscosity, c, rc[t_idx], tc[t_idx],
                               vrc[t_idx], vtc[t_idx], fast_gravity)
        angular_momentum_flux = lambdac * rc[t_idx] * At
        torque_per_particle = angular_momentum_flux * rc[t_idx] / twopi
        torque_per_particle = torque_per_particle[-1]
        angular_momentum_flux = angular_momentum_flux[-1]
        angular_momentum_flux_list += [angular_momentum_flux]
        angular_momentum_luminosity_list += [torque_per_particle.sum()]
    #convert lists to arrays
    angular_momentum_flux = np.array(angular_momentum_flux_list)
    angular_momentum_luminosity = np.array(angular_momentum_luminosity_list)
    #select central streamline
    rc = rc[:, -1, :]
    tc = tc[:, -1, :]
    wtc = wtc[:, -1, :]
    return angular_momentum_flux, angular_momentum_luminosity, rc, tc, wtc
Example #2
0
def calculate_angular_momentum_flux(lambda0, G_ring, shear_viscosity,
                                    bulk_viscosity, c, r, t, vr, vt, wt,
                                    fast_gravity, confine_edges):
    #select two central streamlines
    total_number_of_outputs, number_of_streamlines, particles_per_streamline = r.shape
    middle_index = number_of_streamlines / 2
    rc = r[:, middle_index - 1:middle_index + 1, :]
    tc = t[:, middle_index - 1:middle_index + 1, :]
    vrc = vr[:, middle_index - 1:middle_index + 1, :]
    vtc = vt[:, middle_index - 1:middle_index + 1, :]
    wtc = wt[:, middle_index - 1:middle_index + 1, :]
    lambdac = lambda0[middle_index - 1:middle_index + 1, :]
    #compute angular momentum flux and luminosity
    twopi = 2 * np.pi
    angular_momentum_flux_list = []
    angular_momentum_luminosity_list = []
    for t_idx in range(total_number_of_outputs):
        #compute one-sided acceleration=acceleration of middle streamline due to interior neighbor
        r_now = rc[t_idx]
        t_now = tc[t_idx]
        vr_now = vrc[t_idx]
        vt_now = vtc[t_idx]
        Ar, At = accelerations(lambdac, G_ring, shear_viscosity,
                               bulk_viscosity, c, r_now, t_now, vr_now, vt_now,
                               fast_gravity, confine_edges)
        angular_momentum_flux = lambdac * r_now * At
        angular_momentum_flux = angular_momentum_flux[-1]
        angular_momentum_flux_list += [angular_momentum_flux]
        #compute one-sided torque
        delta_ell = twopi * r_now[-1].mean() / particles_per_streamline
        torque = angular_momentum_flux.sum() * delta_ell
        angular_momentum_luminosity_list += [torque]
    #convert lists to arrays
    angular_momentum_flux = np.array(angular_momentum_flux_list)
    angular_momentum_luminosity = np.array(angular_momentum_luminosity_list)
    #select central streamline
    rc = rc[:, -1, :]
    tc = tc[:, -1, :]
    wtc = wtc[:, -1, :]
    return angular_momentum_flux, angular_momentum_luminosity, rc, tc, wtc
Example #3
0
def calculate_energy_flux(lambda0, G_ring, shear_viscosity, bulk_viscosity, c,
                          r, t, vr, vt, wt, fast_gravity, confine_edges):
    #select two central streamlines
    total_number_of_outputs, number_of_streamlines, particles_per_streamline = r.shape
    middle_index = number_of_streamlines / 2
    rc = r[:, middle_index - 1:middle_index + 1, :]
    tc = t[:, middle_index - 1:middle_index + 1, :]
    vrc = vr[:, middle_index - 1:middle_index + 1, :]
    vtc = vt[:, middle_index - 1:middle_index + 1, :]
    wtc = wt[:, middle_index - 1:middle_index + 1, :]
    lambdac = lambda0[middle_index - 1:middle_index + 1, :]
    #compute energy flux and luminosity
    twopi = 2 * np.pi
    energy_flux_list = []
    energy_luminosity_list = []
    for t_idx in range(total_number_of_outputs):
        r_now = rc[t_idx]
        t_now = tc[t_idx]
        vr_now = vrc[t_idx]
        vt_now = vtc[t_idx]
        Ar, At = accelerations(lambdac, G_ring, shear_viscosity,
                               bulk_viscosity, c, r_now, t_now, vr_now, vt_now,
                               fast_gravity, confine_edges)
        energy_flux = lambdac * (Ar * vr_now + At * vt_now)
        energy_flux = energy_flux[-1]
        energy_flux_list += [energy_flux]
        #compute one-sided work
        delta_ell = twopi * r_now[-1].mean() / particles_per_streamline
        work = energy_flux.sum() * delta_ell
        energy_luminosity_list += [work]
    #convert lists to arrays
    energy_flux = np.array(energy_flux_list)
    energy_luminosity = np.array(energy_luminosity_list)
    #select central streamline
    rc = rc[:, -1, :]
    tc = tc[:, -1, :]
    wtc = wtc[:, -1, :]
    return energy_flux, energy_luminosity, rc, tc, wtc