Exemplo n.º 1
0
def loadTEM(dirname):

      import numpy as np
      import fortranfile
      from pylab import *
      import pickle
      import os
      from pf2d_ztitvar import pf2d_ztitvar

      from readjet2h import readjet2h
      vardict=readjet2h(dirname)
      locals().update(vardict)

      [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))

      U=beta_dim*L**2/beta1
      gprime=f0_dim**2*L**2/h1/fr1
      h2=f0_dim**2*L**2/gprime/fr2
      f0_nd=f0_dim*L/U

      #define x and y (m)
      x=arange(xmin,xmax,(xmax-xmin)/n)*L
      y=arange(ymin,ymax,(ymax-ymin)/m)*L

      betay_vec=beta1*y/L
      betay=tile(betay_vec,(n,1))

      predir='/data/ilebras/twolayer-jets-climate/'
      rundir=predir+'testing/'+dirname+'/'

      #--------load eddy forcing terms--------------

      uq_TEM={}

      pload=fortranfile.FortranFile(rundir+'Tr1.dat')
      pvec=pload.readReals()
      ppp=pvec.reshape(n,m,order='F')
      uq_TEM['m1']=ppp

      pload=fortranfile.FortranFile(rundir+'Tr2.dat')
      pvec=pload.readReals()
      ppp=pvec.reshape(n,m,order='F')
      uq_TEM['m2']=ppp

      pload=fortranfile.FortranFile(rundir+'TM1.dat')
      pvec=pload.readReals()
      ppp=pvec.reshape(n,m,order='F')
      uq_TEM['i1']=ppp

      pload=fortranfile.FortranFile(rundir+'TM2.dat')
      pvec=pload.readReals()
      ppp=pvec.reshape(n,m,order='F')
      uq_TEM['i2']=ppp

      #--------plot eddy forcing terms--------------

      xlow=200
      xhigh=-3
      ylow=250

      pf2d_ztitvar(uq_TEM,'uqTEM_fromsaved_no',x,y,dirname,(18,6),xlow,xhigh,ylow,'relative vorticity portion','total eddy forcing',1)
Exemplo n.º 2
0
def tractseries(finaldir):

    import numpy as np
    import os
    from pylab import *
    import fortranfile
    import pickle

    predir = "/data/ilebras/twolayer-jets-climate/"

    from readjet2h import readjet2h

    vardict = readjet2h(finaldir)
    locals().update(vardict)

    [L, beta_dim, f0_dim, h1] = pickle.load(open("/data/ilebras/twolayer-jets-climate/pickles/dimize.p", "r"))

    U = beta_dim * L ** 2 / beta1

    x = arange(xmin, xmax, (xmax - xmin) / n) * L
    y = arange(ymin, ymax, (ymax - ymin) / m) * L

    secspace = 0.02 / dt

    time = arange(ksec, ksnap, 1 / secspace) * L / U / 60 ** 2 / 24 / 365.25

    tdim = len(time)

    amean1 = ones(tdim)
    amin1 = zeros(tdim)
    amax1 = zeros(tdim)
    asum1 = zeros(tdim)
    for iter in range(tdim):
        # load some age tracers
        pload = fortranfile.FortranFile("../testing/" + finaldir + "/psidat/a1s_" + str(int(iter)).zfill(3))
        pvec = pload.readReals()
        age = pvec.reshape(n, m, order="F")
        amean1[iter] = np.mean(age)
        amin1[iter] = age.min()
        amax1[iter] = age.max()
        asum1[iter] = sum(age[:, :])

    amean2 = ones(tdim)
    amin2 = zeros(tdim)
    amax2 = zeros(tdim)
    asum2 = zeros(tdim)
    for iter in range(tdim):
        # load some age tracers
        pload = fortranfile.FortranFile("../testing/" + finaldir + "/psidat/a2s_" + str(int(iter)).zfill(3))
        pvec = pload.readReals()
        age = pvec.reshape(n, m, order="F")
        amean2[iter] = np.mean(age)
        amin2[iter] = age.min()
        amax2[iter] = age.max()
        asum2[iter] = sum(age[:, :])

    figure()

    subplot(121)
    xlabel("time (years)")
    plot(time, amean1, color="b")
    plot(time, amin1, color="b")
    plot(time, amax1, color="b")
    plot(time, amean2, color="r")
    plot(time, amin2, color="r")
    plot(time, amax2, color="r")
    title("Tracer mean, min and max")
    grid(True)

    subplot(122)
    plot(time, asum1, "b")
    plot(time, asum2, "r")
    title("Tracer sum")
    legend(["layer 1", "layer 2"])
    xlabel("time (years)")
    grid(True)

    savefig(predir + "plots/" + finaldir + "_tracertseries.png")
Exemplo n.º 3
0
def plotu(dirname):

    import pickle
    from pylab import *
    import math
    from uplotfunc import upf
    ion()
    
    from readjet2h import readjet2h
    vardict=readjet2h(dirname)
    locals().update(vardict)

    predir='/data/ilebras/twolayer-jets-climate/'

    [psi,q,qfull,u,v,h,hbp,x,y]=pickle.load(open(predir+'pickles/quickfields/'+dirname+'_qfield.p', 'r' ))

    [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))

    U=beta_dim*L**2/beta1
    
    # xmid=x[:-1]+diff(x)/2
    # ymid=y[:-1]+diff(y)/2

    [xmmat,ymmat]=meshgrid(x,y)

    # um1p=u['m1'][:-1,:]+diff(u['m1'],axis=0)/2
    # vm1p=v['m1'][:,:-1]+diff(v['m1'],axis=1)/2

    # ui1p=u['i1'][:-1,:]+diff(u['i1'],axis=0)/2
    # vi1p=v['i1'][:,:-1]+diff(v['i1'],axis=1)/2

    # um2p=u['m2'][:-1,:]+diff(u['m2'],axis=0)/2
    # vm2p=v['m2'][:,:-1]+diff(v['m2'],axis=1)/2

    # ui2p=u['i2'][:-1,:]+diff(u['i2'],axis=0)/2
    # vi2p=v['i2'][:,:-1]+diff(v['i2'],axis=1)/2

    umag={}
    uang={}

    umag['m1']=np.sqrt(u['m1']**2+v['m1']**2)*U
    uang['m1']=zeros((n,m))
    for i in range(n-1):
        for j in range(m-1):    
            uang['m1'][i,j]=math.atan2(v['m1'][i,j],u['m1'][i,j])

    umag['i1']=np.sqrt(u['i1']**2+v['i1']**2)*U
    uang['i1']=zeros((n,m))
    for i in range(n-1):
        for j in range(m-1):    
            uang['i1'][i,j]=math.atan2(v['i1'][i,j],u['i1'][i,j])

    umag['m2']=np.sqrt(u['m2']**2+v['m2']**2)*U
    uang['m2']=zeros((n,m))
    for i in range(n-1):
        for j in range(m-1):    
            uang['m2'][i,j]=math.atan2(v['m2'][i,j],u['m2'][i,j])

    umag['i2']=np.sqrt(u['i2']**2+v['i2']**2)*U
    uang['i2']=zeros((n,m))
    for i in range(n-1):
        for j in range(m-1):    
            uang['i2'][i,j]=math.atan2(v['i2'][i,j],u['i2'][i,j])

    upf(umag,uang,'uall',dirname,xmmat,ymmat,30,90,mspo,0)
    upf(umag,uang,'unorth',dirname,xmmat,ymmat,6,90,mspo,400)
Exemplo n.º 4
0
def ppvt(dirname):

    import pickle
    from pylab import *
    from operators import *
    from pf2d_ztitvar import pf2d_ztitvar
    
    from readjet2h import readjet2h
    vardict=readjet2h(dirname)
    locals().update(vardict)

    predir='/data/ilebras/twolayer-jets-climate/'

    [psi,q,qfull,u,v,x,y]=pickle.load(open(predir+'pickles/quickfields/'+dirname+'_qfield_tm.p', 'r' ))

    dx=(xmax-xmin)/(n-1)
    dy=(ymax-ymin)/(m-1)

    dx2=dx**2

    tdx=1.0/(2.0*dx)
    tdy= 1.0/(2.0*dy)
    t4dx=1.0/(8.0*dx)
    t4dy=1.0/(8.0*dy)
    t4dx2=1.0/(4.0*dx2)
    t4dxdy=1.0/(4.0*dx*dy)
    t4dy2=1.0/(4.0*dy**2)
    twdx2=1.0/(12.0*dx2)

    ######### calculate ubar grad q #########
    
    dqx1=gradx(qfull['m1'],tdx,n,m)
    dqy1=grady(qfull['m1'],tdy,n,m)

    dqx2=gradx(qfull['m2'],tdx,n,m)
    dqy2=grady(qfull['m2'],tdy,n,m)

    pvt={}

    pvt['m1']=u['m1']*dqx1+v['m1']*dqy1

    pvt['m2']=u['m2']*dqx2+v['m2']*dqy2


    ######### calculate A del^2 zeta #########

    d2xz1=gradxx(q['m1'],t4dx2,n,m)
    d2yz1=gradyy(q['m1'],t4dy2,n,m)

    d2xz2=gradxx(q['m2'],t4dx2,n,m)
    d2yz2=gradyy(q['m2'],t4dy2,n,m)
    
    pvt['i1']=akap*(d2xz1+d2yz1)

    pvt['i2']=akap*(d2xz2+d2yz2)

    xlow=250
    xhigh=-250
    ylow=250

    pf2d_ztitvar(pvt,'meanpvterms',x,y,dirname,(18,6),xlow,xhigh,ylow,'mean advection term','viscous term',1)
Exemplo n.º 5
0
def tracompv(finaldir):

    import numpy as np
    import os
    from pylab import *
    import fortranfile
    import pickle

    whichvar='g'

    from readjet2h import readjet2h
    vardict=readjet2h(finaldir)
    locals().update(vardict)

    [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r')) 	

    U=beta_dim*L**2/beta1
    f0_nd=f0_dim*L/U
    
    x=arange(xmin,xmax,(xmax-xmin)/n)*L
    y=arange(ymin,ymax,(ymax-ymin)/m)*L
    [ymat,xmat]=meshgrid(y,x)

    betay_vec=beta1*y/L
    betay=tile(betay_vec,(n,1))

    pload=fortranfile.FortranFile('../testing/'+finaldir+'/hbt.dat')
    pvec=pload.readReals()
    hb=pvec.reshape(n,m,order='F')
    
    if whichvar=='s':
        secspace=0.02/dt
        tmaxi=ksnap
    elif whichvar=='g':
        secspace=0.01
        tmaxi=ktmax
        

    time=arange(ksec,tmaxi,1/secspace)*L/U/60**2/24/365.25

    tdim=len(time)
    #print tdim

    xcom2=zeros(tdim)
    ycom2=zeros(tdim)
    if whichvar=='s':
        whiage='a2s'
        whiq='q2s'
        whip2='p2s'
        whip1='p1s'
    elif whichvar=='g':
        whiage='ag2'
        whiq='q2i'
        whip2='p2i'
        whip1='p1i'
    
    qcom=zeros(tdim)
    for iter in range(tdim):
        #load some age tracers
        pload=fortranfile.FortranFile('../testing/'+finaldir+'/psidat/'+str(whiage)+'_'+str(int(iter)).zfill(3))
        pvec=pload.readReals()
        age=pvec.reshape(n,m,order='F')

        qload=fortranfile.FortranFile('../testing/'+finaldir+'/psidat/'+str(whiq)+'_'+str(int(iter)).zfill(3))
        qvec=qload.readReals()
        q=qvec.reshape(n,m,order='F')

        qload=fortranfile.FortranFile('../testing/'+finaldir+'/psidat/'+str(whip2)+'_'+str(int(iter)).zfill(3))
        qvec=qload.readReals()
        p2=qvec.reshape(n,m,order='F')

        qload=fortranfile.FortranFile('../testing/'+finaldir+'/psidat/'+str(whip1)+'_'+str(int(iter)).zfill(3))
        qvec=qload.readReals()
        p1=qvec.reshape(n,m,order='F')

        qfull=q+fr2*(p1-p2)+f0_nd+betay+hb
        
        qcom[iter]=sum(qfull*age)/sum(age)


    figure()
    plot(time,qcom,'x-')
    title('Tracer center of mass PV')

    savefig('../plots/'+finaldir+'_tracerCOMpv'+str(whichvar)+'pos.png')
Exemplo n.º 6
0
def qplotall(dirname):

    import pickle
    from pfunc2d import pfunc2d,plotsame
    from pfunc2d_zoom import pfunc2d_zoom
    from pylab import *
    ioff()
    
    from readjet2h import readjet2h
    vardict=readjet2h(dirname)
    locals().update(vardict)

    predir='/data/ilebras/twolayer-jets-climate/'

    [psi,q,qfull,u,v,h,hbp,x,y]=pickle.load(open(predir+'pickles/quickfields/'+dirname+'_qfield.p', 'r' ))

    ymid=y[:-1]+diff(y)/2

    [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))
    U=beta_dim*L**2/beta1

    # figure(figsize=(13,8))
    # contourf(x/1000,y/1000,hbp.T)
    # title('Bottom Topography (in m)')
    # colorbar()

    # savefig(predir+'plots/'+dirname+dirname[6:]+'_hb.png')

    fsizemat=(20,6)

    xlow=250
    xhigh=-250
    ylow=250

    ytopo=int(m-(ymax-movedw-hw/20)*m/2/ymax-hw)
    ytopo2=int(m-(ymax-movedw-hw/20)*m/2/ymax)

    #pfunc2d(qfull,'qfull',x,y,dirname,(12,6),mspo,0,optyt1='Mean PV \n y position (km)',optyt2='Instantaneous PV \n y position (km)')

    #pfunc2d(psi,'psi_satcomp',x,y,dirname,(12,6),mspo,1,optyt1='Mean $\psi$ \n y position (km)',optyt2='Instantaneous $\psi$ \n y position (km)')

    # figure(figsize=(8,5))
    # # subplot(121)
    # # plotsame(v['m1'][:,m/4:]*U,mspo,x,y[m/4:],1,m/4)
    # # plot(x/1e3,y[ytopo]*ones(n)/1e3,'m')
    # # plot(x/1e3,y[ytopo2]*ones(n)/1e3,'m')
    # # title('Upper Layer')
    # # xlabel('x position (km)')
    # # ylabel('y position (km)')
    # ax=subplot(111)
    # plotsame(v['m2'][:,m/3:]*U,mspo,x,y[m/3:],1,m/3)
    # plot(x/1e3,y[ytopo]*ones(n)/1e3,'m')
    # plot(x/1e3,y[ytopo2]*ones(n)/1e3,'m')
    # ax.set_yticklabels([])
    # xlabel('x position (km)')
    # title('$\overline{v}$')
    # colorbar()
    # savefig(predir+'plots/'+dirname+dirname[6:]+'_vm2.png',bbox_inches='tight')
    
    
    #mean lower layer zeta for gsonly
    # figure(figsize=(8,5))
    # plotsame(q['m2'][:,m/4:]*L/U,mspo,x,y[m/4:],1,m/4)
    # xlabel('x position (km)')
    # ylabel('y position (km)')
    # show()
    # savefig(predir+'plots/'+dirname+dirname[6:]+'_zm2.png',bbox_inches='tight')

    #mean lower layer zeta for gsslope
    # figure(figsize=(10,5))
    # ax=subplot(111)
    # plotsame(q['m2'][:,m/4:]*L/U,mspo,x,y[m/4:],1,m/4)
    # plot(x/1e3,y[ytopo]*ones(n)/1e3,'m')
    # plot(x/1e3,y[ytopo2]*ones(n)/1e3,'m')
    # xlabel('x position (km)')
    # ax.set_yticklabels([])
    # show()
    # savefig(predir+'plots/'+dirname+dirname[6:]+'_zm2.png',bbox_inches='tight')

    import matplotlib
    matplotlib.rcParams.update({'font.size':22})





    xqind=692
    ls=6


    figure()
    #subplot(211)
    contour(x/1e3,y[mspo:]/1e3,psi['m1'][:,mspo:].T,levels=arange(-4e4,4e4+1e4,1e4),colors='k')
#     plot(x[1]*ones(m-mspo)/1e3,y[mspo:]/1e3,linewidth=ls+5,color='#a1dab4')
#     plot(x[xqind/2]*ones(m-mspo)/1e3,y[mspo:]/1e3,linewidth=ls,color='#41b6c4')
#     plot(x[xqind]*ones(m-mspo)/1e3,y[mspo:]/1e3,linewidth=ls,color='#2c7fb8')
    #plot(y[mspo:]/1e3,x[xqind*3/4]*ones(m-mspo)/1e3,linewidth=ls,color='#253494')
    xlabel('x position (km)')
    ylabel('y position (km)')
    # subplot(212)
    # contour(x,y,psi['m2'].T,levels=arange(-1.5e4,1.5e4+0.5e4,0.5e4),colors='k')
    savefig(predir+'plots/'+dirname+dirname[6:]+'_psicartoon.png',bbox_inches='tight')
Exemplo n.º 7
0
def loadmeans(dirname):

      import numpy as np
      import fortranfile
      from pylab import *
      import pickle
      import os
      from operators import *
      from uplotfunc import upf
      import math

      from readjet2h import readjet2h
      vardict=readjet2h(dirname)
      locals().update(vardict)

      [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))

      U=beta_dim*L**2/beta1
      gprime=f0_dim**2*L**2/h1/fr1
      h2=f0_dim**2*L**2/gprime/fr2
      f0_nd=f0_dim*L/U

      #define x and y (m)
      x=arange(xmin,xmax,(xmax-xmin)/n)
      y=arange(ymin,ymax,(ymax-ymin)/m)

      dx=(xmax-xmin)/(n-1)
      dy=(ymax-ymin)/(m-1)

      dx2=dx**2

      tdx=1.0/(2.0*dx)
      tdy= 1.0/(2.0*dy)
      t4dx=1.0/(8.0*dx)
      t4dy=1.0/(8.0*dy)
      t4dx2=1.0/(4.0*dx2)
      t4dxdy=1.0/(4.0*dx*dy)
      t4dy2=1.0/(4.0*dy**2)
      twdx2=1.0/(12.0*dx2)

      betay_vec=beta1*y/L
      betay=tile(betay_vec,(n,1))

      predir='/data/ilebras/twolayer-jets-climate/'
      rundir=predir+'testing/'+dirname+'/'

#--------move on to load psi--------------
      psi={}

      pload=fortranfile.FortranFile(rundir+'pm1.dat')
      pvec=pload.readReals()

      pm1=pvec.reshape(n,m,order='F')
      psi['m1']=pm1

      pload=fortranfile.FortranFile(rundir+'pm2.dat')
      pvec=pload.readReals()

      pm2=pvec.reshape(n,m,order='F')
      psi['m2']=pm2

# #--------and then calculate q (zeta)--------------
      q={}

      q['m1']=gradxx(psi['m1'],t4dx2,n,m)+gradyy(psi['m1'],t4dy2,n,m)

      q['m2']=gradxx(psi['m2'],t4dx2,n,m)+gradyy(psi['m2'],t4dy2,n,m)

#--------if there is bottom topography, plot it-----
      try:
            pload=fortranfile.FortranFile(rundir+'hbt.dat')
            pvec=pload.readReals()

            hb=pvec.reshape(n,m,order='F')
      
      except:
            hb=zeros((n,m))
            hbp=hb

#--------and then plot qfull= q +fr(psi-psi, depending) + betay + hb--------
      qfull={}

      qfull['m1']=q['m1']*L/U+betay+fr1*(psi['m2']-psi['m1'])+f0_nd

      qfull['m2']=q['m2']*L/U+betay+fr2*(psi['m1']-psi['m2'])+hb+f0_nd

#--------calculate a few more things leading up to transport--------
      u={}
      v={}

      u['m1']=-grady(psi['m1'],t4dy,n,m)
      u['m2']=-grady(psi['m2'],t4dy,n,m)


      v['m1']=gradx(psi['m1'],t4dx,n,m)
      v['m2']=gradx(psi['m2'],t4dx,n,m)


      umag={}
      uang={}
      
      umag['m1']=np.sqrt(u['m1']**2+v['m1']**2)
      uang['m1']=zeros((n,m))
      for i in range(n-1):
        for j in range(m-1):    
            uang['m1'][i,j]=math.atan2(v['m1'][i,j],u['m1'][i,j])


      umag['m2']=np.sqrt(u['m2']**2+v['m2']**2)
      uang['m2']=zeros((n,m))
      for i in range(n-1):
        for j in range(m-1):    
            uang['m2'][i,j]=math.atan2(v['m2'][i,j],u['m2'][i,j])

      umag['i1']=umag['m1']
      umag['i2']=umag['m2']

      uang['i1']=uang['m1']
      uang['i2']=uang['m2']

      #xmid=x[:-1]+diff(x)/2
      #ymid=y[:-1]+diff(y)/2

      [xmmat,ymmat]=meshgrid(x,y)

      if not os.path.exists(predir+'pickles/quickfields/'+dirname[:6]):
            os.mkdir(predir+'pickles/quickfields/'+dirname[:6])

      pickle.dump([psi,q,qfull,u,v,x,y], open(predir+'pickles/quickfields/'+dirname+'_qfield_tm.p', 'w' ) )

      upf(umag,uang,'umeantest',dirname,xmmat,ymmat,6,90,mspo,400)
def mtmoc(dirname):

    import numpy as np
    import os
    from pylab import *
    import fortranfile
    import pickle
    import matplotlib.cm as cmapo

    ion()

    predir = "/data/ilebras/twolayer-jets-climate/"
    pathint = "testing/" + dirname + "/psidat/"

    whivar = "a2s_"
    iors = "s"
    savedir = "bupu/"

    if not os.path.exists("../plots/" + dirname + "_" + whivar + savedir):
        os.mkdir("../plots/" + dirname + "_" + whivar + savedir)

    from readjet2h import readjet2h

    vardict = readjet2h(dirname)
    locals().update(vardict)

    [L, beta_dim, f0_dim, h1] = pickle.load(open("/data/ilebras/twolayer-jets-climate/pickles/dimize.p", "r"))

    x = arange(xmin, xmax, (xmax - xmin) / n) * L
    y = arange(ymin, ymax, (ymax - ymin) / m) * L

    U = beta_dim * L ** 2 / beta1
    betay_vec = beta1 * y / L
    betay = tile(betay_vec, (n, 1))
    f0_nd = f0_dim * L / U

    secspace = 0.1 / dt
    time = arange(ksec, ksnap, 1 / secspace) * L / U / 60 ** 2 / 24 / 365.25
    # maxrep=len(time)
    maxrep = 400

    ytopo = int(m - (ymax - movedw - hw / 20) * m / 2 / ymax - hw)
    ydw = int(m - (ymax - movedw) * m / 2 / ymax)
    ybtwn = (ytopo + ydw) / 2
    figure(figsize=(20, 6))

    plt.tight_layout

    x1 = n / 2 - 500
    x2 = n / 2 + 250
    fs = 18

    tracsum = zeros(maxrep)
    tracpos = zeros(maxrep)
    tracpos2 = zeros(maxrep)
    for iter in range(maxrep):
        print iter

        aload = fortranfile.FortranFile(predir + pathint + whivar + str(iter).zfill(3))
        avec = aload.readReals()
        age = avec.reshape(n, m, order="F")

        tracsum[iter] = sum((age[x1:x2, :ybtwn] - ybtwn) > 0)

        ## tracpos[iter]=y[(argmin(abs(age[x1:x2,:].T-ydw),axis=0)).min()]/1e3
        ## tracpos2[iter]=y[(argmin(abs(age[x1:x2,:].T-ytopo),axis=0)).min()]/1e3

        # clf()
        # cla()
        # contour(x[mspo/2:-mspo]/1e3,y[mspo:]/1e3,age[mspo/2:-mspo,mspo:].T,levels=linspace(ytopo,ydw,4),vmin=ytopo,vmax=ydw,colors='w',linewidth=3)
        # age[age>ytopo]=ytopo
        # contourf(x[mspo/2:-mspo]/1e3,y[mspo:]/1e3,age[mspo/2:-mspo,mspo:].T,501,cmap='BuPu')

        # plot(x[x1]*ones(m)/1e3,y/1e3,'k')
        # plot(x[x2]*ones(m)/1e3,y/1e3,'k')
        # clim([0, age.max()])
        # xlim([x[mspo/2]/1e3, x[-mspo]/1e3])
        # ylim([y[mspo]/1e3, y.max()/1e3])
        # xlabel('x position (km)',fontsize=fs)
        # ylabel('y position (km)',fontsize=fs)
        # xlabel(dirname)
        # title('Lower Layer')

        # savefig(predir+'plots/'+dirname+'_'+whivar+savedir+str(dirname[7:])+'_'+str(int(iter)).zfill(3)+'.png')

        # figure()
        # plot(time[:maxrep],tracsum)
        # #plot(time[:maxrep],tracpos2)
        # grid('on')
        # savefig(predir+'plots/'+dirname+dirname[6:]+'_tracsumpassed_ybtwn_longer.png',bbox_inches='tight')

    tracflux = tracsum.max()
    tfluxmn = mean(tracsum)

    pickle.dump([tracflux, tfluxmn], open(predir + "pickles/scatter/" + dirname + "_tracvars.p", "w"))
Exemplo n.º 9
0
def psimeas(dirname):

    import pickle
    
    from pfunc2d import pfunc2d,plotsame
    from pfunc2d_zoom import pfunc2d_zoom
    
    ion()
    
    from readjet2h import readjet2h
    vardict=readjet2h(dirname)
    #print vardict
    globals().update(vardict)

    predir='/data/ilebras/twolayer-jets-climate/'

    [psi,q,qfull,u,v,h,hbp,x,y]=pickle.load(open(predir+'pickles/quickfields/'+dirname+'_qfield.p', 'r' ))

    ymid=y[:-1]+diff(y)/2

    [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))
    #beta1=vardict['beta1']
    U=beta_dim*L**2/beta1


    fsizemat=(20,6)

    xlow=250
    xhigh=-250
    ylow=250

    ytopo=int(m-(ymax-movedw-hw/20)*m/2/ymax-hw)
    ytopo2=int(m-(ymax-movedw-hw/20)*m/2/ymax)

    import matplotlib
    matplotlib.rcParams.update({'font.size':22})

    xqind=692
    ls=6
    

    #find the psi contours that intersect the western and/or eastern boundaries, plot them in a different color than the ones that dont
    psicentral1=psi['m1'][(psi['m1']>max(abs(psi['m1'][-1,:]))) & (psi['m1']>max(abs(psi['m1'][:,mspo])))]

#& (psi['m1']>max(psi['m1'][:,-1]))
    closedp1=psicentral1.min()
    #print closedp

    psicentral2=psi['m2'][(psi['m2']>max(abs(psi['m2'][-1,:]))) & (psi['m2']>max(abs(psi['m2'][:,mspo]))) & (psi['m2']>max(psi['m2'][:,-1]))]

    closedp2=psicentral2.min()

    psibaro=psi['m1']/fr1+psi['m2']/fr2

    psicentralbaro=psibaro[(psibaro>max(abs(psibaro[-1,:]))) & (psibaro>max(abs(psibaro[:,mspo])))& (psibaro>max(psibaro[:,-1]))]

    closedpb=psicentralbaro.min()

    #print closedpb


    def conthigh(psiv,closedp,var):
        figure(figsize=fsizemat)
        contour(x/1e3,y[mspo:]/1e3,psiv[:,mspo:].T,colors='r')
        contour(x/1e3,y[mspo:]/1e3,psiv[:,mspo:].T,levels=psiv[0,:],colors='k')
        cs=contour(x/1e3,y[mspo:]/1e3,psiv[:,mspo:].T,colors='g',levels=[-closedp,closedp],linewidth=ls)
        paths=cs.collections[0].get_paths()
        #print paths
        plot(x[mspo/2]*ones(m-mspo)/1e3,y[mspo:]/1e3,'k')
        plot(x[-mspo]*ones(m-mspo)/1e3,y[mspo:]/1e3,'k')
        xlabel('x position (km)')
        ylabel('y position (km)')
        title(var+', highlighting contours that do not intersect the western boundary')

        savefig(predir+'plots/'+dirname+dirname[6:]+'_'+var+'_contour.png',bbox_inches='tight')

        return paths

    paths1=conthigh(psi['m1'],closedp1,'psi1')
    paths2=conthigh(psi['m2'],closedp2,'psi2')
    #pathsb=conthigh(psibaro,closedpb,'psibaro')
    
    def maxrecirconly(psiv,closedp,var):
        figure(figsize=fsizemat)
        cs=contour(x/1e3,y[mspo:]/1e3,psiv[:,mspo:].T,colors='k',levels=[-closedp,closedp],linewidth=ls)
        clabel(cs)
        xlabel('x position (km)')
        ylabel('y position (km)')
        title('Largest recirculating streamfunction in '+var)
        savefig(predir+'plots/'+dirname+dirname[6:]+var+'_maxrecirc.png',bbox_inches='tight')

    # maxrecirconly(psi['m1'],closedp1,'psi1')
    # maxrecirconly(psi['m2'],closedp2,'psi2')
    # maxrecirconly(psibaro,closedpb,'psibaro')

    def linplot(psi,var):

        figure(figsize=fsizemat)
        plot(y[mspo:]/1e3,psi[0,mspo:].T,'r',label='All streamfunctions')
        plot(y[mspo:]/1e3,psi[:,mspo:].T,'r')
        plot(y[mspo:]/1e3,psi[-1,mspo:],'k',label='streamfunction on eastern boundary')
        plot(y[mspo:]/1e3,psi[0,mspo:],'b',label='streamfunction on western boundary')
        xlim([y[mspo]/1e3,y[-1]/1e3])
        xlabel('y position (km)')
        ylabel(str(var))
        grid('on')
        legend(loc=(1.05,0.5))
        savefig(predir+'plots/'+dirname+dirname[6:]+var+'_psimeas_line.png',bbox_inches='tight')

    linplot(psi['m1'],'psi1')
    linplot(psi['m2'],'psi2')
    linplot(psibaro,'psibaro')

    
    pickle.dump([closedp1,paths1,closedp2,paths2], open( predir+'pickles/psimeas/'+dirname+'_psimeas' , 'w'))
Exemplo n.º 10
0
def stabcrit(dirname):

     import numpy as np
     import fortranfile
     from pylab import *
     import pickle
     ion()
     grid('on')

     predir='/data/ilebras/twolayer-jets-climate/'
     rundir=predir+'testing/'+dirname+'/'

     from readjet2h import readjet2h
     vardict=readjet2h(dirname)
     locals().update(vardict)

     [psi,q,qfull,u,v,h,hbp,x,y]=pickle.load(open(predir+'pickles/quickfields/'+dirname+'_qfield.p', 'r' ))

     [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))

     U=beta_dim*L**2/beta1
     gprime=f0_dim**2*L**2/h1/fr1
     h2=f0_dim**2*L**2/gprime/fr2
     f0_nd=f0_dim*L/U

     #get beta*y vector to add to 
     betay_vec=beta1*y/L
     betay=tile(betay_vec,(n,1))

     where_west=mspo/2+5
     where_center=n/2
     where_east=3*n/4

     from operators import grady


     dy=(ymax-ymin)/real(m-1)

     t4dy=1.0/(8.0*dy)

     dqdy1=grady(qfull['m1'],t4dy,n,m)
     dqdy2=grady(qfull['m2'],t4dy,n,m)

     ymid=(y[:-1]+y[1:])/2
     midy=m/2

     figure(figsize=(18,10))
     ax=subplot(221)
     plot(y[midy:]/1e6,psi['m1'][where_west,midy:],'r')
     plot(y[midy:]/1e6,psi['m2'][where_west,midy:],'b')
     plot(y[midy:]/1e6,zeros(m-midy),'k')
     plot(y[midy:]/1e6,zeros(m-midy),'k.-')
     plot(y[midy:]/1e6,zeros(m-midy),'k--')
     plot(y[midy:]/1e6,psi['m2'][where_east,midy:],'b--')
     plot(y[midy:]/1e6,psi['m1'][where_east,midy:],'r--')
     plot(y[midy:]/1e6,psi['m2'][where_center,midy:],'b-.')
     plot(y[midy:]/1e6,psi['m1'][where_center,midy:],'r-.')
     legend(['Upper Layer','Lower Layer','West (just outside sponge)','Center of domain','East (3/4 of domain)'])
     xlim([y[midy]/1e6, y[-1]/1e6])
     ax.set_xticklabels([])
     title('Psi')
     grid('on')

     ax=subplot(222)
     plot(y[midy:]/1e6,q['m2'][where_west,midy:],'b')
     plot(y[midy:]/1e6,q['m1'][where_west,midy:],'r')
     plot(y[midy:]/1e6,q['m2'][where_east,midy:],'b--')
     plot(y[midy:]/1e6,q['m1'][where_east,midy:],'r--')
     plot(y[midy:]/1e6,q['m2'][where_center,midy:],'b-.')
     plot(y[midy:]/1e6,q['m1'][where_center,midy:],'r-.')
     xlim([y[midy]/1e6, y[-1]/1e6])
     ax.set_xticklabels([])
     title('Relative vorticity')
     grid('on')

     ax=subplot(223)
     plot(y[midy:]/1e6,qfull['m2'][where_west,midy:],'b')
     plot(y[midy:]/1e6,qfull['m1'][where_west,midy:],'r')
     plot(y[midy:]/1e6,qfull['m2'][where_east,midy:],'b--')
     plot(y[midy:]/1e6,qfull['m1'][where_east,midy:],'r--')
     plot(y[midy:]/1e6,qfull['m2'][where_center,midy:],'b-.')
     plot(y[midy:]/1e6,qfull['m1'][where_center,midy:],'r-.')
     xlim([y[midy]/1e6, y[-1]/1e6])
     xlabel('y distance (1000 km)')
     title('PV')
     grid('on')


     subplot(224)
     plot(y[midy:]/1e6,dqdy2[where_west,midy:],'b')
     plot(y[midy:]/1e6,dqdy1[where_west,midy:],'r')
     plot(y[midy:]/1e6,dqdy2[where_east,midy:],'b--')
     plot(y[midy:]/1e6,dqdy1[where_east,midy:],'r--')
     plot(y[midy:]/1e6,dqdy2[where_center,midy:],'b-.')
     plot(y[midy:]/1e6,dqdy1[where_center,midy:],'r-.')
     #plot(ymid[midy:]/1e6,zeros(shape(ymid[midy:])),'k')
     ylim([-10,10])
     xlim([ymid[midy]/1e6, ymid[-1]/1e6])
     xlabel('y distance (1000 km)')
     title('d(PV)/dy')
     grid('on')


     savefig(predir+'plots/'+dirname+dirname[6:]+'_stabcrit.pdf')


     midy=3*m/4

     figure(figsize=(18,10))
     ax=subplot(221)
     plot(y[midy:]/1e6,psi['m1'][where_west,midy:],'r')
     plot(y[midy:]/1e6,psi['m2'][where_west,midy:],'b')
     plot(y[midy:]/1e6,zeros(m-midy),'k')
     plot(y[midy:]/1e6,zeros(m-midy),'k.-')
     plot(y[midy:]/1e6,zeros(m-midy),'k--')
     plot(y[midy:]/1e6,psi['m2'][where_east,midy:],'b--')
     plot(y[midy:]/1e6,psi['m1'][where_east,midy:],'r--')
     plot(y[midy:]/1e6,psi['m2'][where_center,midy:],'b-.')
     plot(y[midy:]/1e6,psi['m1'][where_center,midy:],'r-.')
     legend(['Upper Layer','Lower Layer','West (just outside sponge)','Center of domain','East (3/4 of domain)'])
     xlim([y[midy]/1e6, y[-1]/1e6])
     ax.set_xticklabels([])
     title('Psi')
     grid('on')

     ax=subplot(222)
     plot(y[midy:]/1e6,q['m2'][where_west,midy:],'b')
     plot(y[midy:]/1e6,q['m1'][where_west,midy:],'r')
     plot(y[midy:]/1e6,q['m2'][where_east,midy:],'b--')
     plot(y[midy:]/1e6,q['m1'][where_east,midy:],'r--')
     plot(y[midy:]/1e6,q['m2'][where_center,midy:],'b-.')
     plot(y[midy:]/1e6,q['m1'][where_center,midy:],'r-.')
     xlim([y[midy]/1e6, y[-1]/1e6])
     ax.set_xticklabels([])
     title('Relative vorticity')
     grid('on')

     ax=subplot(223)
     plot(y[midy:]/1e6,qfull['m2'][where_west,midy:],'b')
     plot(y[midy:]/1e6,qfull['m1'][where_west,midy:],'r')
     plot(y[midy:]/1e6,qfull['m2'][where_east,midy:],'b--')
     plot(y[midy:]/1e6,qfull['m1'][where_east,midy:],'r--')
     plot(y[midy:]/1e6,qfull['m2'][where_center,midy:],'b-.')
     plot(y[midy:]/1e6,qfull['m1'][where_center,midy:],'r-.')
     xlim([y[midy]/1e6, y[-1]/1e6])
     xlabel('y distance (1000 km)')
     title('PV')
     grid('on')

     subplot(224)
     plot(y[midy:]/1e6,dqdy2[where_west,midy:],'b')
     plot(y[midy:]/1e6,dqdy1[where_west,midy:],'r')
     plot(y[midy:]/1e6,dqdy2[where_east,midy:],'b--')
     plot(y[midy:]/1e6,dqdy1[where_east,midy:],'r--')
     plot(y[midy:]/1e6,dqdy2[where_center,midy:],'b-.')
     plot(y[midy:]/1e6,dqdy1[where_center,midy:],'r-.')
     #plot(ymid[midy:]/1e6,zeros(shape(ymid[midy:])),'k')
     #ylim([-10,10])
     xlim([ymid[midy]/1e6, ymid[-1]/1e6])
     xlabel('y distance (1000 km)')
     title('d(PV)/dy')
     grid('on')

     savefig(predir+'plots/'+dirname+dirname[6:]+'_stabcrit_zoom.pdf')
def movie_tracer_wpv(dirname):

    import numpy as np
    import os
    from pylab import *
    import fortranfile
    import pickle
    import matplotlib.cm as cmapo

    ioff()

    predir = "/data/ilebras/twolayer-jets-climate/"
    pathint = "testing/" + dirname + "/psidat/"

    maxrep = 400
    whivar = "a2s_"
    iors = "s"

    if not os.path.exists("../plots/" + dirname + dirname[6:] + "_" + whivar + "mov"):
        os.mkdir("../plots/" + dirname + dirname[6:] + "_" + whivar + "mov")

    from readjet2h import readjet2h

    vardict = readjet2h(dirname)
    locals().update(vardict)

    [L, beta_dim, f0_dim, h1] = pickle.load(open("/data/ilebras/twolayer-jets-climate/pickles/dimize.p", "r"))

    x = arange(xmin, xmax, (xmax - xmin) / n) * L
    y = arange(ymin, ymax, (ymax - ymin) / m) * L

    U = beta_dim * L ** 2 / beta1
    betay_vec = beta1 * y / L
    betay = tile(betay_vec, (n, 1))
    f0_nd = f0_dim * L / U

    # pause time when watching psi movie
    ptime = 0.0001

    pload = fortranfile.FortranFile(predir + pathint + whivar + "000")
    pvec = pload.readReals()
    age = pvec.reshape(n, m, order="F")

    # set the range for the colorbar to be greater than zero and to the max
    cmin1 = age.min()
    cmax1 = age.max()
    # cmax1=0.5
    # cmin=0
    # cmax=500
    setc1 = linspace(cmin1, cmax1, 151)

    hload = fortranfile.FortranFile(predir + "testing/150327/base/hbt.dat")
    hvec = hload.readReals()
    hb = hvec.reshape(n, m, order="F")

    figure(figsize=(20, 6))

    # contourf(x/1e3,y/1e3,age.T,cmap=cm.hot_r)#-baseage)#, setc1)
    # xlim([x.min()/1e3, x.max()/1e3])
    # ylim([y.min()/1e3, y.max()/1e3])
    # xlabel(dirname)
    # colorbar()

    plt.tight_layout

    # pause(ptime)

    for iter in range(maxrep):
        print iter
        clf()

        aload = fortranfile.FortranFile(predir + pathint + whivar + str(iter).zfill(3))
        avec = aload.readReals()
        age = avec.reshape(n, m, order="F")

        q2load = fortranfile.FortranFile(predir + pathint + "q2" + str(iors) + "_" + str(iter).zfill(3))
        q2vec = q2load.readReals()
        q2 = q2vec.reshape(n, m, order="F")

        p1load = fortranfile.FortranFile(predir + pathint + "p1" + str(iors) + "_" + str(iter).zfill(3))
        p1vec = p1load.readReals()
        p1 = p1vec.reshape(n, m, order="F")

        p2load = fortranfile.FortranFile(predir + pathint + "p2" + str(iors) + "_" + str(iter).zfill(3))
        p2vec = p2load.readReals()
        p2 = p2vec.reshape(n, m, order="F")

        qfull = q2 + betay + fr2 * (p1 - p2) + hb + f0_nd

        cla()
        contour(x / 1e3, y / 1e3, qfull.T, linspace(8, 14, 6), colors="k")
        contourf(x / 1e3, y / 1e3, age.T, setc1, cmap=cmapo.hot_r, vmin=0, vmax=age.max())
        clim([0, age.max()])
        colorbar()
        xlim([x.min() / 1e3, x.max() / 1e3])
        ylim([y.min() / 1e3, y.max() / 1e3])
        xlabel(dirname)
        title(str(iter))

        # load instantaneous PV to plot on there too

        savefig(
            predir
            + "plots/"
            + dirname
            + dirname[6:]
            + "_"
            + whivar
            + "mov/"
            + str(dirname[7:])
            + "_wpv2_"
            + str(int(iter)).zfill(3)
            + ".png"
        )
Exemplo n.º 12
0
def movie_pv(dirname,iors='s'):

	import numpy as np
	import os
	from pylab import *
	import fortranfile
        import pickle
        import matplotlib.cm as cmapo

        ion()

	predir='/data/ilebras/twolayer-jets-climate/'
	pathint='testing/'+dirname+'/psidat/'	

        layer='2'

        if not os.path.exists('../plots/'+dirname+'/q'+layer+'zoom'+iors+'mov'):
                #os.mkdir('../plots/'+dirname)
                os.mkdir('../plots/'+dirname+'/q'+layer+'zoom'+iors+'mov')

        from readjet2h import readjet2h
        vardict=readjet2h(dirname)
        locals().update(vardict)

        [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))

	x=arange(xmin,xmax,(xmax-xmin)/n)*L
	y=arange(ymin,ymax,(ymax-ymin)/m)*L

        U=beta_dim*L**2/beta1
        betay_vec=beta1*y/L
        betay=tile(betay_vec,(n,1))
        f0_nd=f0_dim*L/U
        ylow=200

        if iors=='s':
                secspace=0.02/dt
                tmaxi=ksnap
        elif iors=='i':
                secspace=0.01
                tmaxi=ktmax

        time=arange(ksec,tmaxi,1/secspace)*L/U/60**2/24/365.25

        tdim=len(time)

#pause time when watching psi movie
	ptime=0.0001

        from makefields import gethb
        hb=gethb(cm,cz,ymax,movedw,hw,hbmax,a2,n,m)

        pload=fortranfile.FortranFile(predir+pathint+'q2'+iors+'_000')
        pvec=pload.readReals()
        q2=pvec.reshape(n,m,order='F')

        pload=fortranfile.FortranFile(predir+pathint+'q1'+iors+'_000')
        pvec=pload.readReals()
        q1=pvec.reshape(n,m,order='F')

        pload=fortranfile.FortranFile(predir+pathint+'p2'+iors+'_000')
        pvec=pload.readReals()
        p2=pvec.reshape(n,m,order='F')

        pload=fortranfile.FortranFile(predir+pathint+'p1'+iors+'_000')
        pvec=pload.readReals()
        p1=pvec.reshape(n,m,order='F')

        #qfull0=q2+betay+fr2*(p1-p2)+hb#+f0_nd
        qfull0=q1+betay+fr1*(p2-p1)+hb
        
                #set the range for the colorbar to be greater than zero and to the max
        #cmin1=qfull0.min()
        #cmax1=qfull0.max()
        cmin1=-0.5
        cmax1=4
        #cmax1=0.5
        setc1=linspace(cmin1,int(cmax1),501)

        xmini=mspo
        xmaxi=-3*mspo/2

        ydw=int(m-(ymax-movedw)*m/2/ymax)
        ytopo=int(m-(ymax-movedw-hw/20)*m/2/ymax-hw)
        ytopo2=int(m-(ymax-movedw-hw/20)*m/2/ymax)

        fs=18

	figure(figsize=(20,6)) 

        
	for iter in range(0,999):
		print iter
		clf()		

                q2load=fortranfile.FortranFile(predir+pathint+'q2'+iors+'_'+str(iter).zfill(3))
		q2vec=q2load.readReals()
		q2=q2vec.reshape(n,m,order='F')

                q1load=fortranfile.FortranFile(predir+pathint+'q1'+iors+'_'+str(iter).zfill(3))
		q1vec=q1load.readReals()
		q1=q1vec.reshape(n,m,order='F')

                p1load=fortranfile.FortranFile(predir+pathint+'p1'+iors+'_'+str(iter).zfill(3))
		p1vec=p1load.readReals()
		p1=p1vec.reshape(n,m,order='F')

                p2load=fortranfile.FortranFile(predir+pathint+'p2'+iors+'_'+str(iter).zfill(3))
		p2vec=p2load.readReals()
		p2=p2vec.reshape(n,m,order='F')
                
                if layer=='1':
                        qfull=q1+betay+fr1*(p2-p1)
                elif layer=='2':
                        qfull=q2+betay+fr2*(p1-p2)+hb#+f0_nd
                        
                qfull[qfull<=cmin1]=cmin1
                qfull[qfull>=cmax1]=cmax1
		
                cla()
                contourf(x[xmini:xmaxi]/1e3,y[ylow:]/1e3,qfull[xmini:xmaxi,ylow:].T,setc1,cmap='RdBu')
                cbar=colorbar()
                cbar.set_label('PV (nondim)',fontsize=fs)
                # plot(x[mspo/2]/1000*ones(shape(y)),y/1000,'k')
                # plot(x[-mspo]/1000*ones(shape(y)),y/1000,'k')
                plot(x/1000,y[ydw]/1000*ones(shape(x)),'k')
                plot(x/1000,y[ytopo]/1000*ones(shape(x)),'k')
                plot(x/1000,y[ytopo2]/1000*ones(shape(x)),'k')
                
		xlim([x[xmini]/1e3, x[xmaxi-1]/1e3])
		ylim([y[ylow:].min()/1e3, y[ylow:].max()/1e3])
		xlabel('x position (km)',fontsize=fs)
                ylabel('y position (km)',fontsize=fs)
                if layer=='1':
                        title('Upper Layer',fontsize=fs+2)
                elif layer=='2':
                        title('Lower Layer',fontsize=fs+2)
                
                #load instantaneous PV to plot on there too

		savefig(predir+'plots/'+dirname+'/q'+layer+'zoom'+iors+'mov/'+str(dirname[11:])+'_q'+layer+'zoom_'+str(int(iter)).zfill(3)+'.png')
Exemplo n.º 13
0
def pvinitnd(dirname):

     import numpy as np
     import os
     from pylab import *
     import fortranfile
     from math import erf
     import pickle
     ion()

     from readjet2h import readjet2h
     vardict=readjet2h(dirname)
     locals().update(vardict)

     [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))

     U=beta_dim*L**2/beta1
     gprime=f0_dim**2*L**2/h1/fr1
     h2=f0_dim**2*L**2/gprime/fr2

     #loading/running it is optional, but will make sure I am using the relevant pickle
     # from dimensions import dimensions
     # dimensions()
     # #load the pickle created in dimensions
     # with open('/data/ilebras/twolayer-jets-climate/pickles/dim/dimpickle','r') as f:
     #     [L,xmin,xmax,ymin,ymax,n,m,U,beta_nd,beta_dim,N,fr1,fr2,f0_dim,gprime,h1,h2,gs1,g1,dw1,d1,as2,a2,movedw,movegs,nspo,mspo,hw,hbmax]=pickle.load(f)


     #are jsi and jso different? jsdiff=0 if they are not, 1 if they are.
     jsdiff=0

     x=linspace(xmin,xmax,n)
     y=linspace(ymin,ymax,m)

     jsi2=zeros((m,1))
     jsi1=zeros((m,1))
     jso2=zeros((m,1))
     jso1=zeros((m,1))

     PSI1=zeros((n,m))
     PSI2=zeros((n,m))

     weig=zeros((n,1))

     moveout=0
     dwiden=1

     for j in range(0,m):
         jsi1[j]=gs1*(erf(g1*(y[j]-movegs)))+dw1*(erf(d1*(y[j]-movedw)))
         jsi2[j]=as2*(erf(a2*(y[j]-movedw)))
         # jso1[j]=gs1*(erf(g1*(y[j]-movegs)))+dw1*(erf(d1*(y[j]-movedw)))
         # jso2[j]=as2*(erf(a2/dwiden*(y[j]-movedw-moveout)))

     u1=squeeze(diff(jsi1,axis=0))/diff(y)
     u2=squeeze(diff(jsi2,axis=0))/diff(y)

     # figure()
     # plot(y[1:]*L/1e3,u1*U)
     # plot(y[1:]*L/1e3,u2*U)
     # title('Max GS speed = '+str("%.2f" % u1.min())+'m/s  Max DWBC speed = '+str("%.3f" %u1.max())+'m/s')
     # grid('on')

     if jsdiff==1:

     #will need to use this only if jsi is different than jso
          for i in range(nspo):
             weig[i]= 0.0
             for j in range(m):
                 PSI1[i,j]=jsi1[j]*(1.0-weig[i])+jso1[j]*weig[i]
                 PSI2[i,j]=jsi2[j]*(1.0-weig[i])+jso2[j]*weig[i]

          for i in range(nspo,n-mspo):
              weig[i]=float(i-nspo)/(n-(nspo+mspo+1))
              for j in range(m):
                  PSI1[i,j]=jsi1[j]*(1.0-weig[i])+jso1[j]*weig[i]
                  PSI2[i,j]=jsi2[j]*(1.0-weig[i])+jso2[j]*weig[i]

          for i in range(n-mspo,n):
              weig[i]=1.0
              for j in range(m):
                  PSI1[i,j]=jsi1[j]*(1.0-weig[i])+jso1[j]*weig[i]
                  PSI2[i,j]=jsi2[j]*(1.0-weig[i])+jso2[j]*weig[i]

          psi1=PSI1
          psi2=PSI2

     elif jsdiff==0:
          psi1=jsi1
          psi2=jsi2

     # figure()
     # subplot(121)
     # contourf(PSI1.T)
     # colorbar()

     # subplot(122)
     # contourf(PSI2.T)
     # colorbar()

     #layer interface height
     # hm=f0_dim/gprime*(psi2-psi1)

     # # figure()
     # # contourf(hm)
     # # colorbar()

     # hm1=h1-hm
     # hm2=h2+hm

     #topo

     cz=40.0
     cm=0.0

     hpos=zeros((n,1))
     for i in range(n):
         hpos[i]=-cm*exp(-(float(i)-float(n)/2)**2/(2*cz**2))+m-(ymax-movedw)*m/2/ymax+hw/2

     hb=zeros((n,m))
     for i in range(n):
         for j in range(int(hw)):
             hb[i,int(j+hpos[i]-hw)]=hbmax*float(j)/hw
             for j in range(int(hpos[i]),m):
                 hb[i,j]=hbmax

     epsilon=U/(f0_dim*L)
     hbdim=hb*h2*epsilon

     # figure()
     # contourf(hbdim)
     # colorbar()

     #transport
     # mind=-1

     # if jsdiff==1:
     #     tm1=u1*(hm1[mind,:-1]+hm1[mind,1:])/2*L*(xmax-xmin)/n/1e6
     #     tm2=u2*(hm2[mind,:-1]+hm2[mind,1:])/2*L*(xmax-xmin)/n/1e6
     # elif jsdiff==0:
     #     tm1=u1*(hm1[:-1]+hm1[1:])/2*L*(xmax-xmin)/n/1e6
     #     tm2=u2*(hm2[:-1]+hm2[1:])/2*L*(xmax-xmin)/n/1e6


     # ctm1=cumsum(tm1)
     # ctm2=cumsum(tm2)

     # figure()
     # subplot(221)
     # plot(tm1)
     # subplot(222)
     # plot(tm2)
     # subplot(223)
     # plot(ctm1)
     # subplot(224)
     # plot(ctm2)

     #PV-PLOT IT IN ALL ITS WAYS
     # q_1=del^2*psi_1+beta*y-fr1(psi_1-psi_2)
     # q_2=del^2*psi_2+beta*y+fr2(psi_1-psi_2)+h_B

     #res=(xmax-xmin)/n*L
     ndstep=(xmax-xmin)/n

     if jsdiff==1:
          d2xp1=diff(psi1,2,0)/ndstep**2
          d2yp1=diff(psi1,2,1)/ndstep**2
          d2psi1=d2xp1[:,1:-1]+d2yp1[1:-1,:]

          d2xp2=diff(psi2,2,0)/ndstep**2
          d2yp2=diff(psi2,2,1)/ndstep**2
          d2psi2=d2xp2[:,1:-1]+d2yp2[1:-1,:]

          slind=[0]
#above-which slice do you want to look at in the plot?

     elif jsdiff==0:
          d2psi1=squeeze(diff(psi1,2,0)/ndstep**2)
          d2psi2=squeeze(diff(psi2,2,0)/ndstep**2)

          slind=range(m-2)

     xlen=len(x)
     ylen=len(y)

     #if jsdiff==1:
         # betay_dim=f0_dim+beta_dim*tile(y[1:-1],(xlen-2,1))*L
         # psidiff=(psi1[1:-1,1:-1]-psi2[1:-1,1:-1])
         # q1_dim=d2psi1+betay_dim-fr1*psidiff/L**2
         # q2_dim=d2psi2+betay_dim+fr2*psidiff/L**2+f0_dim*hbdim[1:-1,1:-1]/h2

     if jsdiff==0:
         # betay_dim=f0_dim+beta_dim*y[1:-1]*L
         # psidiff=squeeze(psi1[1:-1]-psi2[1:-1])
         # q1_dim=tile(d2psi1.T+betay_dim.T-fr1*psidiff.T/L**2,(n-2,1))
         # q2_dim=tile(d2psi2.T+betay_dim.T+fr2*psidiff.T/L**2,(n-2,1))+f0_dim*hbdim[1:-1,1:-1]/h2
         # #calculate non dimensional qs for comparison/just to check
         # q1_nd2=q1_dim*L/U
         # q2_nd2=q2_dim*L/U
         # q1_nd=tile(d2psi1.T*L/U+betay_dim.T/(U/L)-fr1*psidiff.T/(L*U),(n-2,1))
         # q2_nd=tile(d2psi2.T*L/U+betay_dim.T/(U/L)+fr2*psidiff.T/(L*U),(n-2,1))+hb[1:-1,1:-1]
          psidiff=squeeze(psi1[1:-1]-psi2[1:-1])
          q1_nd3=d2psi1+f0_dim*L/U+beta1*y[1:-1]-fr1*psidiff
          q2_nd3=d2psi2+f0_dim*L/U+beta2*y[1:-1]+fr2*psidiff+squeeze(hb[1,1:-1].T)
     if not os.path.exists('../pickles/qbases/'+dirname[:6]):
      os.mkdir('../pickles/qbases/'+dirname[:6])     

     #currently, this is for a very specific purpose, not flexible
     with open('/data/ilebras/twolayer-jets-climate/pickles/qbases/'+dirname+'_qbase','w') as f:
          pickle.dump([d2psi1,d2psi2,psidiff,q1_nd3,q2_nd3],f)

     #qs and hb are always 2d, so use a different name for them
     # slind_spec=slind[0]

     figure(figsize=(20,6))
     subplot(121)
     plot(d2psi1,'r');
     plot(f0_dim*L/U+beta1*y,'b');
     plot(-fr1*psidiff,'g');
     plot(q1_nd3.T,'k');
     xlabel('y position (km)')
     title('Layer 1')
     subplot(122)
     plot(d2psi2,'r');
     plot(f0_dim*L/U+beta2*y,'b');
     plot(fr2*psidiff,'g');
     plot(hb[0,1:-1],'c');
     plot(q2_nd3.T,'k');
     #tick_params(axis='y',labelleft='off')
     xlabel('y position (km)')
     title('Layer 2')
     legend(('vertical relative vorticity','planetary vorticity','horizontal rel vorticity','topographic contribution','total PV'),loc=2)

     savefig('../plots/'+dirname+'/'+dirname[7:]+'_pvinitnd.png')
Exemplo n.º 14
0
[L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))

dirlist=['150612/base','150619/gsmeander1','150619/gsmeander2','150619/gscloser1','150619/gscloser2','150625/m2_noslope','150625/m2_slope1','150625/m2_slope2','150625/m2_slope3','150625/m2_slope4','150629/c1_m1','150629/c1_m2','150629/c2_m1','150629/c2_m2','150612/gsonly','150612/dwbconly']

cvec=['k','m','m','g','g','b','b','b','b','r','c','c','c','c','k','k']
    
mrhines=zeros((2,len(dirlist)))
vqhs=zeros((2,len(dirlist)))
curdist=zeros(len(dirlist))
slopeval=zeros(len(dirlist))
dd=0
for dirname in dirlist:
        print dirname

        from readjet2h import readjet2h
        vardict=readjet2h(dirname)
        locals().update(vardict)

        [psi,q,qfull,u,v,h,hbp,x,y]=pickle.load(open(predir+'pickles/quickfields/'+dirname+'_qfield.p', 'r' ))
        
        [vqh1sum,vqh2sum,xlim,ylow]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/quickfields/'+dirname+'_vqsum.p','r'))

        ybnd1=(ymax-movedw)*m/2/ymax-ylow
        ybnd2=(ymax-movedw)*m/2/ymax-ylow+hw/2

        vqhs[0,dd]=mean(vqh1sum[ybnd1:ybnd2,:])
        vqhs[1,dd]=mean(vqh2sum[ybnd1:ybnd2,:])
    
        pvgrad1=mean(qfull['m1'][xlim:-xlim,-(ymax-movedw)*m/2/ymax]-qfull['m1'][xlim:-xlim,-(ymax-movegs)*m/2/ymax])/(y[-(ymax-movedw)*m/2/ymax]-y[-(ymax-movegs)*m/2/ymax])
        pvgrad2=mean(qfull['m2'][xlim:-xlim,-(ymax-movedw)*m/2/ymax]-qfull['m2'][xlim:-xlim,-(ymax-movegs)*m/2/ymax])/(y[-(ymax-movedw)*m/2/ymax]-y[-(ymax-movegs)*m/2/ymax])
Exemplo n.º 15
0
def pvfluxload(dirname):

      import numpy as np
      import fortranfile
      from pylab import *
      import pickle
      import os
#       ion()
#       %matplotlib inline

      from makefields import getrspo,getinitPsi,gethb

      from operators import delsq,gradx,grady

      from readjet2h import readjet2h
      vardict=readjet2h(dirname)
      locals().update(vardict)

      [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))

      U=beta_dim*L**2/beta1
      gprime=f0_dim**2*L**2/h1/fr1
      h2=f0_dim**2*L**2/gprime/fr2
      f0_nd=f0_dim*L/U

      #define x and y (m)
      x=arange(xmin,xmax,(xmax-xmin)/n)*L
      y=arange(ymin,ymax,(ymax-ymin)/m)*L

      dx=(xmax-xmin)/real(n-1)
      dy=(ymax-ymin)/real(m-1)
      dx2=dx**2
      t4dx=1.0/(8.0*dx)
      t4dy=1.0/(8.0*dy)

      betay_vec=beta1*y/L
      betay=tile(betay_vec,(n,1))

      predir='/data/ilebras/twolayer-jets-climate/'
      rundir=predir+'testing/'+dirname+'/'

      # --------load fields-------

      from loadfuncs import load1

      #mean pv fluxes
      um1=load1('um1.dat',rundir,n,m)
      um2=load1('um2.dat',rundir,n,m)
      vm1=load1('vm1.dat',rundir,n,m)
      vm2=load1('vm2.dat',rundir,n,m)

      zm1=load1('z1m.dat',rundir,n,m)
      zm2=load1('z2m.dat',rundir,n,m)

      qm1=load1('qm1.dat',rundir,n,m)
      qm2=load1('qm2.dat',rundir,n,m)

      pm1=load1('pm1.dat',rundir,n,m)
      pm2=load1('pm2.dat',rundir,n,m)

      hb=gethb(cm,cz,ymax,movedw,hw,hbmax,a2,n,m)

      # qm1=zm1+betay+fr1*(pm2-pm1)#+f0_nd
      qm2_check=zm2+betay+fr2*(pm1-pm2)+hb#+f0_nd
      
#       figure()
#       plot(qm2.T);
#       plot(qm2_check.T);

      # figure()
      # subplot(211)
      # plot(um2.T)
      # subplot(212)
      # plot(vm2.T)

      uqm1=um1*qm1
      uqm2=um2*qm2
      vqm1=vm1*qm1
      vqm2=vm2*qm2

      # #calculate divergence
      # duqm1x=gradx(uqm1,t4dx,n,m)
      # duqm2x=gradx(uqm2,t4dx,n,m)
      # dvqm1y=grady(vqm1,t4dx,n,m)
      # dvqm2y=grady(vqm2,t4dx,n,m)

      # divuq1m=duqm1x+dvqm1y
      # divuq2m=duqm2x+dvqm2y

      #eddy pv fluxes
      uz1=-(load1('uz1.dat',rundir,n,m)+2*um1*zm1)
      uz2=-(load1('uz2.dat',rundir,n,m)+2*um2*zm2)
      vz1=load1('vz1.dat',rundir,n,m)
      vz2=load1('vz2.dat',rundir,n,m)


      #need to correct for a missing minus sign in stats2_pvbud.F
      u1p1=-(load1('u1p1.da',rundir,n,m)+2*um1*pm1)
      u1p2=-(load1('u1p2.da',rundir,n,m)+2*um1*pm2)
      u2p1=-(load1('u2p1.da',rundir,n,m)+2*um2*pm1)
      u2p2=-(load1('u2p2.da',rundir,n,m)+2*um2*pm2)
      v1p1=load1('v1p1.da',rundir,n,m)
      v1p2=load1('v1p2.da',rundir,n,m)
      v2p1=load1('v2p1.da',rundir,n,m)
      v2p2=load1('v2p2.da',rundir,n,m)
      
      uthi1=fr1*(u1p2-u1p1)
      uthi2=fr2*(u2p1-u2p2)
      vthi1=fr1*(v1p2-v1p1)
      vthi2=fr2*(v2p1-v2p2)

      uqb1=uz1+uthi1
      uqb2=uz2+uthi2
      vqb1=vz1+vthi1
      vqb2=vz2+vthi2

      dqy1=grady(qm1,t4dx,n,m)
      dqy2=grady(qm2,t4dx,n,m)

      uz={}
      uz['1']=uz1
      uz['2']=uz2

      vz={}
      vz['1']=vz1
      vz['2']=vz2

      ub={}
      ub['1']=uqb1
      ub['2']=uqb2

      vb={}
      vb['1']=vqb1
      vb['2']=vqb2

      up={}
      up['11']=u1p1
      up['12']=u1p2
      up['21']=u2p1
      up['22']=u2p2

      vp={}
      vp['11']=v1p1
      vp['12']=v1p2
      vp['21']=v2p1
      vp['22']=v2p2

      uqm={}
      uqm['1']=uqm1
      uqm['2']=uqm2

      vqm={}
      vqm['1']=vqm1
      vqm['2']=vqm2

      pickle.dump([uz,vz,ub,vb,up,vp,uqm,vqm,dqy1,dqy2],open(predir+'pickles/pvfluxmv/'+dirname+'_pvflmv.p', 'w'))
Exemplo n.º 16
0
def tracom(finaldir):

    import numpy as np
    import os
    from pylab import *
    import fortranfile
    import pickle
    
    predir='/data/ilebras/twolayer-jets-climate/'

    from readjet2h import readjet2h
    vardict=readjet2h(finaldir)
    locals().update(vardict)

    [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r')) 	

    U=beta_dim*L**2/beta1
    
    x=arange(xmin,xmax,(xmax-xmin)/n)*L
    y=arange(ymin,ymax,(ymax-ymin)/m)*L
    [ymat,xmat]=meshgrid(y,x)

    whichvar='s'
    
    if whichvar=='s':
        secspace=0.1*dt
        tmaxi=ksnap
    elif whichvar=='g':
        secspace=0.01
        tmaxi=ktmax
        

    time=arange(ksec,tmaxi,1/secspace)*L/U/60**2/24/365.25

    tdim=len(time)
    #print tdim

#     xcom1=zeros(tdim)
#     ycom1=zeros(tdim)
#     for iter in range(tdim):
# #load some age tracers
#             pload=fortranfile.FortranFile('../testing/'+finaldir+'/psidat/ag1_'+str(int(iter)).zfill(3))
#             pvec=pload.readReals()
#             age=pvec.reshape(n,m,order='F')
#             xcom1[iter]=sum(age*xmat)/sum(age)
#             ycom1[iter]=sum(age*ymat)/sum(age)

    xcom2=zeros(tdim)
    ycom2=zeros(tdim)
    secmom2=zeros(tdim)
    if whichvar=='s':
        whiage='a2s'
    elif whichvar=='g':
        whiage='ag2'
    tsmall=5   
    for iter in range(tdim):
        #load some age tracers
        pload=fortranfile.FortranFile('../testing/'+finaldir+'/psidat/'+str(whiage)+'_'+str(int(iter)).zfill(3))
        pvec=pload.readReals()
        age=pvec.reshape(n,m,order='F')
        xcom2[iter]=sum(age*xmat)/sum(age)
        ycom2[iter]=sum(age*ymat)/sum(age)
        secmom2[iter]=sum(age*((xmat-xcom2[iter])**2+(ymat-ycom2[iter])**2))/sum(age)


    #PLOT THE CENTER OF MASS
    figure()
    subplot(211)
    #plot(time,xcom1/1e3,'bx')
    plot(time,xcom2/1e3,'rx-')
    ylabel('x position (km)')
    title('Tracer center of mass position')
    subplot(212)
    #plot(time,ycom1/1e3,'bx')
    plot(time,ycom2/1e3,'rx-')
    ylabel('y position (km)')
    xlabel('time (years)')
    #legend(['Layer 1','Layer 2'],loc=2)

    savefig(predir+'plots/'+finaldir+'_tracerCOM'+str(whichvar)+'pos.png')

    #PLOT THE SECOND MOMENT

    figure()
    plot(time[:tsmall],secmom2[:tsmall]/1e6,'gx-')
    title('Tracer second moment')
    xlabel('time (years)')
    ylabel('$(km ^2)$')
    savefig(predir+'plots/'+finaldir+'Tracer_secmom2'+str(whichvar)+'_'+str(tsmall)+'.png')
Exemplo n.º 17
0
def qplotall(dirname):

    import pickle
    from pfunc2d import pfunc2d
    from pfunc2d_zoom import pfunc2d_zoom
    from pylab import *
    ioff()
    
    from readjet2h import readjet2h
    vardict=readjet2h(dirname)
    locals().update(vardict)

    predir='/data/ilebras/twolayer-jets-climate/'

    [psi,q,qfull,u,v,h,hbp,x,y]=pickle.load(open(predir+'pickles/quickfields/'+dirname+'_qfield.p', 'r' ))

    ymid=y[:-1]+diff(y)/2

    [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))

    # figure(figsize=(13,8))
    # contourf(x/1000,y/1000,hbp.T)
    # title('Bottom Topography (in m)')
    # colorbar()

    # savefig(predir+'plots/'+dirname+dirname[6:]+'_hb.png')

    fsizemat=(20,6)

    xlow=250
    xhigh=-250
    ylow=250


#     pfunc2d(u,'u',x,y,dirname,fsizemat,mspo,1)
#     pfunc2d(v,'v',x,y,dirname,fsizemat,mspo,1)


#     pfunc2d_zoom(qfull,'qfull',x,y,dirname,fsizemat,xlow,xhigh,ylow,0)
#     pfunc2d_zoom(psi,'Psi',x,y,dirname,fsizemat,xlow,xhigh,ylow,1)

#     pfunc2d(psi,'Psi',x,y,dirname,fsizemat,mspo,1)
#     pfunc2d(q,'zeta',x,y,dirname,fsizemat,mspo,1)
#     pfunc2d(qfull,'qfull',x,y,dirname,fsizemat,mspo,0)
#     pfunc2d(h,'hinter',x,y,dirname,fsizemat,mspo,0)

    #at center
    mind=2
    tm1=u['m1'][mind,:]*h['m1'][mind,:]*L*(xmax-xmin)/n/1e6
    tm2=u['m2'][mind,:]*h['m2'][mind,:]*L*(xmax-xmin)/n/1e6

    ctm1=cumsum(tm1)
    ctm2=cumsum(tm2)


#     tm1=u['m1']*h['m1']*L*(xmax-xmin)/n/1e6
#     tm2=u['m2']*h['m2']*L*(xmax-xmin)/n/1e6

#     ctm1=cumsum(tm1,axis=1)
#     ctm2=cumsum(tm2,axis=1)

    figure(figsize=fsizemat)

    ax=subplot(221)
    plot(y/1000,tm1.T)
    ylabel('Transport per grid point (Sv)')
    #title('Upper Layer, Total= '+str(around(ctm1[-1],decimals=1))+' Sv')
    ax.set_xticklabels([])
    grid(True)

    ax=subplot(222)
    plot(y/1000,tm2.T)
    #title('Lower Layer, Total= '+str(around(ctm2[-1],decimals=1))+' Sv')
    ax.set_xticklabels([])
    grid(True)

    ax=subplot(223)
    ylabel('Cumulative transport (Sv)')
    plot(y/1000,ctm1.T)
    xlabel('y (1000 km)')
    grid(True)

    ax=subplot(224)
    plot(y/1000,ctm2.T)
    xlabel('y (1000 km)')
    grid(True)

    savefig(predir+'plots/'+dirname+dirname[6:]+'_trans_west.png')
Exemplo n.º 18
0
recircpos={}
pvdelta={}
pvgrad2={}
gstren={}
invwid={}
p1max={}
p2max={}
p1min={}
p2min={}
#dd=0
for dd in dirlist:
        dirname=dd
        print dirname

        from readjet2h import readjet2h
        vardict=readjet2h(thisdir+dirname)
        locals().update(vardict)

        [psi,q,qfull,u,v,h,hbp,x,y]=pickle.load(open(predir+'pickles/quickfields/'+thisdir+dirname+'_qfield.p', 'r' ))
        
        #so far, three options, nothing, which is prerecirc, center and postrecic (notice bad spelling), recircenter is centered around recirc max
        [xqind,xwidth,ecsum_yvar,mcsum_yvar,ecbotyvar,ygs,ydw,p1mx,p2mx,p1mi,p2mi]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/scatter/'+thisdir+dirname+'_fluxes_recircenter.p','r'))

        
        ytopo=int(m-(ymax-movedw-hw/20)*m/2/ymax-hw)
        #ypos=(ydw+ytopo)/2

        recircpos[dd]=xqind
        maxmflux[dd]=mcsum_yvar.max()
        maxeflux[dd]=ecsum_yvar.min()
        maxeflux_vq[dd]=ecbotyvar.min()
Exemplo n.º 19
0
def hov_pv(dirname,iors='s'):

	import numpy as np
	import os
	from pylab import *
	import fortranfile
        import pickle
        import matplotlib.cm as cmapo

        ion()

	predir='/data/ilebras/twolayer-jets-climate/'
	pathint='testing/'+dirname+'/psidat/'	


        if not os.path.exists('../plots/'+dirname+'/qconts'+iors+'mov'):
                #os.mkdir('../plots/'+dirname)
                os.mkdir('../plots/'+dirname+'/qconts'+iors+'mov')

        from readjet2h import readjet2h
        vardict=readjet2h(dirname)
        locals().update(vardict)

        [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))

	x=arange(xmin,xmax,(xmax-xmin)/n)*L
	y=arange(ymin,ymax,(ymax-ymin)/m)*L

        U=beta_dim*L**2/beta1
        betay_vec=beta1*y/L
        betay=tile(betay_vec,(n,1))
        f0_nd=f0_dim*L/U
        ylow=300

        if iors=='s':
                secspace=0.02/dt
                tmaxi=ksnap
        elif iors=='i':
                secspace=0.01
                tmaxi=ktmax

        time=arange(ksec,tmaxi,1/secspace)*L/U/60**2/24/365.25

        tdim=len(time)

        
        hload=fortranfile.FortranFile(predir+pathint[:-7]+'hbt.dat')
        hvec=hload.readReals()
        hb=hvec.reshape(n,m,order='F')
        
	figure()
        yprofs=zeros((m,tdim))
	for iter in range(tdim):
		print iter		
                clf()
                q1load=fortranfile.FortranFile(predir+pathint+'q1'+iors+'_'+str(iter).zfill(3))
		q1vec=q1load.readReals()
		q1=q1vec.reshape(n,m,order='F')
                
                q2load=fortranfile.FortranFile(predir+pathint+'q2'+iors+'_'+str(iter).zfill(3))
		q2vec=q2load.readReals()
		q2=q2vec.reshape(n,m,order='F')

                p1load=fortranfile.FortranFile(predir+pathint+'p1'+iors+'_'+str(iter).zfill(3))
		p1vec=p1load.readReals()
		p1=p1vec.reshape(n,m,order='F')

                p2load=fortranfile.FortranFile(predir+pathint+'p2'+iors+'_'+str(iter).zfill(3))
		p2vec=p2load.readReals()
		p2=p2vec.reshape(n,m,order='F')

                q1full=q1+betay+fr1*(p2-p1)+f0_nd
                q2full=q2+betay+fr2*(p1-p2)+hb+f0_nd

                # plot(q2.T,'r')
                # plot(f0_nd+betay.T,'b')
                # plot(hb.T, 'c')
                # plot(fr2*(p1-p2).T,'g')
                # plot(qfull.T,'m')
                
                ls=arange(9.35,9.45,0.1)
                
                contour(x/1e3,y[ylow:]/1e3,q1full[:,ylow:].T,levels=ls,colors='b')
                #plot slope limits
                plot(x/1e3,ones(n)*y[-(ymax-movedw)*m/2/ymax-hw/2]/1e3,'r')
                plot(x/1e3,ones(n)*y[-(ymax-movedw)*m/2/ymax+hw/2]/1e3,'r')
                #plot dwbc limits
                plot(x/1e3,ones(n)*y[-(ymax-movedw)*m/2/ymax-2/a2*m/2/ymax]/1e3,'g')
                plot(x/1e3,ones(n)*y[-(ymax-movedw)*m/2/ymax+2/a2*m/2/ymax]/1e3,'g')
                plot(x[mspo/2]/1000*ones(m-ylow),y[ylow:]/1000,'k')
                plot(x[-mspo]/1000*ones(m-ylow),y[ylow:]/1000,'k')
                xlabel('x position (km)')
                ylabel('y position (km)')

                savefig(predir+'plots/'+dirname+'/qconts'+iors+'mov/'+str(dirname[7:])+'_q1conts_'+str(int(iter)).zfill(3)+'.png')
Exemplo n.º 20
0
def pvbudload(dirname):

      import numpy as np
      import fortranfile
      from pylab import *
      import pickle
      import os
      #ion()

      from makefields import getrspo,getinitPsi,gethb

      from operators import delsq,gradx,grady

      from readjet2h import readjet2h
      vardict=readjet2h(dirname)
      locals().update(vardict)

      [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))

      U=beta_dim*L**2/beta1
      gprime=f0_dim**2*L**2/h1/fr1
      h2=f0_dim**2*L**2/gprime/fr2
      f0_nd=f0_dim*L/U

      #define x and y (m)
      x=arange(xmin,xmax,(xmax-xmin)/n)*L
      y=arange(ymin,ymax,(ymax-ymin)/m)*L

      dx=(xmax-xmin)/real(n-1)
      dy=(ymax-ymin)/real(m-1)
      dx2=dx**2
      t4dx=1.0/(8.0*dx)
      t4dy=1.0/(8.0*dy)

      betay_vec=beta1*y/L
      betay=tile(betay_vec,(n,1))

      predir='/data/ilebras/twolayer-jets-climate/'
      rundir=predir+'testing/'+dirname+'/'

      # --------load fields-------

      from loadfuncs import load1

      #mean pv fluxes in layer 1
      mf1=load1('mf1.dat',rundir,n,m)
      vm1=load1('vm1.dat',rundir,n,m)
      um1=load1('um1.dat',rundir,n,m)

      mfi=load1('mfi.dat',rundir,n,m)

      #mean pv fluxes in layer 2
      mf2=load1('mf2.dat',rundir,n,m)
      vm2=load1('vm2.dat',rundir,n,m)
      um2=load1('um2.dat',rundir,n,m)

      betav1=beta1*vm1
      mthi1=fr1*mfi
      mpvf1=mf1+betav1+mthi1

      
      # topographic term

      hb=gethb(cm,cz,ymax,movedw,hw,hbmax,a2,n,m)
      hby=grady(hb,t4dy,n,m)

      topo=vm2*hby

      # bottom drag
      mz2=load1('z2m.dat',rundir,n,m)

      bdrag=mz2/rdecayw

      betav2=beta2*vm2
      mthi2=-fr2*mfi
      mpvf2=mf2+betav2+mthi2+topo+bdrag
      

      #eddy pv fluxes in layer 1
      ef1=load1('ef1.dat',rundir,n,m)
      efi=load1('efi.dat',rundir,n,m)

      #eddy pv fluxes in layer 2
      ef2=load1('ef2.dat',rundir,n,m)

      ef2[abs(ef2)>10**13]=0.0
      ef2[isnan(ef2)]=0.0

      ethi1=fr1*efi
      epvf1=ef1+ethi1

      ethi2=-fr2*efi
      epvf2=ef2+ethi2

      #viscosity and sponge drag
      mz1=load1('z1m.dat',rundir,n,m)
      
      visc1=-akap*delsq(mz1,dx2,n,m)
      visc2=-akap*delsq(mz2,dx2,n,m)

      #sponge drag

      rspo=getrspo(nspo,mspo,rdecay,rdecayo,n,m,dt)

      [p1init,p2init]=getinitPsi(m,n,y/L,gs1,g1,dw1,d1,as2,a2,movegs,movedw,nspo,mspo)
      
      z1init=delsq(p1init,dx2,n,m)
      z2init=delsq(p2init,dx2,n,m)
      p1xinit=gradx(p1init,t4dx,n,m)
      p1yinit=grady(p1init,t4dy,n,m)
      p2xinit=gradx(p2init,t4dx,n,m)
      p2yinit=grady(p2init,t4dy,n,m)

      rspox=gradx(rspo,t4dx,n,m)
      rspoy=grady(rspo,t4dy,n,m)

      sponge1_del=rspo*(mz1-z1init)
      sponge1_cross=rspox*(vm1-p1xinit)-rspoy*(um1+p1yinit)
      sponge1=sponge1_del+sponge1_cross


      sponge2_del=rspo*(mz2-z2init)
      sponge2_cross=rspox*(vm2-p2xinit)-rspoy*(um2+p2yinit)
      sponge2=sponge2_del+sponge2_cross

      resid1=mpvf1+epvf1+visc1+sponge1

      resid2=mpvf2+epvf2+visc2+sponge2

      #return p1init,p2init,z1init,z2init,p1xinit,p1yinit,p2xinit,p2yinit,hb,hby

      pickle.dump([mf1,betav1,mthi1,mpvf1,ef1,ethi1,epvf1,visc1,sponge1,resid1,mf2,betav2,mthi2,mpvf2,ef2,ethi2,epvf2,visc2,sponge2,topo,bdrag,resid2,hb,hby], open( predir+'pickles/pvbud/'+dirname+'_pvbud' , 'w'))
Exemplo n.º 21
0
def getnd(dirname,iors='s'):

	import numpy as np
	import os
	from pylab import *
	import fortranfile
        import pickle
        import matplotlib.cm as cmapo
        from operators import gradx

        ion()

	predir='/data/ilebras/twolayer-jets-climate/'
	pathint='testing/'+dirname+'/psidat/'	

        print dirname

        if not os.path.exists('../plots/'+dirname+'/qconts'+iors+'mov'):
                #os.mkdir('../plots/'+dirname)
                os.mkdir('../plots/'+dirname+'/qconts'+iors+'mov')

        from readjet2h import readjet2h
        vardict=readjet2h(dirname)
        locals().update(vardict)

        [L,beta_dim,f0_dim,h1mag]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))
        gprime=f0_dim**2*L**2/h1mag/fr1
        h2mag=f0_dim**2*L**2/gprime/fr2
        
        [psi,q,qfull,u,v,h,hbp,x,y]=pickle.load(open(predir+'pickles/quickfields/'+dirname+'_qfield.p', 'r' ))

	x=arange(xmin,xmax,(xmax-xmin)/n)*L
	y=arange(ymin,ymax,(ymax-ymin)/m)*L

        U=beta_dim*L**2/beta1
        betay_vec=beta1*y/L
        betay=tile(betay_vec,(n,1))
        f0_nd=f0_dim*L/U
        ylow=250
        xlim=400
        yslope1=-(ymax-movedw)*m/2/ymax-hw/2
        yslope2=-(ymax-movedw)*m/2/ymax+hw/2
        ybnd=yslope1

	hb=hbp*f0_dim*L/h2mag/U

        #get min/max of PV on slope
        q2aslope=qfull['m2'][xlim:-xlim,yslope1:yslope2]
        q2smin=q2aslope.min()
        q2smax=q2aslope.max()

        # figure()
        # contourf(x[xlim:-xlim]/1e3,y[yslope1:yslope2]/1e3,q2aslope.T)
        
        if iors=='s':
                secspace=0.02/dt
                tmaxi=ksnap
        elif iors=='i':
                secspace=0.01
                tmaxi=ktmax

        time=arange(ksec,tmaxi,1/secspace)*L/U/60**2/24/365.25

        tdim=len(time)
        
        vq1sum=zeros((m-ylow,tdim))
        vq2sum=zeros((m-ylow,tdim))
        have=zeros((2,tdim))
	for iter in range(1):#tdim
		print iter		
                clf()
                q1load=fortranfile.FortranFile(predir+pathint+'q1'+iors+'_'+str(iter).zfill(3))
		q1vec=q1load.readReals()
		q1=q1vec.reshape(n,m,order='F')
                
                q2load=fortranfile.FortranFile(predir+pathint+'q2'+iors+'_'+str(iter).zfill(3))
		q2vec=q2load.readReals()
		q2=q2vec.reshape(n,m,order='F')

                p1load=fortranfile.FortranFile(predir+pathint+'p1'+iors+'_'+str(iter).zfill(3))
		p1vec=p1load.readReals()
		p1=p1vec.reshape(n,m,order='F')

                p2load=fortranfile.FortranFile(predir+pathint+'p2'+iors+'_'+str(iter).zfill(3))
		p2vec=p2load.readReals()
		p2=p2vec.reshape(n,m,order='F')

                q1full=q1+betay+fr1*(p2-p1)+f0_nd
                q2full=q2+betay+fr2*(p1-p2)+hb+f0_nd

                #get v
                dx=(xmax-xmin)/real(n-1)
                t4dx=1.0/(8.0*dx)

                v1=gradx(p1,t4dx,n,m)
                v1mid=v1[xlim:-xlim,ylow:]

                v2=gradx(p2,t4dx,n,m)
                v2mid=v2[xlim:-xlim,ylow:]

                #interpolate q to v coords
                q1mid=q1full[xlim:-xlim,ylow:]
                q2mid=q2full[xlim:-xlim,ylow:]

                #hm=f0_dim/gprime*(p2-p1)*U*L

                figure()
                subplot(211)
                plot(v2mid.T)
                subplot(212)
                plot(q2mid.T)

                vq1=v1mid*q1mid
                vq2=v2mid*q2mid

                # figure()
                # plot(vq2)
                
                vq1sum[:,iter]=sum(vq1,axis=0)
                vq2sum[:,iter]=sum(vq2,axis=0)
        
        # figure(figsize=(18,6))
        # subplot(121)
        # plot(time,have[0,:])
        # xlabel('time (years)')
        # ylabel('mean h on bound')
        # subplot(122)
        # plot(time,have[1,:])
        # xlabel('time (years)')
                
        # figure(figsize=(18,6))
        # subplot(121)
        # plot(time,vq1sum[-ybnd-ylow,:])
        # xlabel('time (years)')
        # ylabel('PV Flux')
        # subplot(122)
        # plot(time,vq2sum[-ybnd-ylow,:])
        # xlabel('time (years)')

        # savefig(predir+'plots/'+dirname+dirname[6:]+'_vqsum_noabsorh.png')

        pickle.dump([vq1sum,vq2sum,xlim,ylow], open(predir+'pickles/quickfields/'+dirname+'_vqsumcorr.p', 'w' ) )
Exemplo n.º 22
0
def inicheck(dirname):

     import numpy as np
     import os
     from pylab import *
     import fortranfile
     from math import erf
     import pickle
     ion()

     from readjet2h import readjet2h
     vardict=readjet2h(dirname)
     locals().update(vardict)

     [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))

     print L, beta_dim,f0_dim, h1

     U=beta_dim*L**2/beta1
     gprime=f0_dim**2*L**2/h1/fr1
     h2=f0_dim**2*L**2/gprime/fr2


     #are jsi and jso different? jsdiff=0 if they are not, 1 if they are.
     # jsdiff=1

     x=linspace(xmin,xmax,n)
     y=linspace(ymin,ymax,m)

     from makefields import getinitPsi,gethb,gettracer


     [PSI1,PSI2]=getinitPsi(m,n,y,gs1,g1,dw1,d1,as2,a2,movegs,movedw,nspo,mspo)

     hb=gethb(cm,cz,ymax,movedw,hw,hbmax,a2,n,m)

     ag=gettracer(ndye,athick,ymax,movedw,a2,n,m)

     ymi=3*m/4
     xmi=0
     xma=10

     figure()
     plot(y[ymi:],(PSI2[0,ymi:]/PSI2.max()+1)/2,'bx-',label='Psi')
     plot(y[ymi:],hb[0,ymi:]/hbmax,'rx-',label='H')
     #plot(y[ymi:],ag[:,ymi:].T,'g')
     #plot(y[ymi:],ag[0,ymi:],'g',label='tracer')
     xlabel('y position')
     legend()
     title('Normalized $\psi$ and topography')
     grid('on')
     
     savefig('../plots/'+dirname+'/'+dirname[7:]+'_initopopsi.png')

     #get a grasp on the transport
     from operators import grady

     dy=(ymax-ymin)/real(m-1)
     t4dy=1.0/(8.0*dy)

     u1=grady(PSI1,t4dy,n,m)
     u2=grady(PSI2,t4dy,n,m)

     u1=-u1*U
     u2=-u2*U


     ymi=0
     mind=1

     figure()
     plot(y[ymi:],u1[mind,ymi:],'b',label='Layer 1')
     plot(y[ymi:],u2[mind,ymi:],'r',label='Layer 2')
     xlabel('y position')
     #legend()
     title('velocity')
     grid('on')

     savefig('../plots/'+dirname+'/'+dirname[7:]+'_inivel.png')


     #layer interface height
     hm=f0_dim/gprime*(PSI2-PSI1)*U*L

     hbp=hb*h2*U/f0_dim/L

     hm1=h1-hm
     hm2=h2+hm-hbp
     

     tm1=u1[mind,:]*hm1[mind,:]*L*(xmax-xmin)/n/1e6
     tm2=u2[mind,:]*hm2[mind,:]*L*(xmax-xmin)/n/1e6

     ctm1=cumsum(tm1)
     ctm2=cumsum(tm2)

     figure()

     ax=subplot(221)
     plot(y/1000,tm1)
     ylabel('Transport per grid point (Sv)')
     title('Upper Layer, Total= '+str(around(ctm1[-1],decimals=1))+' Sv')
     ax.set_xticklabels([])
     grid(True)
 
     ax=subplot(222)
     plot(y/1000,tm2)
     title('Lower Layer, Total= '+str(around(ctm2[-1],decimals=1))+' Sv')
     ax.set_xticklabels([])
     grid(True)

     ax=subplot(223)
     ylabel('Cumulative transport (Sv)')
     plot(y/1000,ctm1)
     xlabel('y (1000 km)')
     grid(True)

     ax=subplot(224)
     plot(y/1000,ctm2)
     xlabel('y (1000 km)')
     grid(True)
     savefig('../plots/'+dirname+'/'+dirname[7:]+'_initrans.png')
     
     
     figure()
     plot(y[ymi:],u2[mind,ymi:]/u2[mind,ymi:].min(),'r',label='velocity')
     plot(y[ymi:],hm2[mind,ymi:]/hm2[mind,ymi:].max(),'b',label='layer thickness')
     plot(y[ymi:],tm2[ymi:]/tm2[ymi:].min(),'m',label='transport')
     xlabel('y position')
     #legend()
     #title('velocity')
     grid('on')

     savefig('../plots/'+dirname+'/'+dirname[7:]+'_inicomp.png')
Exemplo n.º 23
0
def pvbudplot(dirname):

      import numpy as np
      import fortranfile
      from pylab import *
      import pickle
      import os
      ioff()
      rcParams['image.cmap'] = 'RdBu'

      from readjet2h import readjet2h
      vardict=readjet2h(dirname)
      locals().update(vardict)

      [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))

      U=beta_dim*L**2/beta1
      gprime=f0_dim**2*L**2/h1/fr1
      h2=f0_dim**2*L**2/gprime/fr2
      f0_nd=f0_dim*L/U

      #define x and y (m)
      x=arange(xmin,xmax,(xmax-xmin)/n)*L
      y=arange(ymin,ymax,(ymax-ymin)/m)*L

      # dx=(xmax-xmin)/real(n-1)
      # dy=(ymax-ymin)/real(m-1)
      # dx2=dx**2
      # t4dx=1.0/(8.0*dx)
      # t4dy=1.0/(8.0*dy)

      # betay_vec=beta1*y/L
      # betay=tile(betay_vec,(n,1))

      predir='/data/ilebras/twolayer-jets-climate/'
      rundir=predir+'testing/'+dirname+'/'

      #load fields

      [mf1,betav1,mthi1,mpvf1,ef1,ethi1,epvf1,visc1,sponge1,resid1,mf2,betav2,mthi2,mpvf2,ef2,ethi2,epvf2,visc2,sponge2,topo,bdrag,resid2,hb,hby]=pickle.load(open( predir+'pickles/pvbud/'+dirname+'_pvbud' , 'r'))

      # --------plot them-----------

      fsizemat=(20,6)
      fsizemat2=(20,9)

      figure()
      subplot(211)
      contourf(x,y,hb.T)
      colorbar()
      subplot(212)
      contourf(x,y,hby.T)
      colorbar()

      # figure()
      # plot(y/1e3,topo[mspo/2:-mspo,:].T,'r')

      # figure()
      # plot(y/1e3,topo[:mspo/2,:].T,'k')
      # plot(y/1e3,topo[-mspo:,:].T,'k')
      # plot(y/1e3,topo[mspo/2:-mspo,:].T,'r')
      
      # figure(figsize=fsizemat)
      # subplot(221)
      # plot(y/1e3,mean(topo[:mspo/2,:].T,axis=1),'g')
      # plot(y/1e3,mean(topo[-mspo:,:].T,axis=1),'r')
      # plot(y/1e3,topo[mspo/2:-mspo,:].T,'b')
      # plot(y/1e3,mean(topo[mspo/2:-mspo,:].T,axis=1),'k',linewidth=3)
      # ylim([-0.002,0.002])
      # title('topographic term')
      # subplot(222)
      # plot(y/1e3,mean(epvf2[:mspo/2,:].T,axis=1),'g',label='mean west sponge')
      # plot(y/1e3,mean(epvf2[-mspo:,:].T,axis=1),'r',label='mean east sponge')
      # plot(y/1e3,epvf2[mspo/2:-mspo,:].T,'b')
      # plot(y/1e3,epvf2[mspo/2,:].T,'b',label='all interior')
      # plot(y/1e3,mean(epvf2[mspo/2:-mspo,:].T,axis=1),'k',linewidth=3,label='mean interior')
      # ylim([-0.002,0.002])
      # legend(loc=(1.05,-0.5))
      # title('eddy pv flux divergence')
      # subplot(223)
      # plot(y/1e3,mean(visc2[:mspo/2,:].T,axis=1),'g')
      # plot(y/1e3,mean(visc2[-mspo:,:].T,axis=1),'r')
      # plot(y/1e3,visc2[mspo/2:-mspo,:].T,'b')
      # plot(y/1e3,mean(visc2[mspo/2:-mspo,:].T,axis=1),'k',linewidth=3)
      # title('viscosity')
      # xlabel('y distance (km)')
      # ylim([-0.002,0.002])
      # subplot(224)
      # plot(y/1e3,mean(resid2[:mspo/2,:].T,axis=1),'g')
      # plot(y/1e3,mean(resid2[-mspo:,:].T,axis=1),'r')
      # plot(y/1e3,resid2[mspo/2:-mspo,:].T,'b')
      # plot(y/1e3,mean(resid2[mspo/2:-mspo,:].T,axis=1),'k',linewidth=3)
      # title('residual')
      # xlabel('y distance (km)')
      # suptitle('Layer 2 ')
      # ylim([-0.002,0.002])

      # savefig(predir+'plots/'+dirname+dirname[6:]+'_toposlice.png',bbox_inches='tight')

      #import matplotlib.cm as cm


      from pfunc2d import pfunc2d_4in,pfunc2d_6in 

      ############# LAYER 1 ##############################

 #      # ##### mean fluxes

#       pfunc2d_4in(mf1,betav1,mthi1,mpvf1,'pvf1_m',x,y,dirname,fsizemat,mspo,1,optit1='Mean relative vorticity flux divergence',optit2='Mean planetary vorticity flux divergence',optit3='Mean thickness flux divergence',optit4='Total mean PV flux divergence',optyt1='position (km)',optyt2='position (km)',suptit='Layer 1')

#       # # ##### eddy fluxes

#       pfunc2d_4in(ef1,zeros((n,m)),ethi1,epvf1,'pvf1_e',x,y,dirname,fsizemat,mspo,1,optit1='Eddy relative vorticity flux divergence',optit2='No eddy planetary vorticity flux divergence',optit3='Eddy thickness flux divergence',optit4='Total eddy PV flux divergence',optyt1='position (km)',optyt2='position (km)',suptit='Layer 1')

#       # ##### all fluxes 

#       pfunc2d_6in(mpvf1,epvf1,mpvf1+epvf1,visc1,sponge1,resid1,'pvf1_tot',x,y,dirname,fsizemat2,mspo,1,optit1='Mean PV flux',optit2='Eddy PV flux',optit3='Mean plus eddy',optit4='Viscosity',optit5='Sponge drag',optit6='Residual',suptit='Layer 1')

#       # ############# LAYER 2 ##############################

#       # ##### mean fluxes

#       pfunc2d_6in(mf2,betav2,mthi2,topo,bdrag,mpvf2,'pvf2_m',x,y,dirname,fsizemat,mspo,1,optit1='Mean relative vorticity flux divergence',optit2='Mean planetary vorticity flux divergence',optit3='Mean thickness flux divergence',optit6='Total mean PV flux divergence',optit4='Topographic term',optit5='Bottom Drag',optyt1='position (km)',optyt2='position (km)',suptit='Layer 2')

#       ##### eddy fluxes

#       pfunc2d_4in(ef2,zeros((n,m)),ethi2,epvf2,'pvf2_e',x,y,dirname,fsizemat,mspo,1,optit1='Eddy relative vorticity flux divergence',optit2='No eddy planetary vorticity flux divergence',optit3='Eddy thickness flux divergence',optit4='Total eddy PV flux divergence',optyt1='position (km)',optyt2='position (km)',suptit='Layer 2')

#       ##### all fluxes 

#       pfunc2d_6in(mpvf2,epvf2,visc2,sponge2,bdrag,resid2,'pvf2_tot',x,y,dirname,fsizemat2,mspo,1,optit1='Mean PV flux divergence',optit2='Eddy PV flux divergence',optit3='Viscosity',optit4='Sponge drag',optit5='Bottom Drag',optit6='Residual',suptit='Layer 2')


# ######################################################################################
# ######################################################################################
# ######################################################################################
# ############################### PLOTTING SPONGE AND INTERIOR #########################
# ######################################################################################
# ######################################################################################
# ######################################################################################
# #######################SEPARATELY!! ##################################################
# ######################################################################################
# ######################################################################################
# ######################################################################################
# ######################################################################################


###FIRST PLOT ALL WITH SPONGE DICTATING THE COLORBAR


      spo=1

      ############# LAYER 1 ##############################

      # ##### mean fluxes


      pfunc2d_4in(mf1,betav1,mthi1,mpvf1,'pvf1_m_spo',x,y,dirname,fsizemat,spo,1,optit1='Mean relative vorticity flux divergence',optit2='Mean planetary vorticity flux divergence',optit3='Mean thickness flux divergence',optit4='Total mean PV flux divergence',optyt1='position (km)',optyt2='position (km)',suptit='Layer 1')

      # # ##### eddy fluxes

      pfunc2d_4in(ef1,zeros((n,m)),ethi1,epvf1,'pvf1_e_spo',x,y,dirname,fsizemat,spo,1,optit1='Eddy relative vorticity flux divergence',optit2='No eddy planetary vorticity flux divergence',optit3='Eddy thickness flux divergence',optit4='Total eddy PV flux divergence',optyt1='position (km)',optyt2='position (km)',suptit='Layer 1')

      # ##### all fluxes 

      pfunc2d_6in(mpvf1,epvf1,mpvf1+epvf1,visc1,sponge1,resid1,'pvf1_tot_spo',x,y,dirname,fsizemat2,spo,1,optit1='Mean PV flux divergence',optit2='Eddy PV flux divergence',optit3='Mean plus eddy',optit4='Viscosity',optit5='Sponge drag',optit6='Residual',suptit='Layer 1')

      # ############# LAYER 2 ##############################

      # ##### mean fluxes
      
      pfunc2d_6in(mf2,betav2,mthi2,topo,bdrag,mpvf2,'pvf2_m_spo',x,y,dirname,fsizemat,spo,1,optit1='Mean relative vorticity flux divergence',optit2='Mean planetary vorticity flux divergence',optit3='Mean thickness flux divergence',optit6='Total mean PV flux divergence',optit4='Topographic term',optit5='Bottom Drag',optyt1='position (km)',optyt2='position (km)',suptit='Layer 2')

      ##### eddy fluxes

      pfunc2d_4in(ef2,zeros((n,m)),ethi2,epvf2,'pvf2_e_spo',x,y,dirname,fsizemat,spo,1,optit1='Eddy relative vorticity flux divergence',optit2='No eddy planetary vorticity flux divergence',optit3='Eddy thickness flux divergence',optit4='Total eddy PV flux divergence',optyt1='position (km)',optyt2='position (km)',suptit='Layer 2')

      ##### all fluxes 

      pfunc2d_6in(mpvf2,epvf2,visc2,sponge2,bdrag,resid2,'pvf2_tot_spo',x,y,dirname,fsizemat2,spo,1,optit1='Mean PV flux divergence',optit2='Eddy PV flux divergence',optit3='Viscosity',optit4='Sponge drag',optit5='Bottom Drag',optit6='Residual',suptit='Layer 2')

##############################
### NOW PLOT ONLY THE INTERIOR
##############################

############# LAYER 1 ##############################

      # ##### mean fluxes

      pfunc2d_4in(mf1[mspo/2:-mspo,mspo:],betav1[mspo/2:-mspo,mspo:],mthi1[mspo/2:-mspo,mspo:],mpvf1[mspo/2:-mspo,mspo:],'pvf1_m_nospo',x[mspo/2:-mspo],y[mspo:],dirname,fsizemat,spo,1,optit1='Mean relative vorticity flux divergence',optit2='Mean planetary vorticity flux divergence',optit3='Mean thickness flux divergence',optit4='Total mean PV flux divergence',optyt1='position (km)',optyt2='position (km)',suptit='Layer 1')

      # # ##### eddy fluxes

      pfunc2d_4in(ef1[mspo/2:-mspo,mspo:],zeros((n,m))[mspo/2:-mspo,mspo:],ethi1[mspo/2:-mspo,mspo:],epvf1[mspo/2:-mspo,mspo:],'pvf1_e_nospo',x[mspo/2:-mspo],y[mspo:],dirname,fsizemat,spo,1,optit1='Eddy relative vorticity flux divergence',optit2='No eddy planetary vorticity flux divergence',optit3='Eddy thickness flux divergence',optit4='Total eddy PV flux divergence',optyt1='position (km)',optyt2='position (km)',suptit='Layer 1')

      # ##### all fluxes 

      pfunc2d_6in(mpvf1[mspo/2:-mspo,mspo:],epvf1[mspo/2:-mspo,mspo:],mpvf1[mspo/2:-mspo,mspo:]+epvf1[mspo/2:-mspo,mspo:],visc1[mspo/2:-mspo,mspo:],sponge1[mspo/2:-mspo,mspo:],resid1[mspo/2:-mspo,mspo:],'pvf1_tot_nospo',x[mspo/2:-mspo],y[mspo:],dirname,fsizemat2,spo,1,optit1='Mean PV flux divergence',optit2='Eddy PV flux divergence',optit3='Mean plus eddy',optit4='Viscosity',optit5='Sponge drag',optit6='Residual',suptit='Layer 1')

      # ############# LAYER 2 ##############################

      # ##### mean fluxes
      
      pfunc2d_6in(mf2[mspo/2:-mspo,mspo:],betav2[mspo/2:-mspo,mspo:],mthi2[mspo/2:-mspo,mspo:],topo[mspo/2:-mspo,mspo:],bdrag[mspo/2:-mspo,mspo:],mpvf2[mspo/2:-mspo,mspo:],'pvf2_m_nospo',x[mspo/2:-mspo],y[mspo:],dirname,fsizemat,spo,1,optit1='Mean relative vorticity flux divergence',optit2='Mean planetary vorticity flux divergence',optit3='Mean thickness flux divergence',optit6='Total mean PV flux divergence',optit4='Topographic term',optit5='Bottom Drag',optyt1='position (km)',optyt2='position (km)',suptit='Layer 2')

      ##### eddy fluxes

      pfunc2d_4in(ef2[mspo/2:-mspo,mspo:],zeros((n,m))[mspo/2:-mspo,mspo:],ethi2[mspo/2:-mspo,mspo:],epvf2[mspo/2:-mspo,mspo:],'pvf2_e_nospo',x[mspo/2:-mspo],y[mspo:],dirname,fsizemat,spo,1,optit1='Eddy relative vorticity flux divergence',optit2='No eddy planetary vorticity flux divergence',optit3='Eddy thickness flux divergence',optit4='Total eddy PV flux divergence',optyt1='position (km)',optyt2='position (km)',suptit='Layer 2')

      ##### all fluxes 

      pfunc2d_6in(mpvf2[mspo/2:-mspo,mspo:],epvf2[mspo/2:-mspo,mspo:],visc2[mspo/2:-mspo,mspo:],sponge2[mspo/2:-mspo,mspo:],bdrag[mspo/2:-mspo,mspo:],resid2[mspo/2:-mspo,mspo:],'pvf2_tot_nospo',x[mspo/2:-mspo],y[mspo:],dirname,fsizemat2,spo,1,optit1='Mean PV flux divergence',optit2='Eddy PV flux divergence',optit3='Viscosity',optit4='Sponge drag',optit5='Bottom Drag',optit6='Residual',suptit='Layer 2')
import numpy as np
import os
from pylab import *
import fortranfile
import pickle
ion()


figure()

for dd in dirlist:
    finaldir=rundir+dd

    from readjet2h import readjet2h
    vardict=readjet2h(finaldir)
    locals().update(vardict)

    [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r')) 	

    U=beta_dim*L**2/beta1
    f0_nd=f0_dim*L/U
    
    x=arange(xmin,xmax,(xmax-xmin)/n)*L
    y=arange(ymin,ymax,(ymax-ymin)/m)*L
    [ymat,xmat]=meshgrid(y,x)

    betay_vec=beta1*y/L
    betay=tile(betay_vec,(n,1))

    pload=fortranfile.FortranFile('../testing/'+finaldir+'/hbt.dat')
def qls(dirname):

      import numpy as np
      import fortranfile
      from pylab import *
      import pickle
      import os

      from readjet2h import readjet2h
      vardict=readjet2h(dirname)
      locals().update(vardict)

      [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))

      U=beta_dim*L**2/beta1
      gprime=f0_dim**2*L**2/h1/fr1
      h2=f0_dim**2*L**2/gprime/fr2
      f0_nd=f0_dim*L/U

      #define x and y (m)
      x=arange(xmin,xmax,(xmax-xmin)/n)*L
      y=arange(ymin,ymax,(ymax-ymin)/m)*L

      betay_vec=beta1*y/L
      betay=tile(betay_vec,(n,1))

      predir='/data/ilebras/twolayer-jets-climate/'
      rundir=predir+'testing/'+dirname+'/'

#--------move on to load psi--------------
      psi={}

      pload=fortranfile.FortranFile(rundir+'pm1.dat')
      pvec=pload.readReals()

      pm1=pvec.reshape(n,m,order='F')
      psi['m1']=pm1*U*L

      pload=fortranfile.FortranFile(rundir+'pm2.dat')
      pvec=pload.readReals()

      pm2=pvec.reshape(n,m,order='F')
      psi['m2']=pm2*U*L

      # pload=fortranfile.FortranFile(rundir+'psidat/p1i_000')
      # pvec=pload.readReals()

      # p1i=pvec.reshape(n,m,order='F')
      # psi['i1']=p1i*U*L

      # pload=fortranfile.FortranFile(rundir+'psidat/p2i_000')
      # pvec=pload.readReals()

      # p2i=pvec.reshape(n,m,order='F')
      # psi['i2']=p2i*U*L

# #--------and then load q (zeta)--------------
      q={}

      pload=fortranfile.FortranFile(rundir+'z1m.dat')
      pvec=pload.readReals()

      qm1=pvec.reshape(n,m,order='F')
      q['m1']=qm1*U/L

      pload=fortranfile.FortranFile(rundir+'z2m.dat')
      pvec=pload.readReals()

      qm2=pvec.reshape(n,m,order='F')
      q['m2']=qm2*U/L

      # pload=fortranfile.FortranFile(rundir+'psidat/q1i_000')
      # pvec=pload.readReals()

      # q1i=pvec.reshape(n,m,order='F')
      # q['i1']=q1i*U/L

      # pload=fortranfile.FortranFile(rundir+'psidat/q2i_000')
      # pvec=pload.readReals()

      # q2i=pvec.reshape(n,m,order='F')
      # q['i2']=q2i*U/L

      #--------if there is bottom topography, plot it-----

      from makefields import gethb

      hb=gethb(cm,cz,ymax,movedw,hw,hbmax,a2,n,m)

      hbp=hb*h2*U/f0_dim/L


#--------and then plot qfull= q +fr(psi-psi, depending) + betay + hb--------
      qfull={}

      qfull['m1']=q['m1']*L/U+betay+fr1*(psi['m2']-psi['m1'])/(U*L)#+f0_nd

      qfull['m2']=q['m2']*L/U+betay+fr2*(psi['m1']-psi['m2'])/(U*L)+hb#+f0_nd

      # qfull['i1']=q['i1']*L/U+betay+fr1*(psi['i2']-psi['i1'])/(U*L)#+f0_nd

      # qfull['i2']=q['i2']*L/U+betay+fr2*(psi['i1']-psi['i2'])/(U*L)+hb#+f0_nd

#--------calculate a few more things leading up to transport--------
      u={}
      v={}

      from operators import gradx, grady
      
      dx=(xmax-xmin)/real(n-1)
      dy=(ymax-ymin)/real(m-1)
      dx2=dx**2
      t4dx=1.0/(8.0*dx)
      t4dy=1.0/(8.0*dy)

      # u['m1']=-diff(psi['m1'],n=1,axis=1)/diff(y,n=1)
      # u['m2']=-diff(psi['m2'],n=1,axis=1)/diff(y,n=1)

      # u['i1']=-diff(psi['i1'],n=1,axis=1)/diff(y,n=1)
      # u['i2']=-diff(psi['i2'],n=1,axis=1)/diff(y,n=1)

      # v['m1']=(diff(psi['m1'],n=1,axis=0).T/diff(x,n=1)).T
      # v['m2']=(diff(psi['m2'],n=1,axis=0).T/diff(x,n=1)).T

      # v['i1']=(diff(psi['i1'],n=1,axis=0).T/diff(x,n=1)).T
      # v['i2']=(diff(psi['i2'],n=1,axis=0).T/diff(x,n=1)).T


      u['m1']=-grady(psi['m1']/(U*L),t4dy,n,m)*U
      u['m2']=-grady(psi['m2']/(U*L),t4dy,n,m)*U

      # u['i1']=-grady(psi['i1']/(U*L),t4dy,n,m)*U
      # u['i2']=-grady(psi['i2']/(U*L),t4dy,n,m)*U

      v['m1']=gradx(psi['m1']/(U*L),t4dx,n,m)*U
      v['m2']=gradx(psi['m2']/(U*L),t4dx,n,m)*U

      # v['i1']=gradx(psi['i1']/(U*L),t4dx,n,m)*U
      # v['i2']=gradx(psi['i2']/(U*L),t4dx,n,m)*U
      #note that u,v is nondimensional here. 

      #calculate layer depth fluctuations from psi

      hm=f0_dim/gprime*(psi['m2']-psi['m1'])
      #hi=f0_dim/gprime*(psi['i2']-psi['i1'])
      
      h={}

      h['m1']=h1-hm
      h['m2']=h2+hm-hbp
      # h['i1']=h1-hi
      # h['i2']=h2+hi-hbp

      if not os.path.exists(predir+'pickles/quickfields/'+dirname[:6]):
            os.mkdir(predir+'pickles/quickfields/'+dirname[:6])

      pickle.dump([psi,q,qfull,u,v,h,hbp,x,y], open(predir+'pickles/quickfields/'+dirname+'_qfield.p', 'w' ) )
Exemplo n.º 26
0
def pvcomp(dirname):

    from pylab import *
    import pickle
    from pfunc2d import pfunc2d
    from pfunc2d_zoom import pfunc2d_zoom
    ioff()

    plt.rcParams['image.cmap'] = 'RdYlBu'

    from readjet2h import readjet2h
    vardict=readjet2h(dirname)
    locals().update(vardict)

    predir='/data/ilebras/twolayer-jets-climate/'

    [psi,q,qfull,u,v,h,hbp,x,y]=pickle.load(open(predir+'pickles/quickfields/'+dirname+'_qfield.p', 'r' ))

    [L,beta_dim,f0_dim,h1]=pickle.load(open('/data/ilebras/twolayer-jets-climate/pickles/dimize.p','r'))

    U=beta_dim*L**2/beta1
    gprime=f0_dim**2*L**2/h1/fr1
    h2=f0_dim**2*L**2/gprime/fr2
    f0_nd=f0_dim*L/U
    hb=hbp/h2/U*f0_dim*L

    betay_vec=beta1*y/L
    betay=tile(betay_vec,(n,1))

    ymid=arange(1,m-1)
    ymspo=arange(1,m-mspo-1)

    # with open('/data/ilebras/twolayer-jets-climate/pickles/qbases/'+dirname+'_qbase','r') as f:
    #         [d2psi1,d2psi2,psidiff,q1_base,q2_base]=pickle.load(f)

    # qfull_anom={}
      
    # qfull_anom['m1']=qfull['m1'][1:-1,1:-1]-q1_base
    # qfull_anom['m2']=qfull['m2'][1:-1,1:-1]-q2_base
    # qfull_anom['i1']=qfull['i1'][1:-1,1:-1]-q1_base
    # qfull_anom['i2']=qfull['i2'][1:-1,1:-1]-q2_base

    fsizemat=(20,6)

    # pfunc2d(qfull_anom,'qfull_anom',x[1:-1],y[1:-1],dirname,fsizemat,mspo,1)

    # xlow=250
    # xhigh=-250
    # ylow=250

    # pfunc2d_zoom(qfull_anom,'qfull_anom',x[1:-1],y[1:-1],dirname,fsizemat,xlow,xhigh,ylow,1)

    # #examine the effect of topography on relative vorticity
    # figure(figsize=(20,6))
    # subplot(121)
    # plot(q['m1'][mspo/2:-mspo,mspo:].T*L/U,'r')
    # plot(ymspo,d2psi1[mspo:],'k',lw=2)
    # plot(fr1*(psi['m2'][mspo/2:-mspo,mspo:].T-psi['m1'][mspo/2:-mspo,mspo:].T)/(U*L),'g')
    # plot(ymspo,-fr1*psidiff[mspo:],'k',lw=2)
    # plot(hb[mspo/2:-mspo,mspo:].T/hbmax,'k')
    # subplot(122)
    # plot(q['m2'][mspo/2:-mspo,mspo:].T*L/U,'r')
    # vert,=plot(q['m2'][0,mspo:]*L/U,'r',label='vertical relative vorticity')
    # plot(ymspo,d2psi2[mspo:],'k',lw=2)
    # plot(fr2*(psi['m1'][mspo/2:-mspo,mspo:].T-psi['m2'][mspo/2:-mspo,mspo:].T)/(U*L),'g')
    # horiz,=plot(fr2*(psi['m1'][0,mspo:]-psi['m2'][0,mspo:])/(U*L),'g',label='horizontal rel vorticity')
    # plot(ymspo,fr2*psidiff[mspo:],'k',lw=2)
    # plot(hb[mspo/2:-mspo,mspo:].T/hbmax,'k')
    # lgd=legend(loc=(1.05,0))
    # savefig(predir+'plots/'+dirname+dirname[6:]+'_relvorttopo_nosp.png',bbox_extra_artists=(lgd,), bbox_inches='tight')

    # #compare before and after of components
    figure(figsize=(18,10))
    subplot(121)
    plot(q['m1'].T*L/U,'r')
    #plot(arange(1,m-1),d2psi1,'k',lw=2)
    plot(betay.T,'b')
    plot(fr1*(psi['m2'].T-psi['m1'].T)/(U*L),'g')
    #plot(ymid,-fr1*psidiff,'k',lw=2)
    plot(qfull['m1'].T,'m')
    plot(qfull['m1'].T-q['m1'].T*L/U,'k')
    plot(qfull['m1'].T-q['m1'].T*L/U+fr1*(psi['m1'].T-psi['m2'].T)/(U*L),'y')
    #plot(ymid,q1_base.T,'k',lw=2)
    subplot(122)
    plot(q['m2'].T*L/U,'r')
    vert,=plot(q['m2'][0,:]*L/U,'r',label='vertical relative vorticity')
    #plot(arange(1,m-1),d2psi2,'k',lw=2)
    plot(betay.T,'b')
    plan,=plot(betay[0,:],'b',label='planetary vorticity')
    plot(fr2*(psi['m1'].T-psi['m2'].T)/(U*L),'g')
    horiz,=plot(fr2*(psi['m1'][0,:]-psi['m2'][0,:])/(U*L),'g',label='horizontal rel vorticity')
    #plot(ymid,fr2*psidiff,'k',lw=2)
    plot(qfull['m2'].T,'m')
    tot,=plot(qfull['m2'][0,:],'m',label='total PV')
    plot(qfull['m2'].T-q['m2'].T*L/U,'k')
    tot2,=plot(qfull['m2'][0,:].T-q['m2'][0,:].T*L/U,'k',label='total PV  minus vertical relative vorticity')
    plot(qfull['m2'].T-q['m2'].T*L/U-fr2*(psi['m1'].T-psi['m2'].T)/(U*L),'y')
    tot3,=plot(qfull['m2'][0,:].T-q['m2'][0,:].T*L/U-fr2*(psi['m1'][0,:].T-psi['m2'][0,:].T)/(U*L),'y', label='total PV minus all relative vorticity')
    plot(hb.T,'c')
    topo,=plot(hb[0,:],'c',label='topographic contribution')
    #plot(ymid,q2_base.T,'k',lw=2)
    lgd=legend(loc=(1.05,0))
    savefig(predir+'plots/'+dirname+dirname[6:]+'_qmbreakdown_comp.png',bbox_extra_artists=(lgd,), bbox_inches='tight')
Exemplo n.º 27
0
def upf(umag,uang,ftit,dirname,xmmat,ymmat,xskip,yskip,sponge,ylow):
    
    from pylab import *
    ion()

    predir='/data/ilebras/twolayer-jets-climate/'

    from readjet2h import readjet2h
    vardict=readjet2h(dirname)
    locals().update(vardict)

    plt.rcParams['image.cmap'] = 'hot_r'

    umax=umag['i1'].max()
    [m,n]=shape(xmmat)

    cnum=51
    
    figure(figsize=(21,8))
    ax=subplot(221)
    contourf(xmmat[0,:]/1e3,ymmat[ylow:,0]/1e3,umag['m1'][:,ylow:].T,cnum)
    colorbar()
    quiver(xmmat[ylow::xskip,::yskip]/1e3,ymmat[ylow::xskip,::yskip]/1e3,cos(uang['m1'][::yskip,ylow::xskip].T),sin(uang['m1'][::yskip,ylow::xskip].T))
    plot(xmmat[0,sponge/2]/1e3*ones(m-ylow),ymmat[ylow:,0]/1000,'k')
    plot(xmmat[0,-sponge]/1000*ones(m-ylow),ymmat[ylow:,0]/1000,'k')
    plot(xmmat[0,:]/1000,ymmat[sponge,0]/1000*ones(n),'k')
    ax.set_xticklabels([])
    ylim([ymmat[ylow,0]/1e3,ymmat[-1,0]/1e3])
    title('Upper Layer')
    ylabel('Time means')
    plot(xmmat[0,:]/1e3,ones(n)*ymmat[-(ymax-movedw)*m/2/ymax-2/a2*m/2/ymax,0]/1e3,'g')
    plot(xmmat[0,:]/1e3,ones(n)*ymmat[-(ymax-movedw)*m/2/ymax+2/a2*m/2/ymax,0]/1e3,'g')
    
    ax=subplot(222)
    contourf(xmmat[0,:]/1e3,ymmat[ylow:,0]/1e3,umag['m2'][:,ylow:].T,cnum)
    colorbar()
    quiver(xmmat[ylow::xskip,::yskip]/1e3,ymmat[ylow::xskip,::yskip]/1e3,cos(uang['m2'][::yskip,ylow::xskip].T),sin(uang['m2'][::yskip,ylow::xskip].T))
    plot(xmmat[0,sponge/2]/1e3*ones(m-ylow),ymmat[ylow:,0]/1000,'k')
    plot(xmmat[0,-sponge]/1000*ones(m-ylow),ymmat[ylow:,0]/1000,'k')
    plot(xmmat[0,:]/1000,ymmat[sponge,0]/1000*ones(n),'k')
    ax.set_xticklabels([])
    ax.set_yticklabels([])
    ylim([ymmat[ylow,0]/1e3,ymmat[-1,0]/1e3])
    title('Lower Layer')
    plot(xmmat[0,:]/1e3,ones(n)*ymmat[-(ymax-movedw)*m/2/ymax-2/a2*m/2/ymax,0]/1e3,'g')
    plot(xmmat[0,:]/1e3,ones(n)*ymmat[-(ymax-movedw)*m/2/ymax+2/a2*m/2/ymax,0]/1e3,'g')

    ax=subplot(223)
    contourf(xmmat[0,:]/1e3,ymmat[ylow:,0]/1e3,umag['i1'][:,ylow:].T,cnum)
    colorbar()
    quiver(xmmat[ylow::xskip,::yskip]/1e3,ymmat[ylow::xskip,::yskip]/1e3,cos(uang['i1'][::yskip,ylow::xskip].T),sin(uang['i1'][::yskip,ylow::xskip].T))
    plot(xmmat[0,sponge/2]/1e3*ones(m-ylow),ymmat[ylow:,0]/1000,'k')
    plot(xmmat[0,-sponge]/1000*ones(m-ylow),ymmat[ylow:,0]/1000,'k')
    plot(xmmat[0,:]/1000,ymmat[sponge,0]/1000*ones(n),'k')
    ylim([ymmat[ylow,0]/1e3,ymmat[-1,0]/1e3])
    xlabel('x position')
    ylabel('Snapshots')
    plot(xmmat[0,:]/1e3,ones(n)*ymmat[-(ymax-movedw)*m/2/ymax-2/a2*m/2/ymax,0]/1e3,'g')
    plot(xmmat[0,:]/1e3,ones(n)*ymmat[-(ymax-movedw)*m/2/ymax+2/a2*m/2/ymax,0]/1e3,'g')

    ax=subplot(224)
    contourf(xmmat[0,:]/1e3,ymmat[ylow:,0]/1e3,umag['i2'][:,ylow:].T,cnum)
    colorbar()
    quiver(xmmat[ylow::xskip,::yskip]/1e3,ymmat[ylow::xskip,::yskip]/1e3,cos(uang['i2'][::yskip,ylow::xskip].T),sin(uang['i2'][::yskip,ylow::xskip].T))
    plot(xmmat[0,sponge/2]/1e3*ones(m-ylow),ymmat[ylow:,0]/1000,'k')
    plot(xmmat[0,-sponge]/1000*ones(m-ylow),ymmat[ylow:,0]/1000,'k')
    plot(xmmat[0,:]/1000,ymmat[sponge,0]/1000*ones(n),'k')
    ax.set_yticklabels([])
    ylim([ymmat[ylow,0]/1e3,ymmat[-1,0]/1e3])
    xlabel('x position')
    plot(xmmat[0,:]/1e3,ones(n)*ymmat[-(ymax-movedw)*m/2/ymax-2/a2*m/2/ymax,0]/1e3,'g')
    plot(xmmat[0,:]/1e3,ones(n)*ymmat[-(ymax-movedw)*m/2/ymax+2/a2*m/2/ymax,0]/1e3,'g')    
    
    savefig(predir+'plots/'+dirname+dirname[6:]+'_'+ftit+'.png')