Пример #1
0
def print_log(pre,
              time,
              gravity,
              E0=0.0 | nbody_system.energy,
              cpu0=0.0,
              wall0=0.0):
    cpu = cputime()
    wall = wallclocktime()
    N = len(gravity.particles)
    M = gravity.total_mass
    U = gravity.potential_energy
    T = gravity.kinetic_energy
    Etop = T + U
    E = Etop
    if E0 == 0 | nbody_system.energy: E0 = E
    Rvir = -0.5 * M * M / U
    Q = -T / U
    com = pa.center_of_mass(gravity.particles)
    comv = pa.center_of_mass_velocity(gravity.particles)
    if N > 15:
        dcen,rcore,rhocore \
            = pa.densitycentre_coreradius_coredens(gravity.particles)
    else:
        dcen = com
        rcore = zero
        rhocore = zero
    cmx, cmy, cmz = dcen
    lagr, mf = pa.LagrangianRadii(gravity.particles, cm=dcen)  # no units!

    print ''
    print pre + "time=", time.number
    print pre + "cpu=", cpu - cpu0
    print pre + "wall=", wall - wall0
    print pre + "Ntot=", N
    print pre + "mass=", M.number
    print pre + "Etot=", E.number
    print pre + "dE/E=", E / E0 - 1
    print pre + "Rvir=", Rvir.number
    print pre + "Qvir=", Q
    cmx, cmy, cmz = com
    print pre + "cmpos[3]= %.8f %.8f %.8f" % (cmx.number, cmy.number,
                                              cmz.number)
    cmx, cmy, cmz = comv
    print pre + "cmvel[3]= %.8f %.8f %.8f" % (cmx.number, cmy.number,
                                              cmz.number)
    cmx, cmy, cmz = dcen
    print pre + "dcpos[3]= %.8f %.8f %.8f" % (cmx.number, cmy.number,
                                              cmz.number)
    print pre + "Rcore=", rcore.number
    print pre + "Mlagr[9]=",
    for m in mf:
        print "%.4f" % (m),
    print ''
    print pre + "Rlagr[9]=",
    for r in lagr.number:
        print "%.8f" % (r),
    print ''

    sys.stdout.flush()
    return E, cpu, wall
Пример #2
0
def print_log(pre, time, gravity, E0 = 0.0 | nbody_system.energy, cpu0 = 0.0):
    cpu = clock()
    N = len(gravity.particles)
    M = gravity.total_mass
    U = gravity.potential_energy
    T = gravity.kinetic_energy
    Etop = T + U
    Nmul, Nbin, Emul = gravity.get_total_multiple_energy()
    tmp1,tmp2,Emul2 = gravity.get_total_multiple_energy2()
    Etot = Etop + Emul
    Eext = gravity.multiples_external_tidal_correction
    Eint = gravity.multiples_internal_tidal_correction
    Eerr = gravity.multiples_integration_energy_error
    Edel = gravity.multiples_external_tidal_correction \
		+ gravity.multiples_internal_tidal_correction \
		+ gravity.multiples_integration_energy_error
    Ecor = Etot - Edel
    if E0 == 0 | nbody_system.energy: E0 = Ecor
    Rvir = -0.5*M*M/U
    Q = -T/U
    com = pa.center_of_mass(gravity.particles)
    comv = pa.center_of_mass_velocity(gravity.particles)
    dcen,rcore,rhocore = pa.densitycentre_coreradius_coredens(gravity.particles)
    cmx,cmy,cmz = dcen
    lagr,mf = pa.LagrangianRadii(gravity.particles, cm=dcen)  # no units!

    print ''
    print pre+"time=", time.number
    print pre+"CPU=", cpu - cpu0
    print pre+"Ntot=", N
    print pre+"mass=", M.number
    print pre+"Etot=", Etot.number
    print pre+"Etop=", Etop.number
    print pre+"Eext=", Eext.number
    print pre+"Eint=", Eint.number
    print pre+"Eerr=", Eerr.number
    print pre+"Edel=", Edel.number
    print pre+"Ecor=", Ecor.number
    print pre+"dE/E=", Ecor/E0 - 1
    print pre+"Rvir=", Rvir.number
    print pre+"Qvir=", Q
    cmx,cmy,cmz = com
    print pre+"cmpos[3]= %.8f %.8f %.8f" % (cmx.number, cmy.number, cmz.number)
    cmx,cmy,cmz = comv
    print pre+"cmvel[3]= %.8f %.8f %.8f" % (cmx.number, cmy.number, cmz.number)
    cmx,cmy,cmz = dcen
    print pre+"dcpos[3]= %.8f %.8f %.8f" % (cmx.number, cmy.number, cmz.number)
    print pre+"Rcore=", rcore.number
    print pre+"Mcore=", (rhocore*rcore**3).number	# fake...
    print pre+"Mlagr[9]=",
    for m in mf: print "%.4f" % (m),
    print ''
    print pre+"Rlagr[9]=",
    for r in lagr.number: print "%.8f" % (r),
    print ''
    kT = T/N
    Nmul,Nbin,Emul = gravity.print_multiples2(pre, kT, dcen)
    print pre+"Nmul=", Nmul
    print pre+"Nbin=", Nbin
    print pre+"Emul= %.5f" % (Emul.number)
    print pre+"Emul2= %.5f" % (Emul2.number)
    print pre+"Emul/kT= %.5f" % (Emul.number/kT.number)
    print pre+"Emul/E= %.5f" % (Emul.number/Etot.number)
    print ''

    sys.stdout.flush()
    return Ecor,cpu
Пример #3
0
def print_log(pre, time, gravity, E0 = 0.0 | nbody_system.energy, cpu0 = 0.0):
    cpu = clock()
    N = len(gravity.particles)
    M = gravity.total_mass
    U = gravity.potential_energy
    T = gravity.kinetic_energy
    Etop = T + U
    Nmul, Nbin, Emul = gravity.get_total_multiple_energy()
    tmp1,tmp2,Emul2 = gravity.get_total_multiple_energy2()
    Etot = Etop + Emul
    Eext = gravity.multiples_external_tidal_correction
    Eint = gravity.multiples_internal_tidal_correction
    Eerr = gravity.multiples_integration_energy_error
    Edel = Eext + Eint + Eerr
    Ecor = Etot - Edel
    if E0 == 0 | nbody_system.energy: E0 = Ecor
    Rvir = -0.5*M*M/U
    Q = -T/U
    com = pa.center_of_mass(gravity.particles)
    comv = pa.center_of_mass_velocity(gravity.particles)

    # Hop complains if we have too few particles.

    dcen = com
    if N >= 100:
        dcen,rcore,rhocore \
            = pa.densitycentre_coreradius_coredens(gravity.particles)
        cmx,cmy,cmz = dcen
        lagr,mf = pa.LagrangianRadii(gravity.particles, cm=dcen)  # no units!

    print ''
    print pre+"time=", time.number
    print pre+"CPU=", cpu - cpu0
    print pre+"Ntot=", N
    print pre+"mass=", M.number
    print pre+"Etot=", Etot.number
    print pre+"Etop=", Etop.number
    print pre+"Eext=", Eext.number
    print pre+"Eint=", Eint.number
    print pre+"Eerr=", Eerr.number
    print pre+"Edel=", Edel.number
    print pre+"Ecor=", Ecor.number
    print pre+"dE=", Ecor.number - E0.number
    print pre+"dE/E=", Ecor/E0 - 1
    print pre+"Rvir=", Rvir.number
    print pre+"Qvir=", Q
    cmx,cmy,cmz = com
    print pre+"cmpos[3]= %.8f %.8f %.8f" % (cmx.number, cmy.number, cmz.number)
    cmx,cmy,cmz = comv
    print pre+"cmvel[3]= %.8f %.8f %.8f" % (cmx.number, cmy.number, cmz.number)

    if N >= 100:
        cmx,cmy,cmz = dcen
        print pre+"dcpos[3]= %.8f %.8f %.8f" \
            		% (cmx.number, cmy.number, cmz.number)
        print pre+"Rcore=", rcore.number
        print pre+"Mcore=", (rhocore*rcore**3).number	# fake...
        print pre+"Mlagr[9]=",
        for m in mf: print "%.4f" % (m),
        print ''
        print pre+"Rlagr[9]=",
        for r in lagr.number: print "%.8f" % (r),
        print ''

    kT = 2*T/(3.*N)	# 3/2 N kT = total KE, by definition
    kT0 = -2*E0/(3.*N)
    print pre+"kT= %.8f" % (kT.number)
    Nmul,Nbin,Emul = gravity.print_multiples2(pre, kT, dcen)
    print pre+"Nmul=", Nmul
    print pre+"Nbin=", Nbin
    print pre+"Emul= %.5f" % (Emul.number)
    print pre+"Emul2= %.5f" % (Emul2.number)
    print pre+"Emul/kT= %.5f" % (Emul/kT)
    print pre+"Emul/kT0= %.5f" % (Emul/kT0)
    print pre+"Emul/E= %.5f" % (Emul/Etot)
    print ''

    stars = gravity.particles.copy()
    schannel = gravity.particles.new_channel_to(stars)
    schannel.copy_attribute("index_in_code", "id")
    print_binaries(pre, stars, kT, 0.1)

    sys.stdout.flush()
    return Ecor,cpu