Exemple #1
0
def plotEvolution():

  #ky_list = linspace(0.3, pi, 17)
  ky_list = logspace(-1, log10(pi), 3)

  results = []
 
  """
  for w0 in [ -0.4 + 0.05j , -0.2 + 0.01j, - 0.8 - 0.01j, - 1.2 - 0.04j ]:
    res = []
    for n in range(len(ky_list)):
     w0 = solveDispersion(ky_list[n], (w0, w0+0.01, w0+0.001j), doPlots=False)
     res.append(w0)

    results.append(res) 
  """ 
  w0 = -0.4 + 0.05j
  for w0_init in [ -0.25 + 0.05j, -0.5 + 0.01j, -0.4 + 0.02 ]:
    res = []
    idx_l = where(ky_list <  2.55)
    idx_u = where(ky_list >= 2.55)
    idx = append(idx_u, idx_l[0][::-1])
    ky_list_mod = ky_list[idx]
    for n in range(len(ky_list)):
     print " ky ---> " , ky_list[idx][n]
     if (abs(ky_list[idx][n] - 2.55) < 0.1) : w0 = w0_init
     w0 = solveDispersion(ky_list[idx][n], (w0, w0+0.01, w0+0.001j), doPlots=False)
     res.append(w0)
    res = array(res)
    results.append(res[idx]) 
  
  results = array(results)
   
  
  #fig = gkcStyle.newFigure(ratio='1.41:1', basesize=9)
  fig = gkcStyle.newFigure(ratio='1.41:1', basesize=18)
  subplot(121)
  for res in results:
      semilogx(ky_list, imag(res), '-', label='imag')
  gkcStyle.plotZeroLine(min(ky_list), max(ky_list))
  
  xlim((min(ky_list), max(ky_list)))
  xlabel("$k_y$")
  ylabel("Growthrates $\\gamma$")

  #savefig("Growthrate.pdf", bbox_inches='tight')
 
  subplot(122)
  #clf()
  for res in results:
      semilogx(ky_list, real(res), '-', label='imag')
  gkcStyle.plotZeroLine(min(ky_list), max(ky_list))
  
  xlim((min(ky_list), max(ky_list)))
  xlabel("$k_y$")
  ylabel("Frequency $\\gamma$")
  savefig("Frequency.pdf", bbox_inches='tight')

  # Save max tendency
  savetxt("Tendency.txt", array([ky_list, real(results), imag(results)]).T)
Exemple #2
0
def plotEigenvalues(fileh5, **kwargs):
    """
        Plot the eigenvalues of the phase space function


        Optional keyword arguments:

        Keyword           Description
        ===============   ==============================================
         *dir*             Direction 'X' (for radial) or 'Y' for poloidal
         *offset*          Offset due to zeroset to 2 .

    """
    import gkcStyle

    D = gkcData.getDomain(fileh5)

    try:
        eigv = fileh5.root.Eigenvalue.EigenValues.cols.Eigenvalue[:]
    except:
        print "Problems openning eigenvalues. Not included ?"
        return

    eigv_r = np.real(eigv)
    eigv_i = np.imag(eigv)

    pylab.plot(eigv_r, eigv_i, '.')

    gkcStyle.plotZeroLine(1.1 * min(eigv_r),
                          1.1 * max(eigv_r),
                          direction='horizontal',
                          color="#666666",
                          lw=0.8)
    gkcStyle.plotZeroLine(1.1 * min(eigv_i),
                          1.1 * max(eigv_i),
                          direction='vertical',
                          color="#666666",
                          lw=0.8)

    pylab.xlim((1.1 * min(eigv_r), 1.1 * max(eigv_r)))
    pylab.ylim((1.1 * min(eigv_i), 1.1 * max(eigv_i)))

    pylab.xlabel("$\\omega_r$")
    pylab.ylabel("$\\omega_i$")
Exemple #3
0
def plotEigenvalues(fileh5, **kwargs):
    """
        Plot the eigenvalues of the phase space function


        Optional keyword arguments:

        Keyword           Description
        ===============   ==============================================
         *dir*             Direction 'X' (for radial) or 'Y' for poloidal
         *offset*          Offset due to zeroset to 2 .

    """
    import gkcStyle


    D = gkcData.getDomain(fileh5)

    try:
        eigv = fileh5.root.Eigenvalue.EigenValues.cols.Eigenvalue[:] 
    except:
       print "Problems openning eigenvalues. Not included ?"
       return


    eigv_r = np.real(eigv)
    eigv_i = np.imag(eigv)

    pylab.plot(eigv_r, eigv_i, '.')


    gkcStyle.plotZeroLine(1.1*min(eigv_r), 1.1*max(eigv_r), direction='horizontal', color="#666666", lw=0.8)
    gkcStyle.plotZeroLine(1.1*min(eigv_i), 1.1*max(eigv_i), direction='vertical'  , color="#666666", lw=0.8)

    pylab.xlim((1.1*min(eigv_r), 1.1*max(eigv_r)))
    pylab.ylim((1.1*min(eigv_i), 1.1*max(eigv_i)))


    pylab.xlabel("$\\omega_r$")
    pylab.ylabel("$\\omega_i$")
Exemple #4
0
def plotFrequencySpectra(fileh5, which='b', markline="-", **kwargs):
    """
        Plots time evolution of mode power.


        Optional keyword arguments:

        Keyword           Description
        ===============   ==============================================
         *dir*             Direction 'X' (for radial) or 'Y' for poloidal
         *modes*           List of modes (default plot modes). 
                           e.g. modes = [1,4,5]         - to plot all modes
                                modes = range(Nky)[::2] - to plot every second mode
         *field*           'phi' electric potential
                           'A' parallel magnetic vector potential
                           'B' parallel magnetic field
         *dir*             Direction 'X' (for radial) or 'Y' for poloidal
         *doCFL*           clear previous figure
         *label*           'ky' or 'm'
         *offset*          Offset due to zeroset to 2 .

    """
    import gkcData
    import gkcStyle

    import pylab
    import numpy as np
    
    D = gkcData.getDomain(fileh5)

    doCFL    = kwargs.pop('doCFL', True)
    dir      = kwargs.pop('dir', 'Y')
    modes    = kwargs.pop('modes' , range(D['Nky']))
    field    = kwargs.pop('field', 'phi')  
    n_offset = kwargs.pop('offset', 2)  
    label    = kwargs.pop('label', 'ky')  
    leg_loc  = kwargs.pop('loc', 'best')  
    start    = kwargs.pop('start', 1)  
    stop     = kwargs.pop('stop', -1)  
    

    if doCFL == True : pylab.clf()
    
    T = gkcData.getTime(fileh5.root.Analysis.PowerSpectrum.Time)[:,1]
    
    if   field == 'phi' : n_field = 0
    elif field == 'A'   : n_field = 1
    elif field == 'B'   : n_field = 2
    else : raise TypeError("Wrong argument for field : " + str(field))

    if(dir == 'X'):
        raise TypeError("Not implemented for X-direction")
    elif(dir == 'Y'):
        
      shift = fileh5.root.Analysis.PhaseShift.Y   [n_field, :,start:stop]
      print "Using data from T=", T[start], " to T = ", T[stop]
      freq = [] 
      for nky in np.arange(1,len(D['ky'])):
        time_series = np.sin(shift[nky,:])
        FS = np.fft.rfft(time_series)
      
        # Not only if we have constant time step !
        freq.append(abs(FS))
        fftfreq = np.fft.fftfreq(len(abs(np.fft.fftshift(FS))), d = (T[-10]-T[-11])) 
    
      freq = np.array(freq)
      print np.shape(fftfreq), " 2 : ", np.shape(D['ky'][1:]), np.shape(freq)
      pylab.contourf(D['ky'][1:], np.fft.fftshift(fftfreq), freq.T, 100, cmap=pylab.cm.jet) 
      pylab.xlim((D['ky'][1], D['ky'][-1]))
      pylab.ylim((min(fftfreq), max(fftfreq)))
      pylab.colorbar()
    else : raise TypeError("Wrong argument for dir : " + str(dir))
    pylab.gca().set_xscale("log") 
     
    pylab.xlabel("$k_y$")
   
    gkcStyle.plotZeroLine(D['ky'][1], D['ky'][-1], color='r')

    pylab.ylabel("Frequency $\\omega_r(k_y)$")
Exemple #5
0
def plotFrequencyGrowthrates(fileh5, which='b', markline="-", **kwargs):
    """
        Plots time evolution of mode power.


        Optional keyword arguments:

        Keyword           Description
        ===============   ==============================================
         *dir*             Direction 'X' (for radial) or 'Y' for poloidal
         *modes*           List of modes (default plot modes). 
                           e.g. modes = [1,4,5]         - to plot all modes
                                modes = range(Nky)[::2] - to plot every second mode
         *field*           'phi' electric potential
                           'A' parallel magnetic vector potential
                           'B' parallel magnetic field
         *dir*             Direction 'X' (for radial) or 'Y' for poloidal
         *doCFL*           clear previous figure
         *label*           'ky' or 'm'
         *offset*          Offset due to zeroset to 2 .

    """
    D = gkcData.getDomain(fileh5)
    
    doCFL    = kwargs.pop('doCFL', True)
    dir      = kwargs.pop('dir', 'Y')
    modes    = kwargs.pop('modes' , range(D['Nky']))
    field    = kwargs.pop('field', 'phi')  
    n_offset = kwargs.pop('offset', 2)  
    label    = kwargs.pop('label', 'ky')  
    leg_loc  = kwargs.pop('loc', 'best')  
    start    = kwargs.pop('start', 1)  
    stop     = kwargs.pop('stop', -1)  
    

    if doCFL == True : pylab.clf()
    
    T = gkcData.getTime(fileh5.root.Analysis.PowerSpectrum.Time)[:,1]
        
    print "Fitting from T : ", T[start], " - ", T[stop]
    
    if   field == 'phi' : n_field = 0
    elif field == 'A'   : n_field = 1
    elif field == 'B'   : n_field = 2
    else : raise TypeError("Wrong argument for field : " + str(field))

    if(dir == 'X'):
      pl = semilogy(T, fileh5.root.Analysis.PowerSpectrum.X[n_field,:numModes,2:].T)
      legend_list = []
      for i in range(len(fileh5.root.Analysis.PowerSpectrum.X[n_field, :numModes,0])):
        legend_list.append("kx = %i" % i)
      leg = pylab.legend(legend_list, loc='lower right', ncol=2)
      leg.draw_frame(0)
    
    elif(dir == 'Y'):

      scale = fileh5.root.Grid._v_attrs.Ly/(2. * np.pi)
      
      legend_list = []
      if   which=='i' or which=='b':
        power = fileh5.root.Analysis.PowerSpectrum.Y[n_field, :,:]
        growthrates = getGrowthrate(T,power, start,stop, dir='Y')
        pl = pylab.semilogx(D['ky'], growthrates, "s" + markline, label='$\\gamma$')
      if which=='r' or which=='b':
        shift = fileh5.root.Analysis.PhaseShift.Y   [n_field, :,:]
        frequency   = getFrequency(T,shift, start,stop, dir='Y')
        pl = pylab.semilogx(D['ky'], frequency, "v" + markline, label='$\\omega_r$')
      #if which !='r' or which != 'i' or which !='b':
      #      raise TypeError("Wrong argument for which (r/i/b) : " + str(dir))
    
      #pylab.twinx()
      pylab.xlim((0.8*min(D['ky']), 1.2*max(D['ky'])))

    
      
    else : raise TypeError("Wrong argument for dir : " + str(dir))
     
    pylab.xlabel("$k_y$")
   
    leg = pylab.legend(loc=leg_loc, ncol=1, mode="expand").draw_frame(0)

    gkcStyle.plotZeroLine(0.8*min(D['ky']), 1.2*max(D['ky']))

    pylab.ylabel("Growthrate $\\gamma(k_y)$ / Frequency $\\omega_r(k_y)$")
Exemple #6
0
def plotScalarDataTimeEvolution(fileh5, var = "KinPhi", **kwargs):
    """
        Plots time evolution of mode power.


        Optional keyword arguments:

        Keyword           Description
        ===============   ==============================================
         *dir*             Direction 'X' (for radial) or 'Y' for poloidal
         *modes*           List of modes (default plot modes). 
                           e.g. modes = [1,4,5]         - to plot all modes
                                modes = range(Nky)[::2] - to plot every second mode
         *field*           'phi' electric potential
                           'A' parallel magnetic vector potential
                           'B' parallel magnetic field
         *dir*             Direction 'X' (for radial) or 'Y' for poloidal
         *doCFL*           clear previous figure
         *label*           'ky' or 'm'
         *offset*          Offset due to zeroset to 2 .

    """
    D = gkcData.getDomain(fileh5)
    
    log      = kwargs.pop('log', True)
    
    leg_loc  = kwargs.pop('leg_loc' , 'best')
    leg_ncol = kwargs.pop('leg_ncol', 1)

    if(log == 1) : 
      plotf = pylab.semilogy
      af    = abs
    else         : 
      plotf = pylab.plot
      af    = lambda x : x
        
    T = fileh5.root.Analysis.scalarValues.cols.Time[5:]
    n_sp = len(fileh5.root.Species.cols.Name[1:]) 



    # Plot Field Energy"
    if var == "phi":
        plotf(T, af(fileh5.root.Analysis.scalarValues.cols.phiEnergy[3:]), label="Field Energy")
        pylab.ylabel("Field Energy")

    if var == "kinEnergy":
        for s in range(n_sp):
            plotf(T, af(fileh5.root.Analysis.scalarValues.cols.KineticEnergy[3:][:,s]) , label="Kinetic Energy (" + fileh5.root.Species.cols.Name[s]+ ")" )

        #plotf(T, af(fileh5.root.Analysis.scalarValues.cols.phiEnergy[3:]+1.*(np.sum(fileh5.root.Analysis.scalarValues.cols.KineticEnergy[3:], axis=1))) , label="Total Energy")
        pylab.ylabel("Energy")
    
    if var == "KinPhi":
        pylab.plot(T, fileh5.root.Analysis.scalarValues.cols.phiEnergy[5:], label="Field Energy")
        E_kin_total = fileh5.root.Analysis.scalarValues.cols.phiEnergy[5:]
        for s in range(n_sp):
          E_kin = fileh5.root.Analysis.scalarValues.cols.KineticEnergy[5:][:,s]-fileh5.root.Analysis.scalarValues.cols.KineticEnergy[5][s]
          E_kin = -abs(E_kin)
          E_kin_total = E_kin_total + E_kin
          pylab.plot(T, E_kin , label="Kinetic Energy (" + fileh5.root.Species.cols.Name[s]+ ")" )
        gkcStyle.plotZeroLine(min(T), max(T))
        pylab.plot(T, -abs(E_kin_total)/100. , label="Total Energy")
        pylab.yscale('symlog', linthreshy=1.e-7)
        # Plot Toal nergy
        pylab.ylabel("Energy")

    if var == "heatFlux":
  
       for s in sp:
        for s in range(n_sp):
          plot(T, fileh5.root.Analysis.scalarValues.cols.HeatFlux[3:][:,s], label=fileh5.root.Species.cols.Name[s]) 
       pylab.ylabel("Heat Flux")
 
    if var == "Charge":
       charge = np.zeros(len(fileh5.root.Analysis.scalarValues.cols.ParticleNumber[3:][:,1]))
       for s in range(n_sp):
          dn = (fileh5.root.Analysis.scalarValues.cols.ParticleNumber[3:][:,s] - fileh5.root.Analysis.scalarValues.cols.ParticleNumber[3][s])
          n  = fileh5.root.Analysis.scalarValues.cols.ParticleNumber[3:][:,s] 
          q = fileh5.root.Species.cols.Charge[s]
          charge = charge + q * n

          pylab.plot(fileh5.root.Analysis.scalarValues.cols.Time[3:], q*n , label=fileh5.root.Species.cols.Name[s])
          pylab.plot(fileh5.root.Analysis.scalarValues.cols.Time[3:], q*dn , label=fileh5.root.Species.cols.Name[s])
       if D['Ns'] > 1:
          plotf(fileh5.root.Analysis.scalarValues.cols.Time[3:], charge , label="Charge")
       
       gkcStyle.plotZeroLine(min(T), max(T))
       pylab.yscale('symlog', linthreshy=1.e-7)
       pylab.ylabel("Charge")
  
    if var == "particleFlux":
      for s in range(n_sp):
        plotf(T, fileh5.root.Analysis.scalarValues.cols.ParticleFlux[3:][:,s], label=fileh5.root.Species.cols.Name[s]) 
      pylab.ylabel("Particle Flux")
 
    pylab.xlim((min(T), max(T)))
    leg = pylab.legend(loc=leg_loc, ncol=leg_ncol).draw_frame(0)
    pylab.xlabel("Time")
Exemple #7
0
def plotFrequencyGrowthrates(fileh5, which='b', markline="-", **kwargs):
    """
        Plots time evolution of mode power.


        Optional keyword arguments:

        Keyword           Description
        ===============   ==============================================
         *dir*             Direction 'X' (for radial) or 'Y' for poloidal
         *modes*           List of modes (default plot modes). 
                           e.g. modes = [1,4,5]         - to plot all modes
                                modes = range(Nky)[::2] - to plot every second mode
         *field*           'phi' electric potential
                           'A' parallel magnetic vector potential
                           'B' parallel magnetic field
         *dir*             Direction 'X' (for radial) or 'Y' for poloidal
         *doCFL*           clear previous figure
         *label*           'ky' or 'm'
         *offset*          Offset due to zeroset to 2 .

    """
    D = gkcData.getDomain(fileh5)

    doCLF = kwargs.pop('doCLF', True)
    dir = kwargs.pop('dir', 'Y')
    modes = kwargs.pop('modes', range(D['Nky']))
    field = kwargs.pop('field', 'phi')
    n_offset = kwargs.pop('offset', 2)
    label = kwargs.pop('label', 'ky')
    leg_loc = kwargs.pop('loc', 'best')
    start = kwargs.pop('start', 1)
    stop = kwargs.pop('stop', -1)
    m = kwargs.pop('m', 0)
    useLog = kwargs.pop('useLog', True)

    if useLog == True: pf = pylab.semilogx
    else: pf = pylab.plot

    if doCLF == True: pylab.clf()

    T = gkcData.getTime(fileh5.root.Analysis.PowerSpectrum.Time)[:, 1]

    if field == 'phi': n_field = 0
    elif field == 'A': n_field = 1
    elif field == 'B': n_field = 2
    else: raise TypeError("Wrong argument for field : " + str(field))

    if (dir == 'X'):
        pl = pf(T, fileh5.root.Analysis.PowerSpectrum.X[n_field, :numModes,
                                                        2:].T)
        legend_list = []
        for i in range(
                len(fileh5.root.Analysis.PowerSpectrum.X[n_field, :numModes,
                                                         0])):
            legend_list.append("kx = %i" % i)
        leg = pylab.legend(legend_list, loc='lower right', ncol=2)
        leg.draw_frame(0)

    elif (dir == 'Y'):

        scale = fileh5.root.Grid._v_attrs.Ly / (2. * np.pi)

        legend_list = []
        if which == 'i' or which == 'b':
            power = fileh5.root.Analysis.PowerSpectrum.Y[n_field, :, :]
            growthrates = getGrowthrate(T, power, start, stop)
            pl = pf(D['ky'], growthrates, "s" + markline, label='$\\gamma$')
        if which == 'r' or which == 'b':
            shift = fileh5.root.Analysis.PhaseShift.Y[n_field, :, :]
            frequency = getFrequency(T, shift, start, stop)
            pl = pf(D['ky'], frequency, "v" + markline, label='$\\omega_r$')
        #if which !='r' or which != 'i' or which !='b':
        #      raise TypeError("Wrong argument for which (r/i/b) : " + str(dir))

        #pylab.twinx()
        pylab.xlim((0.8 * min(D['ky']), 1.2 * max(D['ky'])))

    else:
        raise TypeError("Wrong argument for dir : " + str(dir))

    pylab.xlabel("$k_y$")

    leg = pylab.legend(loc=leg_loc, ncol=1, mode="expand").draw_frame(0)

    gkcStyle.plotZeroLine(0.8 * min(D['ky']), 1.2 * max(D['ky']))

    pylab.ylabel("Growthrate $\\gamma(k_y)$ / Frequency $\\omega_r(k_y)$")
# sw-ITG (2)
w_2, kx, phi_k, x, phi_2  = disp.solveEquation((w0, w0+0.0005, w0+0.0002j), 9., stdSetup_swITG)
"""

# sw-ITG (2)
w_2, kx, phi_k, x, phi_2  = disp.solveEquation((w0, w0+0.0005, w0+0.0002j), 0.5, stdSetup_swITG)


########### Plotting #######333
gkcStyle.newFigure(ratio="2.33:1", basesize=10.)

subplot(121)
plot(x, real(phi_0), label="%.3f %.3f" % (real(w_0), imag(w_0)))
plot(x, real(phi_1), label="%.3f %.3f" % (real(w_1), imag(w_1)))
plot(x, real(phi_2), label="%.3f %.3f" % (real(w_2), imag(w_2)))
gkcStyle.plotZeroLine(min(kx), max(kx))
xlim((-5, 5.))

xlabel("$X$")
ylabel("$\phi(x)$")

####
subplot(122)
plot(x, imag(phi_0), label="%.3f %.3f" % (real(w_0), imag(w_0)))
plot(x, imag(phi_1), label="%.3f %.3f" % (real(w_1), imag(w_1)))
plot(x, imag(phi_2), label="%.3f %.3f" % (real(w_2), imag(w_2)))
gkcStyle.plotZeroLine(min(kx), max(kx))

xlim((-5, 5.))

xlabel("$X$")
Exemple #9
0
    title="Benchmark of Smolykov et al. (PRL, 2002)  using gkc++ (rev. 173)")

pylab.semilogx(D['ky'][1:-1],
               2. * np.imag(omega_sim[1:-1]),
               '^',
               label='gkc++')
pylab.semilogx(ky_list,
               np.imag(omega_th),
               '-',
               color='#FF4444',
               alpha=0.8,
               linewidth=5.,
               label='Theory')
gkcStyle.plotZeroLine(D['ky'][1],
                      D['ky'][-1],
                      direction='horizontal',
                      color="#666666",
                      lw=1.5)

pylab.xlim((D['ky'][1], D['ky'][-1]))

if (isKinetic): pylab.ylim((-0.005, 0.015))
else: pylab.ylim((-0.002, 0.005))

pylab.legend(loc='best').draw_frame(0)
pylab.xlabel("$k_y$")
pylab.ylabel("Growthrate  $\\omega_i [L_n / v_{te}]$")

# Plot Frequency
pylab.subplot(212)
Exemple #10
0
omega_th = np.array(omega_th) * param['kp']#/sqrt(1837.)

fileh5.close()

############################## Plot Figure ###################

gkcStyle.newFigure(ratio="1:1.33", basesize=12)

# Plot Growthrates
pylab.subplot(211, title="Benchmark of Smolykov et al. (PRL, 2002)  using gkc++ (rev. 173)")
     


pylab.semilogx(D['ky'][1:-1], 2. * np.imag(omega_sim[1:-1]), '^', label='gkc++')
pylab.semilogx(ky_list, np.imag(omega_th), '-', color='#FF4444', alpha=0.8, linewidth=5., label='Theory')
gkcStyle.plotZeroLine(D['ky'][1], D['ky'][-1], direction='horizontal', color="#666666", lw=1.5)

pylab.xlim((D['ky'][1], D['ky'][-1]))

if (isKinetic) : pylab.ylim((-0.005, 0.015))
else           : pylab.ylim((-0.002, 0.005))

pylab.legend(loc='best').draw_frame(0)
pylab.xlabel("$k_y$")
pylab.ylabel("Growthrate  $\\omega_i [L_n / v_{te}]$")

# Plot Frequency
pylab.subplot(212)


pylab.semilogx(D['ky'][1:-1], np.real(omega_sim[1:-1]), '^')
Exemple #11
0
def plotFrequencySpectra(fileh5, which='b', markline="-", **kwargs):
    """
        Plots time evolution of mode power.


        Optional keyword arguments:

        Keyword           Description
        ===============   ==============================================
         *dir*             Direction 'X' (for radial) or 'Y' for poloidal
         *modes*           List of modes (default plot modes). 
                           e.g. modes = [1,4,5]         - to plot all modes
                                modes = range(Nky)[::2] - to plot every second mode
         *field*           'phi' electric potential
                           'A' parallel magnetic vector potential
                           'B' parallel magnetic field
         *dir*             Direction 'X' (for radial) or 'Y' for poloidal
         *doCFL*           clear previous figure
         *label*           'ky' or 'm'
         *offset*          Offset due to zeroset to 2 .

    """
    import gkcData
    import gkcStyle

    import pylab
    import numpy as np

    D = gkcData.getDomain(fileh5)

    doCFL = kwargs.pop('doCFL', True)
    dir = kwargs.pop('dir', 'Y')
    modes = kwargs.pop('modes', range(D['Nky']))
    field = kwargs.pop('field', 'phi')
    n_offset = kwargs.pop('offset', 2)
    label = kwargs.pop('label', 'ky')
    leg_loc = kwargs.pop('loc', 'best')
    start = kwargs.pop('start', 1)
    stop = kwargs.pop('stop', -1)

    if doCFL == True: pylab.clf()

    T = gkcData.getTime(fileh5.root.Analysis.PowerSpectrum.Time)[:, 1]

    if field == 'phi': n_field = 0
    elif field == 'A': n_field = 1
    elif field == 'B': n_field = 2
    else: raise TypeError("Wrong argument for field : " + str(field))

    if (dir == 'X'):
        raise TypeError("Not implemented for X-direction")
    elif (dir == 'Y'):

        shift = fileh5.root.Analysis.PhaseShift.Y[n_field, :, start:stop]
        print "Using data from T=", T[start], " to T = ", T[stop]
        freq = []
        for nky in np.arange(1, len(D['ky'])):
            time_series = np.sin(shift[nky, :])
            FS = np.fft.rfft(time_series)

            # Not only if we have constant time step !
            freq.append(abs(FS))
            fftfreq = np.fft.fftfreq(len(abs(np.fft.fftshift(FS))),
                                     d=(T[-10] - T[-11]))

        freq = np.array(freq)
        print np.shape(fftfreq), " 2 : ", np.shape(D['ky'][1:]), np.shape(freq)
        pylab.contourf(D['ky'][1:],
                       np.fft.fftshift(fftfreq),
                       freq.T,
                       100,
                       cmap=pylab.cm.jet)
        pylab.xlim((D['ky'][1], D['ky'][-1]))
        pylab.ylim((min(fftfreq), max(fftfreq)))
        pylab.colorbar()
    else:
        raise TypeError("Wrong argument for dir : " + str(dir))
    pylab.gca().set_xscale("log")

    pylab.xlabel("$k_y$")

    gkcStyle.plotZeroLine(D['ky'][1], D['ky'][-1], color='r')

    pylab.ylabel("Frequency $\\omega_r(k_y)$")
Exemple #12
0
def plotScalarDataTimeEvolution(fileh5, var="KinPhi", **kwargs):
    """
        Plots time evolution of mode power.


        Optional keyword arguments:

        Keyword           Description
        ===============   ==============================================
         *dir*             Direction 'X' (for radial) or 'Y' for poloidal
         *modes*           List of modes (default plot modes). 
                           e.g. modes = [1,4,5]         - to plot all modes
                                modes = range(Nky)[::2] - to plot every second mode
         *field*           'phi' electric potential
                           'A' parallel magnetic vector potential
                           'B' parallel magnetic field
         *dir*             Direction 'X' (for radial) or 'Y' for poloidal
         *doCFL*           clear previous figure
         *label*           'ky' or 'm'
         *offset*          Offset due to zeroset to 2 .

    """
    D = gkcData.getDomain(fileh5)

    log = kwargs.pop('log', True)

    leg_loc = kwargs.pop('leg_loc', 'best')
    leg_ncol = kwargs.pop('leg_ncol', 1)

    if (log == 1):
        plotf = pylab.semilogy
        af = abs
    else:
        plotf = pylab.plot
        af = lambda x: x

    T = fileh5.root.Analysis.scalarValues.cols.Time[5:]
    n_sp = len(fileh5.root.Species.cols.Name[1:])

    # Plot Field Energy"
    if var == "phi":
        plotf(T,
              af(fileh5.root.Analysis.scalarValues.cols.phiEnergy[3:]),
              label="Field Energy")
        pylab.ylabel("Field Energy")

    if var == "kinEnergy":
        for s in range(n_sp):
            plotf(T,
                  af(fileh5.root.Analysis.scalarValues.cols.KineticEnergy[3:]
                     [:, s]),
                  label="Kinetic Energy (" + fileh5.root.Species.cols.Name[s] +
                  ")")

        #plotf(T, af(fileh5.root.Analysis.scalarValues.cols.phiEnergy[3:]+1.*(np.sum(fileh5.root.Analysis.scalarValues.cols.KineticEnergy[3:], axis=1))) , label="Total Energy")
        pylab.ylabel("Energy")

    if var == "KinPhi":
        pylab.plot(T,
                   fileh5.root.Analysis.scalarValues.cols.phiEnergy[5:],
                   label="Field Energy")
        E_kin_total = fileh5.root.Analysis.scalarValues.cols.phiEnergy[5:]
        for s in range(n_sp):
            E_kin = fileh5.root.Analysis.scalarValues.cols.KineticEnergy[
                5:][:,
                    s] - fileh5.root.Analysis.scalarValues.cols.KineticEnergy[
                        5][s]
            E_kin = -abs(E_kin)
            E_kin_total = E_kin_total + E_kin
            pylab.plot(T,
                       E_kin,
                       label="Kinetic Energy (" +
                       fileh5.root.Species.cols.Name[s] + ")")
        gkcStyle.plotZeroLine(min(T), max(T))
        pylab.plot(T, -abs(E_kin_total) / 100., label="Total Energy")
        pylab.yscale('symlog', linthreshy=1.e-7)
        # Plot Toal nergy
        pylab.ylabel("Energy")

    if var == "heatFlux":

        for s in sp:
            for s in range(n_sp):
                plot(T,
                     fileh5.root.Analysis.scalarValues.cols.HeatFlux[3:][:, s],
                     label=fileh5.root.Species.cols.Name[s])
        pylab.ylabel("Heat Flux")

    if var == "Charge":
        charge = np.zeros(
            len(fileh5.root.Analysis.scalarValues.cols.ParticleNumber[3:][:,
                                                                          1]))
        for s in range(n_sp):
            dn = (
                fileh5.root.Analysis.scalarValues.cols.ParticleNumber[3:][:, s]
                - fileh5.root.Analysis.scalarValues.cols.ParticleNumber[3][s])
            n = fileh5.root.Analysis.scalarValues.cols.ParticleNumber[3:][:, s]
            q = fileh5.root.Species.cols.Charge[s]
            charge = charge + q * n

            pylab.plot(fileh5.root.Analysis.scalarValues.cols.Time[3:],
                       q * n,
                       label=fileh5.root.Species.cols.Name[s])
            pylab.plot(fileh5.root.Analysis.scalarValues.cols.Time[3:],
                       q * dn,
                       label=fileh5.root.Species.cols.Name[s])
        if D['Ns'] > 1:
            plotf(fileh5.root.Analysis.scalarValues.cols.Time[3:],
                  charge,
                  label="Charge")

        gkcStyle.plotZeroLine(min(T), max(T))
        pylab.yscale('symlog', linthreshy=1.e-7)
        pylab.ylabel("Charge")

    if var == "particleFlux":
        for s in range(n_sp):
            plotf(T,
                  fileh5.root.Analysis.scalarValues.cols.ParticleFlux[3:][:,
                                                                          s],
                  label=fileh5.root.Species.cols.Name[s])
        pylab.ylabel("Particle Flux")

    pylab.xlim((min(T), max(T)))
    leg = pylab.legend(loc=leg_loc, ncol=leg_ncol).draw_frame(0)
    pylab.xlabel("Time")