Example #1
0
def tworho(n1, n2):
    file1 = re.dumpname(n1)
    file2 = re.dumpname(n2)
    re.rg("gdump.back")
    re.rd(file1)
    r1 = re.r
    h1 = re.h
    ph1 = re.ph
    rho1 = re.rho
    re.rg("gdump")
    re.rd(file2)
    r2 = re.r
    h2 = re.h
    ph2 = re.ph
    rho2 = re.rho

    print("dimensions: " + str(np.shape(rho1)) + ", " + str(np.shape(rho2)))

    x1 = np.squeeze((r1 * sin(h1))[:, :, 0])
    y1 = np.squeeze((r1 * cos(h1))[:, :, 0])
    x2 = np.squeeze((r2 * sin(h2))[:, :, 0])
    y2 = np.squeeze((r2 * cos(h2))[:, :, 0])

    levs = np.linspace(0., rho1.max(), 10)
    xmax = 50.
    plt.clf()
    plt.contourf(x2, y2, (np.squeeze(rho2[:, :, 0])), levels=levs)
    plt.contour(x2, y2, np.squeeze(rho2[:, :, 0]), levels=levs, colors='k')
    plt.contour(x1, y1, np.squeeze(rho1[:, :, 0]), levels=levs, colors='w')
    plt.xlim(0., xmax)
    plt.ylim(-xmax / 4., xmax / 2.)
    plt.savefig("rhotest.png")
    plt.close()
Example #2
0
def ljet(nmax):
    # makes RT and theta-T diagrams for jet power

    r1 = 100. ; r2 = 1000. 
    theta1 = 0. ; theta2 = np.pi/4.
    
    re.rg("gdump")
    gdet=re.gdet ; gcov=re.gcov ; _dx2=re._dx2 ; _dx3=re._dx3

    fout_RTN = open("ljet_RTN.dat", "w")
    fout_RTS = open("ljet_RTS.dat", "w")
    fout_thT = open("ljet_thT.dat", "w")

    for k in arange(nmax):
        fname=re.dumpname(k)
        print("reading "+str(fname))
        re.rd(fname)
        faraday() # let's trust SashaTch
        Tcalcud()
        erN = - (gdet * Tud[1,0] * _dx2 * _dx3 * (re.h > theta1) * (re.h < theta2)).sum(-1).sum(-1) # theta-averaged energy flux 
        erS = - (gdet * Tud[1,0] * _dx2 * _dx3 * (re.h < (np.pi-theta1)) * (re.h < (np.pi - theta2))).sum(-1).sum(-1) # 
        eth = - (gdet * Tud[1,0] * _dx2 * _dx3 * (re.r > r1) * (re.r < r2)).sum(-1).sum(0) # r-averaged energy flux 
        for kr in arange(re.nx): 
            fout_RTN.write(str(re.t)+" "+str(re.r[kr,0,0])+" "+str(erN[kr])+"\n")
            fout_RTS.write(str(re.t)+" "+str(re.r[kr,0,0])+" "+str(erS[kr])+"\n")
        for kth in arange(re.ny):
            fout_thT.write(str(re.t)+" "+str(re.h[0,kth,0])+" "+str(eth[kth])+"\n")
        fout_RTN.flush() ; fout_RTS.flush() ; fout_thT.flush()
    fout_RTN.close() ; fout_RTS.close() ; fout_thT.close()
Example #3
0
def convert_to_single_file(startn=0,
                           endn=-1,
                           ln=10,
                           whichi=0,
                           whichn=1,
                           **kwargs):
    which = kwargs.pop("which", "convert_file")
    rg("gdump")
    flist1 = np.sort(
        glob.glob(os.path.join("dumps/", "dump[0-9][0-9][0-9]_0000")))
    flist2 = np.sort(
        glob.glob(os.path.join("dumps/", "dump[0-9][0-9][0-9][0-9]_0000")))
    flist1.sort()
    flist2.sort()
    flist = np.concatenate((flist1, flist2))
    firsttime = 1
    for fldname in flist:
        #find the index of the file
        fldindex = np.int(fldname.split("_")[0].split("p")[-1])
        if fldindex < startn:
            continue
        if endn >= 0 and fldindex >= endn:
            break
        if fldindex % whichn != whichi:
            #do every whichn'th snapshot starting with whichi'th snapshot
            continue
        #print( "Reading " + fldname + " ..." )
        fname = "dump%03d" % fldindex
        if os.path.isfile(fname):
            print("File %s exists, skipping..." % fname)
            continue
        if not os.path.isfile(fname):
            re.rd(fname)
Example #4
0
def mkmov_simple(starti=0, endi=400):
    for i in range(starti, endi + 1):
        re.rd("dump%03d" % i)
        aphi = re.psicalc()
        if i == starti: amax = aphi.max()
        cs, cb = plco(np.log10(re.rho),
                      levels=np.linspace(-8, 0, 100),
                      isfilled=1,
                      k=0,
                      xy=1,
                      xmax=30,
                      ymax=15,
                      dobh=1,
                      cb=1,
                      extend="both",
                      pretty=1)
        ax = plt.gca()
        ax.set_xlabel(r"$R\ [r_g]$", fontsize=20, labelpad=-5)
        ax.set_ylabel(r"$z\ [r_g]$", fontsize=20, labelpad=-5)
        cb.ax.set_xlabel(r"$\log\rho$", fontsize=20, ha="left")
        plc(aphi,
            levels=np.linspace(-amax, amax, 10)[1:-1],
            colors="white",
            linewidths=2,
            xy=-1)
        print(i)
        plt.title("t=%.4g" % np.round(re.t))
        plt.draw()
        plt.savefig("frame%03d.png" % i)
Example #5
0
def mkmov(startn=0, endn=-1, ln=10, whichi=0, whichn=1, **kwargs):
    which = kwargs.pop("which", "mkfrm8panel")
    dosavefig = kwargs.pop("dosavefig", 1)
    print("Doing %s movie" % which)
    re.rg("gdump")
    #compute the total magnetic flux at t = 0
    re.rd("dump000")
    aphi = re.psicalc()
    aphimax = aphi.max()
    #construct file list
    flist1 = np.sort(glob.glob(os.path.join("dumps/", "dump[0-9][0-9][0-9]")))
    flist2 = np.sort(
        glob.glob(os.path.join("dumps/", "dump[0-9][0-9][0-9][0-9]")))
    flist1.sort()
    flist2.sort()
    flist = np.concatenate((flist1, flist2))
    if len(flist) == 0:
        flist1 = np.sort(
            glob.glob(os.path.join("dumps/", "dump[0-9][0-9][0-9]_0000")))
        flist2 = np.sort(
            glob.glob(os.path.join("dumps/", "dump[0-9][0-9][0-9][0-9]_0000")))
        flist1.sort()
        flist2.sort()
        flist = np.concatenate((flist1, flist2))
    firsttime = 1
    dpi = 135
    for fldname in flist:
        #find the index of the file
        fldindex = np.int(fldname.split("_")[0].split("p")[-1])
        if fldindex < startn:
            continue
        if endn >= 0 and fldindex >= endn:
            break
        if fldindex % whichn != whichi:
            #do every whichn'th snapshot starting with whichi'th snapshot
            continue
        if dosavefig:
            fname = "%s%04d.png" % (which, fldindex)
            if os.path.isfile(fname):
                print("File %s exists, skipping..." % fname)
                continue
        #print( "Reading " + fldname + " ..." )
        rd("dump%03d" % fldindex)
        if which == "mkfrmsimple":
            if firsttime:
                firsttime = 0
                fig = plt.figure(figsize=(12, 8))
                plt.clf()
            mkfrmsimple(fig=fig, aphimax=aphimax)
        else:
            print("Unknown movie type: %s" % which)
            return
        print(fldindex)
        plt.draw()
        if dosavefig:
            plt.savefig(fname, dpi=dpi)
Example #6
0
def dumpinfo(prefix):
    
    re.rg("gdump")
    re.rd(prefix)
    fout=open("dumps/"+prefix+"_dinfo.dat", "w")

    fout.write(str(re.nx)+" "+str(re.ny)+" "+str(re.nz)+"\n")
    print("nr x ntheta x nphi = "+str(re.nx)+" "+str(re.ny)+" "+str(re.nz))
    
    fout.write(str(re.a)+"\n")
    print("Kerr parameter a = "+str(re.a))

    fout.write(str(re.t)+"\n")
    print("time "+str(re.t))
    fout.close()
Example #7
0
def origin_plot(dumpn, xmax=30.):
    filename = re.dumpname(dumpn)
    re.rg("gdump")
    re.rd(filename)
    r = re.r
    h = re.h
    ph = re.ph
    rho = re.rho
    origin_r = re.origin_r
    origin_th = re.origin_th
    nxx = 10
    rlevs = (r.max() / 1.)**(np.arange(nxx) / np.double(nxx))
    thlevs = np.pi * np.arange(nxx) / np.double(nxx)
    x = np.squeeze((r * sin(h))[:, :, 0])
    y = np.squeeze((r * cos(h))[:, :, 0])

    print("R0_max = " + str(origin_r[rho > 1e-6].max()))

    nd = np.size(np.shape(np.squeeze(re.r)))
    if (nd > 1):
        plt.clf()
        plt.contourf(x, y, np.log10(np.squeeze(
            origin_r[:, :, 0])))  # , levels=np.log10(rlevs))
        plt.colorbar()
        plt.contour(x, y, np.squeeze(rho[:, :, 0]), colors='k')
        plt.contour(x, y, np.squeeze(r[:, :, 0]), levels=rlevs, colors='w')
        plt.contour(x, y, np.squeeze(h[:, :, 0]), levels=thlevs, colors='w')
        #    plt.contour(x, y, np.squeeze(origin_th[:,:,0]), levels=thlevs, colors='k')
        plt.xlim(0., xmax)
        plt.ylim(-xmax / 4., xmax / 2.)
        plt.title(r"t = " + str(re.t) + " $GM/c^3$")
        plt.savefig("dumps/" + filename + "_ori.png")
        plt.close()
        plt.clf()
        plt.plot(np.squeeze(r), np.squeeze(r), 'r')
        plt.plot(r[rho > 0.1], origin_r[rho > 0.1] * 25., '.k')
        plt.xlim(0., xmax)
        plt.ylim(0., xmax)
        plt.savefig("oritest.png")
    else:
        plt.clf()
        plt.plot(x, np.log10(np.squeeze(origin_r[:, :, 0])), 'k-')
        plt.plot(x, x, 'r:')
        plt.xscale('log')
        plt.yscale('log')
        plt.savefig("dumps/" + filename + "_ori.png")
    plt.close()
Example #8
0
def test1d(n1, n2):
    re.rg("gdump.back")

    ndump = np.arange(n2 - n1) + n1

    plt.clf()
    for kdump in ndump:
        re.rd(re.dumpname(kdump))
        #     plt.plot(np.squeeze(re.r), np.squeeze(re.origin_r), label=str(kdump))
        plt.plot(np.squeeze(re.r), np.squeeze(re.rho), label=str(kdump))
        #   plt.yscale('log')
    plt.legend()
    plt.savefig("rhotest.png")
    plt.clf()
    for kdump in ndump:
        re.rd(re.dumpname(kdump))
        plt.plot(np.squeeze(re.r), np.squeeze(re.origin_r), label=str(kdump))
        # plt.plot(np.squeeze(re.r), np.squeeze(re.rho), label=str(kdump))
        #   plt.yscale('log')
    plt.legend()
    plt.savefig("oritest.png")
Example #9
0
def glevol(nmax, rref):
#    global rho, uu
    re.rg("gdump")
    gdet=re.gdet ; gcov=re.gcov ; _dx2=re._dx2 ; _dx3=re._dx3
    # rref is reference radius
    run=unique(re.r)
    nr=run[where(run<rref)].argmax()

#    maccre=zeros(nmax, dtype=double)

    fmdot=open("merge_mevol"+str(rref)+".dat", "w")

    for k in arange(nmax):
        fname=re.dumpname(k)
        print("reading "+str(fname))
        re.rd(fname)
        print("rho is "+str(shape(re.rho)))
        #        Tcalcud()
        # accretion rate at rref
        rhom=(re.rho).mean(axis=2) ;  uum=(re.uu).mean(axis=3)
        rhom_south(re.rho*cos(re.h)).mean(axis=2)
        rhom_east(re.rho*sin(re.h)).mean(axis=2)
        # do we need to multiply this by drdx??
        #        uum[0]=(uu[0]*drdx[0,0]).mean(axis=3) ;    uum[1]=(uu[1]*drdx[1,1]).mean(axis=3)
        #        uum[2]=(uu[2]*drdx[2,2]).mean(axis=3) ;    uum[2]=(uu[2]*drdx[2,2]).mean(axis=3)
        gm=sqrt(old_div(gdet,gcov[1,1]))[:,0,:]
        maccre=-trapz((rhom*uum[1]*(uum[1]<0.)*gm)[nr,:], x=re.h[nr,:,0])*_dx2*_dx3
        maccre_south=-trapz((rhom_south*uum[1]*(uum[1]<0.)*gm)[nr,:], x=re.h[nr,:,0])*_dx2*_dx3
        maccre_east=-trapz((rhom_east*uum[1]*(uum[1]<0.)*gm)[nr,:], x=re.h[nr,:,0])*_dx2*_dx3
        mwind=-trapz((rhom*uum[1]*(uum[1]>0.)*gm)[nr,:], x=re.h[nr,:,0])*_dx2*_dx3
        laccre=-trapz((rho*fabs(old_div(ud[3],ud[0]))*uu[1]*(uu[1]<0.)*sqrt(old_div(gdet,gcov[1,1]))).mean(axis=2)[nr,:], x=re.h[nr,:,0])*_dx2*_dx3
        lwind=-trapz((rho*fabs(old_div(ud[3],ud[0]))*uu[1]*(uu[1]>0.)*sqrt(old_div(gdet,gcov[1,1]))).mean(axis=2)[nr,:], x=re.h[nr,:,0])*_dx2*_dx3
        # maccre=-((rho*uu[1]*sqrt(gdet/gcov[1,1]))[nr,:,:]).sum()*_dx2*_dx3
        fmdot.write(str(t)+" "+str(maccre)+" "+str(mwind)+" "+str(old_div(laccre,maccre))+" "+str(old_div(lwind,mwind))+" "+str(maccre_south)+" "+str(maccre_east)+"\n")
    
    fmdot.close()
Example #10
0
def framerip(fname, alifactor=1):
#    global rho, ug, uu, ud, gam, B, aphi
    # alifactor = alias factor, every alifactorth point in r and th will be outputted, phi averaged over
#    rg("gdump")

    re.rd("dumps/"+fname)
	#    print(rho)
    run=unique(re.r) ;    hun=unique(re.h)
    drdx=re.drdx ; uu=re.uu ; ud=re.ud ; rho=re.rho ; ug=re.ug ; B=re.B; bsq=re.bsq # can we just import all the data?
    # origin variables:
    orr=(re.origin_r*rho).mean(axis=2)/rho.mean(axis=2)
    orth=(re.origin_th*rho).mean(axis=2)/rho.mean(axis=2)
    orphi=(re.origin_phi*rho).mean(axis=2)/rho.mean(axis=2)
    
    ug=ug.mean(axis=2)
#    uu[0]*=drdx[0,0]  ; uu[1]*=drdx[1,1]  ; uu[2]*=drdx[2,2]  ; uu[3]*=drdx[3,3]  # to physical
    uu0=old_div((uu[0]*rho*drdx[0,0]).mean(axis=2),rho.mean(axis=2))
    uur=old_div((uu[1]*rho*drdx[1,1]).mean(axis=2),rho.mean(axis=2))
    uuh=old_div((uu[2]*rho*drdx[2,2]).mean(axis=2),rho.mean(axis=2))
    uup=old_div((uu[3]*rho*drdx[3,3]).mean(axis=2),rho.mean(axis=2))

#   uu[0]*=drdx[0,0]  ; uu[1]*=drdx[1,1]  ; uu[2]*=drdx[2,2]  ; uu[3]*=drdx[3,3]  # to physical
#    ud[0]/=drdx[0,0]  ; ud[1]/=drdx[1,1]  ; ud[2]/=drdx[2,2]  ; ud[3]/=drdx[3,3]  # to physical

#    ud=(ud*rho).mean(axis=3)/rho.mean(axis=2)
#    ud[0]/=drdx[0,0]  ; ud[1]/=drdx[1,1]  ; ud[2]/=drdx[2,2]  ; ud[3]/=drdx[3,3]  # to physical
    ud0=old_div((ud[0]*rho/drdx[0,0]).mean(axis=2),rho.mean(axis=2))
    udr=old_div((ud[1]*rho/drdx[1,1]).mean(axis=2),rho.mean(axis=2))
    udh=old_div((ud[2]*rho/drdx[2,2]).mean(axis=2),rho.mean(axis=2))
    udp=old_div((ud[3]*rho/drdx[3,3]).mean(axis=2),rho.mean(axis=2))

    rhom=rho.mean(axis=2)
    pmag=old_div((bsq).mean(axis=2),2.)
    aphi=re.psicalc()
    B[1]=B[1]*drdx[1,1] ; B[2]=B[2]*drdx[2,2] ; B[3]=B[3]*drdx[3,3]
    B=B.mean(axis=3)
#    aphi=aphi.mean(axis=2)

    # r mesh:
    fout=open("dumps/"+fname+'_r.dat', 'w')
    for kx in arange(re.nx):
        if(kx%alifactor==0):
            fout.write(str(run[kx])+'\n')
    fout.close()
    fout=open("dumps/"+fname+'_h.dat', 'w')
    # theta mesh
    for ky in arange(re.ny):
        if(ky%alifactor==0):
            fout.write(str(hun[ky])+'\n')
    fout.close()
    
    foutrho=open("dumps/"+fname+'_rho.dat', 'w')
    foutp=open("dumps/"+fname+'_p.dat', 'w')
    foutpm=open("dumps/"+fname+'_pm.dat', 'w')
    foutu=open("dumps/"+fname+'_uu.dat', 'w')
    foutd=open("dumps/"+fname+'_ud.dat', 'w')
    foutb=open("dumps/"+fname+'_b.dat', 'w')
    foutori=open("dumps/"+fname+'_ori.dat', 'w')
    # rho on the mesh
    for kx in arange(re.nx):
        if(kx%alifactor==0):
            for ky in arange(re.ny):
                if(ky%alifactor==0):
                    foutrho.write(str(rhom[kx,ky])+'\n')
                    foutp.write(str(ug[kx,ky]*(re.gam-1.))+'\n')
                    foutpm.write(str(old_div(pmag[kx,ky],2.))+'\n')
                    foutu.write(str(uu0[kx,ky])+' '+str(uur[kx,ky])+' '+str(uuh[kx,ky])+' '+str(uup[kx,ky])+'\n')
                    foutd.write(str(ud0[kx,ky])+' '+str(udr[kx,ky])+' '+str(udh[kx,ky])+' '+str(udp[kx,ky])+'\n')
                    foutb.write(str(B[1, kx,ky])+' '+str(B[2, kx,ky])+' '+str(B[3, kx,ky])+' '+str(aphi[kx,ky])+'\n')
                    foutori.write(str(orr[kx,ky])+' '+str(orth[kx,ky])+' '+str(orphi[kx,ky])+'\n')
    foutb.close()
    foutori.close()
    foutrho.close()
    foutp.close()
    foutpm.close()
    foutu.close()
    foutd.close()
    os.system('tar -cf dumps/'+fname+'.tar dumps/'+fname+'_*.dat')
Example #11
0
def fromabove(fname, htor=0.1, alifactor=1):

    # alifactor = alias factor, every alifactorth point in r and phi will be outputted, phi averaged over
#    rg("gdump")
    re.rd(fname)

    run=unique(re.r)
    hun=unique(re.h)
    phun=unique(re.ph)

    indisk=double(abs(cos(re.h))<htor)
    innorm=indisk.mean(axis=1)

    ugmean=old_div((re.ug*indisk).mean(axis=1),innorm)
    drdx=re.drdx ; uu=re.uu ; ud=re.ud ; rho=re.rho ; ug=re.ug # can we just import all the data?
    uu[0]*=drdx[0,0]  ; uu[1]*=drdx[1,1]  ; uu[2]*=drdx[2,2]  ; uu[3]*=drdx[3,3]  # to physical
    ud[0]/=drdx[0,0]  ; ud[1]/=drdx[1,1]  ; ud[2]/=drdx[2,2]  ; ud[3]/=drdx[3,3]  # to physical

    uumean0=old_div((uu[0]*indisk*rho).mean(axis=1),(rho*indisk).mean(axis=1))
    uumeanr=old_div((uu[1]*indisk*rho).mean(axis=1),(rho*indisk).mean(axis=1))
    uumeanh=old_div((uu[2]*indisk*rho).mean(axis=1),(rho*indisk).mean(axis=1))
    uumeanp=old_div((uu[3]*indisk*rho).mean(axis=1),(rho*indisk).mean(axis=1))
    uumean0_p=old_div((uu[0]*indisk*ug).mean(axis=1),(ug*indisk).mean(axis=1))
    uumeanr_p=old_div((uu[1]*indisk*ug).mean(axis=1),(ug*indisk).mean(axis=1))
    uumeanh_p=old_div((uu[2]*indisk*ug).mean(axis=1),(ug*indisk).mean(axis=1))
    uumeanp_p=old_div((uu[3]*indisk*ug).mean(axis=1),(ug*indisk).mean(axis=1))
    udmean0=old_div((ud[0]*indisk*rho).mean(axis=1),(rho*indisk).mean(axis=1))
    udmeanr=old_div((ud[1]*indisk*rho).mean(axis=1),(rho*indisk).mean(axis=1))
    udmeanh=old_div((ud[2]*indisk*rho).mean(axis=1),(rho*indisk).mean(axis=1))
    udmeanp=old_div((ud[3]*indisk*rho).mean(axis=1),(rho*indisk).mean(axis=1))
    udmean0_p=old_div((ud[0]*indisk*ug).mean(axis=1),(ug*indisk).mean(axis=1))
    udmeanr_p=old_div((ud[1]*indisk*ug).mean(axis=1),(ug*indisk).mean(axis=1))
    udmeanh_p=old_div((ud[2]*indisk*ug).mean(axis=1),(ug*indisk).mean(axis=1))
    udmeanp_p=old_div((ud[3]*indisk*ug).mean(axis=1),(ug*indisk).mean(axis=1))

    rhomean=old_div((rho*indisk).mean(axis=1),innorm)
    pmag=(re.bsq*indisk).mean(axis=1)/innorm/2.

    # r mesh:
    fout=open("dumps/"+fname+'_eq_r.dat', 'w')
    for kx in arange(re.nx):
        if(kx%alifactor==0):
            fout.write(str(run[kx])+'\n')
    fout.close()
    fout=open("dumps/"+fname+'_eq_phi.dat', 'w')
    # phi mesh
    for kz in arange(re.nz):
	#        if(kz%alifactor==0):
        fout.write(str(phun[kz])+'\n')
    fout.close()

    foutrho=open("dumps/"+fname+'_eq_rho.dat', 'w') # density
    foutp=open("dumps/"+fname+'_eq_p.dat', 'w') # gas pressure
    foutpm=open("dumps/"+fname+'_eq_pm.dat', 'w') # magnetic pressure
    foutu=open("dumps/"+fname+'_eq_uu.dat', 'w') # contravariant velocities
    foutd=open("dumps/"+fname+'_eq_ud.dat', 'w') # covariant velocities
    foutup=open("dumps/"+fname+'_eq_puu.dat', 'w') # pressure-averaged contravariant velocities
    foutdp=open("dumps/"+fname+'_eq_pud.dat', 'w') # pressure-averaged covariant velocities

    # rho on the mesh
    for kx in arange(re.nx):
        if(kx%alifactor==0):
            for kz in arange(re.nz):
                foutrho.write(str(rhomean[kx,kz])+'\n')
                foutp.write(str(ugmean[kx,kz]*(re.gam-1.))+'\n')
                foutpm.write(str(pmag[kx,kz])+'\n')
                foutu.write(str(uumean0[kx,kz])+' '+str(uumeanr[kx,kz])+' '+str(uumeanh[kx,kz])+' '+str(uumeanp[kx,kz])+'\n')
                foutd.write(str(udmean0[kx,kz])+' '+str(udmeanr[kx,kz])+' '+str(udmeanh[kx,kz])+' '+str(udmeanp[kx,kz])+'\n')
                foutup.write(str(uumean0_p[kx,kz])+' '+str(uumeanr_p[kx,kz])+' '+str(uumeanh_p[kx,kz])+' '+str(uumeanp_p[kx,kz])+'\n')
                foutdp.write(str(udmean0_p[kx,kz])+' '+str(udmeanr_p[kx,kz])+' '+str(udmeanh_p[kx,kz])+' '+str(udmeanp_p[kx,kz])+'\n')
    foutrho.close()
    foutp.close()
    foutpm.close()
    foutu.close()
    foutd.close()
    foutup.close()
    foutdp.close()
    os.system('tar -cf dumps/'+fname+'_eq.tar dumps/'+fname+'_dinfo.dat dumps/'+fname+'_eq_*.dat')
Example #12
0
def corvee(n1,n2):
    
    re.rg("gdump")
    nx=re.nx ; ny=re.ny ; nz=re.nz
    gdet=re.gdet ; gcov=re.gcov ; _dx2=re._dx2 ; _dx3=re._dx3 ; drdx=re.drdx
    r=re.r ; h=re.h ; phi=re.ph # importing coordinate mesh

    # velocities:
    uufile='merge_uu.dat'
    udfile='merge_ud.dat'
    fuu=open(uufile, 'r')
    fud=open(udfile, 'r')
    #    s=str.split(str.strip(fuu.readline()))
    # mean velocity field
    uumean=zeros([4,nx,ny,nz], dtype=double)
    udmean=zeros([4,nx,ny,nz], dtype=double)

    for kx in arange(nx):
        for ky in arange(ny):
            s=str.split(str.strip(fuu.readline()))
            uumean[0,kx,ky,:]=double(s[0])
            uumean[1,kx,ky,:]=double(s[1])
            uumean[2,kx,ky,:]=double(s[2])
            uumean[3,kx,ky,:]=double(s[3])
            s=str.split(str.strip(fud.readline()))
            udmean[0,kx,ky,:]=double(s[0])
            udmean[1,kx,ky,:]=double(s[1])
            udmean[2,kx,ky,:]=double(s[2])
            udmean[3,kx,ky,:]=double(s[3])
    fuu.close()
    fud.close()

    # tetrad components:
    t0=tetrad_t(uumean, udmean)
    tr=tetrad_r(uumean, udmean)
    th=tetrad_h(uumean, udmean)
    tp=tetrad_p(uumean, udmean)
#    print shape(tr)

    nframes=n2-n1+1
    n=n1+arange(nframes)

    for k in n:
        fname=re.dumpname(k)
        re.rd(fname)
        uu=re.uu ; ud=re.ud ; rho=re.rho
        if(k==n1):
            rhomean=rho
            # velocity components:
            uu0=uu[0]*drdx[0,0]-uumean[0] ; ud0=old_div(ud[0],drdx[0,0])-udmean[0]
            uur=uu[1]*drdx[1,1]-uumean[1] ; udr=old_div(ud[1],drdx[1,1])-udmean[1]
            uuh=uu[2]*drdx[2,2]-uumean[2] ; udh=old_div(ud[2],drdx[2,2])-udmean[2]
            uup=uu[3]*drdx[3,3]-uumean[3] ; udp=old_div(ud[3],drdx[3,3])-udmean[3]
            tuur=(uu0*tr[0]+uur*tr[1]+uuh*tr[2]+uup*tr[3])  # co-moving velocity components
            tuuh=(uu0*th[0]+uur*th[1]+uuh*th[2]+uup*th[3])
            tuup=(uu0*tp[0]+uur*tp[1]+uuh*tp[2]+uup*tp[3])
            drh=rho*tuur*tuuh ; drp=rho*tuur*tuup ; dhp=rho*tuuh*tuup
            drr=rho*tuur*tuur ; dpp=rho*tuup*tuup ; dhh=rho*tuuh*tuuh
#            print(shape(drh))
#            print(shape(rho))
#            print(shape(tuur))
        else:
            rhomean+=rho
            # velocity components:
            uu0=uu[0]-uumean[0] ; ud0=ud[0]-udmean[0]
            uur=uu[1]-uumean[1] ; udr=ud[1]-udmean[1]
            uuh=uu[2]-uumean[2] ; udh=ud[2]-udmean[2]
            uup=uu[3]-uumean[3] ; udp=ud[3]-udmean[3]
            tuur=(uu0*tr[0]+uur*tr[1]+uuh*tr[2]+uup*tr[3])
            tuuh=(uu0*th[0]+uur*th[1]+uuh*th[2]+uup*th[3])
            tuup=(uu0*tp[0]+uur*tp[1]+uuh*tp[2]+uup*tp[3])
            drh+=rho*tuur*tuuh ; drp+=rho*tuur*tuup ; dhp+=rho*tuuh*tuup
            drr+=rho*tuur*tuur ; dpp+=rho*tuup*tuup ; dhh+=rho*tuuh*tuuh

    drh/=rhomean ;    drp/=rhomean ;    dhp/=rhomean 
    drr/=rhomean ;    dpp/=rhomean ;    dhh/=rhomean 
  
    drh=drh.mean(axis=2) ;  drp=drp.mean(axis=2) ;  dhp=dhp.mean(axis=2)
    drr=drr.mean(axis=2) ;  dpp=dpp.mean(axis=2) ;  dhh=dhh.mean(axis=2)
 
    fout=open('merge_corv.dat', 'w')
    for kx in arange(nx):
        for ky in arange(ny):
            # RR HH PP RH HP RP
            fout.write(str(drr[kx,ky])+' '+str(dhh[kx,ky])+' '+str(dpp[kx,ky])+' '+str(drh[kx,ky])+' '+str(dhp[kx,ky])+' '+str(drp[kx,ky])+'\n')
    fout.close()
Example #13
0
def readndump(n1, n2, rref=5.0):
    '''
    calculates mean maps for the frames n1-n2
    rref is reference radius where the mass accretion rate is calculated 
    '''
    #    run=unique(r)
    #    nr=run[where(run<rref)].argmax()

    re.rg("gdump")
    nx=re.nx ; ny=re.ny ; nz=re.nz
    gdet=re.gdet ; gcov=re.gcov ; _dx2=re._dx2 ; _dx3=re._dx3 ; drdx=re.drdx
    guu=re.guu ; gdd=re.gdd
    r=re.r ; h=re.h ; phi=re.ph # importing coordinate mesh
    if (n2<n1):
        print("readndump: invalid file number range")
        exit()

    fmdot=open("merge_mevol"+str(rref)+".dat", "w")

    nframes=n2-n1+1
    n=n1+arange(nframes)

    for k in n:
        fname=re.dumpname(k)
        re.rd(fname)
        Tcalcud()
        p=(re.gam-1.)*re.ug
        magp=old_div(re.bsq,2.)
        rho=re.rho ; uu=re.uu ; ud=re.ud 
        if(k==n1):
            rhomean=rho
            rhosqmean=rho**2
            # velocity components:
            uu0=uu[0]*rho ; ud0=ud[0]*rho
            uur=uu[1]*rho ; udr=ud[1]*rho
            uuh=uu[2]*rho ; udh=ud[2]*rho
            uup=uu[3]*rho ; udp=ud[3]*rho
            puu0=uu[0]*p ; pud0=ud[0]*p
            puur=uu[1]*p ; pudr=ud[1]*p
            puuh=uu[2]*p ; pudh=ud[2]*p
            puup=uu[3]*p ; pudp=ud[3]*p
            mpuu0=uu[0]*magp ; mpud0=ud[0]*magp
            mpuur=uu[1]*magp ; mpudr=ud[1]*magp
            mpuuh=uu[2]*magp ; mpudh=ud[2]*magp
            mpuup=uu[3]*magp ; mpudp=ud[3]*magp

            tudem=TudEM ; tudma=TudMA
            pmean=p
	    # unorm=uaver
            magp_mean=magp
            aphi=re.psicalc()
            dumpinfo(fname)
            os.system("cp dumps/"+fname+"_dinfo.dat merge_dinfo.dat")
        else:
            rhomean+=rho
            rhosqmean+=rho**2
            # velocity components:
            uu0+=uu[0]*rho ; ud0+=ud[0]*rho
            uur+=uu[1]*rho ; udr+=ud[1]*rho
            uuh+=uu[2]*rho ; udh+=ud[2]*rho
            uup+=uu[3]*rho ; udp+=ud[3]*rho
            puu0+=uu[0]*p ; pud0+=ud[0]*p
            puur+=uu[1]*p ; pudr+=ud[1]*p
            puuh+=uu[2]*p ; pudh+=ud[2]*p
            puup+=uu[3]*p ; pudp+=ud[3]*p
            mpuu0+=uu[0]*magp ; mpud0+=ud[0]*magp
            mpuur+=uu[1]*magp ; mpudr+=ud[1]*magp
            mpuuh+=uu[2]*magp ; mpudh+=ud[2]*magp
            mpuup+=uu[3]*magp ; mpudp+=ud[3]*magp

            pmean+=p
            magp_mean+=magp
            aphi+=re.psicalc()
            #	    unorm+=uaver
            tudem+=TudEM ; tudma+=TudMA
        maccre, mwind, laccre, lwind = mint(rref)
        fmdot.write(str(re.t)+" "+str(maccre)+" "+str(mwind)+" "+str(old_div(laccre,maccre))+" "+str(old_div(lwind,mwind))+"\n")
    fmdot.close()
    # velocity normalization:
    uu0*=old_div(drdx[0,0],rhomean) ; uur*=old_div(drdx[1,1],rhomean) ; uuh*=old_div(drdx[2,2],rhomean) ; uup*=old_div(drdx[3,3],rhomean)
    ud0/=drdx[0,0]*rhomean ; udr/=drdx[1,1]*rhomean ; udh/=drdx[2,2]*rhomean ; udp/=drdx[3,3]*rhomean
    puu0*=old_div(drdx[0,0],pmean) ; puur*=old_div(drdx[1,1],pmean) ; puuh*=old_div(drdx[2,2],pmean) ; puup*=old_div(drdx[3,3],pmean)
    pud0/=drdx[0,0]*pmean ; pudr/=drdx[1,1]*pmean ; pudh/=drdx[2,2]*pmean ; pudp/=drdx[3,3]*pmean
    mpuu0*=old_div(drdx[0,0],magp_mean) ; mpuur*=old_div(drdx[1,1],magp_mean) ; mpuuh*=old_div(drdx[2,2],magp_mean) ; mpuup*=old_div(drdx[3,3],magp_mean)
    mpud0/=drdx[0,0]*magp_mean ; mpudr/=drdx[1,1]*magp_mean ; mpudh/=drdx[2,2]*magp_mean ; mpudp/=drdx[3,3]*magp_mean

#    uu0/=unorm ; uur/=unorm ; uuh/=unorm ; uup/=unorm
#    ud0/=unorm ; udr/=unorm ; udh/=unorm ; udp/=unorm
    # averaging the density:
    rhomean=old_div(rhomean,double(nframes))
    rhodisp=old_div(rhosqmean,double(nframes))-rhomean**2
    pmean=old_div(pmean,double(nframes))
    magp_mean=old_div(magp_mean,double(nframes))
    tudem/=double(nframes) ; tudma/=double(nframes)
    aphi/=double(nframes)
    # physical stress-energy tensor components:
    for k in arange(4):
        for j in arange(4):
            tudem[k,j]*=drdx[k,k]/drdx[j,j]*sqrt(guu[k,k]*gdd[j,j])
            tudma[k,j]*=drdx[k,k]/drdx[j,j]*sqrt(guu[k,k]*gdd[j,j])

	#   ss=shape(rhomean) 
 	#   nx=ss[0]
  	#  ny=ss[1]
    # we need some 3D data
    rho3d=rhomean ;  p3d=pmean ; ur3d=uur ; uh3d=uuh ; up3d=uup
    fout=open('merge_rho3d.dat', 'w')
    for kx in arange(nx):
        for ky in arange(ny):
            for kz in arange(nz):
                fout.write(str(rho3d[kx,ky, kz])+'\n')
    fout.close()
    fout=open('merge_p3d.dat', 'w')
    for kx in arange(nx):
        for ky in arange(ny):
            for kz in arange(nz):
                fout.write(str(p3d[kx,ky, kz])+'\n')
    fout.close()
    fout=open('merge_u3d.dat', 'w')
    # uu on the mesh
    for kx in arange(nx):
        for ky in arange(ny):
            for kz in arange(nz):
            	fout.write(str(uu0[kx,ky,kz])+' '+str(uur[kx,ky,kz])+' '+str(uuh[kx,ky,kz])+' '+str(uup[kx,ky,kz])+'\n')
    fout.close()
    fout=open('merge_pu3d.dat', 'w')
    # uu on the mesh
    for kx in arange(nx):
        for ky in arange(ny):
            for kz in arange(nz):
                fout.write(str(puu0[kx,ky,kz])+' '+str(puur[kx,ky,kz])+' '+str(puuh[kx,ky,kz])+' '+str(puup[kx,ky,kz])+'\n')
    fout.close()
    fout=open('merge_mpu3d.dat', 'w')
    # uu on the mesh
    for kx in arange(nx):
        for ky in arange(ny):
            for kz in arange(nz):
                fout.write(str(mpuu0[kx,ky,kz])+' '+str(mpuur[kx,ky,kz])+' '+str(mpuuh[kx,ky,kz])+' '+str(mpuup[kx,ky,kz])+'\n')
    fout.close()

    # 2D or 3D? averaging over phi
    rhomean=rhomean.mean(axis=2)
    rhodisp=rhodisp.mean(axis=2)
    pmean=pmean.mean(axis=2) ; magp_mean=magp_mean.mean(axis=2)
    uu0=uu0.mean(axis=2) ; uur=uur.mean(axis=2) ; uuh=uuh.mean(axis=2) ; uup=uup.mean(axis=2)
    ud0=ud0.mean(axis=2) ; udr=udr.mean(axis=2) ; udh=udh.mean(axis=2) ; udp=udp.mean(axis=2)
    puu0=puu0.mean(axis=2) ; puur=puur.mean(axis=2) ; puuh=puuh.mean(axis=2) ; puup=puup.mean(axis=2)
    pud0=pud0.mean(axis=2) ; pudr=pudr.mean(axis=2) ; pudh=pudh.mean(axis=2) ; pudp=pudp.mean(axis=2)
    mpuu0=mpuu0.mean(axis=2) ; mpuur=mpuur.mean(axis=2) ; mpuuh=mpuuh.mean(axis=2) ; mpuup=mpuup.mean(axis=2)
    mpud0=mpud0.mean(axis=2) ; mpudr=mpudr.mean(axis=2) ; mpudh=mpudh.mean(axis=2) ; mpudp=mpudp.mean(axis=2)
    #  drp=drp.mean(axis=2)  ;  dhp=dhp.mean(axis=2)  ;  drh=drh.mean(axis=2)
    tudem=tudem.mean(axis=-1)
    tudma=tudma.mean(axis=-1)
    # aphi=aphi.mean(axis=-1)	
    # r mesh:
    fout=open('merge_r.dat', 'w')
    for kx in arange(nx):
        fout.write(str(r[kx,0,0])+'\n')
    fout.close()
    fout=open('merge_h.dat', 'w')
    # theta mesh
    for ky in arange(ny):
        fout.write(str(h[0,ky,0])+'\n')
    fout.close()
    fout=open('merge_phi.dat', 'w')
    # phi mesh
    for kz in arange(nz):
        fout.write(str(phi[0,0,kz])+'\n')
    fout.close()   
    fout=open('merge_rho.dat', 'w')
    # rho on the mesh
    for kx in arange(nx):
        for ky in arange(ny):
            fout.write(str(rhomean[kx,ky])+'\n')
    fout.close()
    # p on the mesh
    fout=open('merge_p.dat', 'w')
    for kx in arange(nx):
        for ky in arange(ny):
            fout.write(str(pmean[kx,ky])+'\n')
    fout.close()
    # magnetic pressure on the mesh
    fout=open('merge_mp.dat', 'w')
    for kx in arange(nx):
        for ky in arange(ny):
            fout.write(str(magp_mean[kx,ky])+'\n')
    fout.close()
    fout=open('merge_uu.dat', 'w')
    # uu on the mesh
    for kx in arange(nx):
        for ky in arange(ny):
            fout.write(str(uu0[kx,ky])+' '+str(uur[kx,ky])+' '+str(uuh[kx,ky])+' '+str(uup[kx,ky])+'\n')
    fout.close()
    fout=open('merge_ud.dat', 'w')
    # ud on the mesh
    for kx in arange(nx):
        for ky in arange(ny):
            fout.write(str(ud0[kx,ky])+' '+str(udr[kx,ky])+' '+str(udh[kx,ky])+' '+str(udp[kx,ky])+'\n')
    fout.close()
    fout=open('merge_puu.dat', 'w')
    # uu on the mesh
    for kx in arange(nx):
        for ky in arange(ny):
            fout.write(str(puu0[kx,ky])+' '+str(puur[kx,ky])+' '+str(puuh[kx,ky])+' '+str(puup[kx,ky])+'\n')
    fout.close()
    fout=open('merge_pud.dat', 'w')
    # ud on the mesh
    for kx in arange(nx):
        for ky in arange(ny):
            fout.write(str(pud0[kx,ky])+' '+str(pudr[kx,ky])+' '+str(pudh[kx,ky])+' '+str(pudp[kx,ky])+'\n')
    fout.close()
    fout=open('merge_mpuu.dat', 'w')
    # uu on the mesh
    for kx in arange(nx):
        for ky in arange(ny):
            fout.write(str(mpuu0[kx,ky])+' '+str(mpuur[kx,ky])+' '+str(mpuuh[kx,ky])+' '+str(mpuup[kx,ky])+'\n')
    fout.close()
    fout=open('merge_mpud.dat', 'w')
    # ud on the mesh
    for kx in arange(nx):
        for ky in arange(ny):
            fout.write(str(mpud0[kx,ky])+' '+str(mpudr[kx,ky])+' '+str(mpudh[kx,ky])+' '+str(mpudp[kx,ky])+'\n')
    fout.close()

    fout=open('merge_tudem.dat', 'w')
    # EM energy-stress tensor
    for kx in arange(nx):
        for ky in arange(ny):
            fout.write(str(tudem[0,0][kx,ky])+' '+str(tudem[0,1][kx,ky])+' '+str(tudem[0,2][kx,ky])+' '+str(tudem[0,3][kx,ky])+' ')
            fout.write(str(tudem[1,0][kx,ky])+' '+str(tudem[1,1][kx,ky])+' '+str(tudem[1,2][kx,ky])+' '+str(tudem[1,3][kx,ky])+' ')
            fout.write(str(tudem[2,0][kx,ky])+' '+str(tudem[2,1][kx,ky])+' '+str(tudem[2,2][kx,ky])+' '+str(tudem[2,3][kx,ky])+' ')
            fout.write(str(tudem[3,0][kx,ky])+' '+str(tudem[3,1][kx,ky])+' '+str(tudem[3,2][kx,ky])+' '+str(tudem[3,3][kx,ky])+'\n')
    fout.close()
    fout=open('merge_tudma.dat', 'w')
    # matter energy-stress tensor
    for kx in arange(nx):
        for ky in arange(ny):
            fout.write(str(tudma[0,0][kx,ky])+' '+str(tudma[0,1][kx,ky])+' '+str(tudma[0,2][kx,ky])+' '+str(tudma[0,3][kx,ky])+' ')
            fout.write(str(tudma[1,0][kx,ky])+' '+str(tudma[1,1][kx,ky])+' '+str(tudma[1,2][kx,ky])+' '+str(tudma[1,3][kx,ky])+' ')
            fout.write(str(tudma[2,0][kx,ky])+' '+str(tudma[2,1][kx,ky])+' '+str(tudma[2,2][kx,ky])+' '+str(tudma[2,3][kx,ky])+' ')
            fout.write(str(tudma[3,0][kx,ky])+' '+str(tudma[3,1][kx,ky])+' '+str(tudma[3,2][kx,ky])+' '+str(tudma[3,3][kx,ky])+'\n')
    fout.close()
    fout=open('merge_aphi.dat', 'w')
    # poloidal magnetic field lines	
    for kx in arange(nx):
        for ky in arange(ny):
            fout.write(str(aphi[kx,ky])+'\n')
    fout.close()
Example #14
0
def testfail(fldname="dump000"):
    try:
        re.rd(fldname)
    except IOError as e:
        print("I/O error({0}): {1}".format(e.errno, e.strerror))