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'))
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'))