欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

代码Python 后处理历时模拟结果

最编程 2024-05-31 09:10:03
...

目录:

  1. Python读取epoch中SDF文件
  2. Python数据画图
  3. Python对数据进行FFT处理

1. Python读取EPOCH中SDF文件

只需要一步:Once you have a working python install, just go into one of the epoch directories (epoch1d, epoch2d or epoch3d) and type

make sdfutils

然后在Python文件中最前面加上

import sdf_helper

即可。

2. Python后处理SDF文件并画图(几个例子)

例子1:

#!/usr/bin/python
import sdf_helper as sh
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator as ml
from matplotlib.ticker import ScalarFormatter as sf
import matplotlib.ticker as ticker
c=3.0e8
ymax=1.1e11
ymin=-1.1e11
xmin=0
xmax=2000
dt=82
for i in range(1,49):
    dataname='./' '%04d' '.sdf' % i
    print(dataname)
    data=sh.getdata(dataname)
    eyleft=0.5*(ey+c*bz/np.sqrt(0.99))
    eyright=0.5*(ey-c*bz/np.sqrt(0.99))
    x=np.linspace(0,2000,80000)
# single plot
    fig,(ax0,ax1,ax2)=plt.subplots(3,1)
    fig.tight_layout(h_pad=2.0)
    fig.suptitle('Ey and Ez at t='+str(i*dt)+'T')
    plt.subplots_adjust(top=0.9)
    ax0.plot(x,eyleft,linewidth=2.0,color='C1')
    ax0.set_ylim(ymin,ymax)
    ax0.set_xlim(xmin,xmax)
    ax0.set_title('$E_{pump}$')
    ax1.plot(x,eyright,linewidth=2.0,color='C3')
    ax1.set_ylim(ymin,ymax)
    ax1.set_xlim(xmin,xmax)
    ax1.axhline(y=1.1e10,ls='--',color='C2')
    ax1.set_title('$E_{y,seed}$')
    ax2.plot(x,ez,linewidth=2.0,color='C2')
    ax2.set_ylim(ymin,ymax)
    ax2.set_xlim(xmin,xmax)
    ax2.set_title('$E_{z,seed}$')
    ax2.axhline(y=2.3e10,ls='--',color='C3')
    ax2.set_xlabel('$x [\lambda_0]$')
    fig.savefig('./eyez'+str(i)+'.png',dpi=300)
sh.list_variables(data)

效果:很多张图

3. Python对数据进行FFT

#!/usr/bin/python
import sdf_helper as sh
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator as ml
from matplotlib.ticker import ScalarFormatter as sf
import matplotlib.ticker as ticker
from scipy.fftpack import fft
c=3.0e8
dt=400
Fs=40
def FFT(Fs,data):
    L = len (data)
    N = np.power(2,np.ceil(np.log2(L)))
    FFT_y1 = np.abs(fft(data,int(N)))/L*2
    Fre = np.arange(int(N/2))*Fs/N
    FFT_y1 = FFT_y1[range(int(N/2))]
    return Fre,FFT_y1

for i in range(9,10):
    dataname='./' '%04d' '.sdf' % i
    print(dataname)
    data=sh.getdata(dataname)
#    ein=0.5*(ey+c*bz/np.sqrt(1-0.04))
#    esc=0.5*(ey-c*bz/np.sqrt(1-0.04))
#    x = np.linspace(0,2000,40000)
    Fre,FFT_y1=FFT(Fs,ex)
    plt.figure
    plt.plot(Fre,FFT_y1,color='C2')
    plt.grid(linestyle='--',linewidth=1.0)
    plt.axis([min(Fre),max(Fre),min(FFT_y1),1.1*max(FFT_y1)])
    plt.axvline(x=1.6733,c='C1',ls='--',lw=1.0,alpha=0.8)
    plt.title('Ex at 3600 T')
    plt.xlabel('k [$\omega_0/c$]')
    plt.savefig('./exfft3600T.png',dpi=300)  
    plt.show()
#sh.list_variables(data)
sh.list_variables(data)

 

原文地址:https://www.cnblogs.com/bellahra/p/16590895.html

推荐阅读