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)
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$")
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$")
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)$")
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)$")
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")
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$")
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)
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]), '^')
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)$")
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")