[python调试笔记]Temporal and spatial profile of wave power

 [python调试笔记]Temporal and spatial profile of wave power

 

import datetime
import h5py
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
from matplotlib.colors import Normalize

from sys import exit
import argparse
import os

#*********Turn off devide zero error in numpy**********#
np.seterr(divide = 'ignore')

#*********parser for get filename and select plot**********#
parser = argparse.ArgumentParser(description='Data plotter for KEMPO1')
#---关键语句---#
parser.add_argument('filename', nargs='*', help='file names of data <e.g> parabolic_051.h5')
#---关键语句---#
parser.add_argument('-p', '--power', action='store_true', help="plot the temporal and spatial profile of Bw")
parser.add_argument('-d', '--dynamic-spectrum', action='store_true', help='plot dynamic spectrum at x=20, 60')
parser.add_argument('-v', '--velocity-dist', action='store_true', help='plot velocity distribution at x=20')
parser.add_argument('-r', '--resonant-current', action='store_true', help='plot -je, jb and jb/Bw')
args = parser.parse_args()

if not args.filename:
    exit("Error: Filename is missing. Please specify data file.\n <e.g.> python plot_data.py parabolic_05.h5")

"""
Set plot 
"""
is_power = args.power
is_dynamic = args.dynamic_spectrum
is_vdist = args.velocity_dist
is_res = args.resonant_current

#--- 将is_power is_dynamic is_vdist is_res置为true ---#
if not (is_power | is_dynamic | is_vdist | is_res):
    is_power = True
    is_dynamic = True
    is_vdist = True
    is_res = True

# print(is_power)
# print(is_dynamic)
# print(is_vdist)
# print(is_res)
# print(datetime.datetime.now())

for file in args.filename:
    # create directory to store results
    dirname = os.path.dirname(file)
    basename_wo_ext = basename_without_ext = os.path.splitext(os.path.basename(file))[0]
    directory = os.path.join(dirname, basename_without_ext+'_result')
    os.makedirs(directory, exist_ok=True)
    # print(directory)
    # print(datetime.datetime.now())

    # ******** 读取h5文件 *********#
    datafile = h5py.File(file,'r')
    # print(datafile)
    # print(datetime.datetime.now())

    """
    读取输入参数
    """
    parameters = datafile["/parameters"]
    # print(parameters)

    dx = parameters["dx"].size
    dt = parameters["dt"][0]
    cv = parameters["cv"][0]
    # print("dx="+str(dx))
    # print("dt="+str(dt))
    # print("cv="+str(cv))

    omega_c = parameters["omega_c"][0]
    qm = parameters["qm"][0]
    b0 = omega_c / qm  #轴向静磁场
    # print("omega_c="+str(omega_c))
    # print("qm="+str(qm))
    # print("b0="+str(b0))

    nx = np.int(parameters["nx"][()])
    ntime = np.int(parameters["ntime"][()])
    damping_nd = np.int(parameters["damping_nd"][()]) #?
    # print("nx="+str(nx))
    # print("ntime="+str(ntime))
    # print("damping_nd="+str(damping_nd))
    # print(datetime.datetime.now())

    """
    Temporal and spatial profile of wave power
    """
    if is_power:
        # Magnitude of forward Bw
        field = datafile["/field"]
        x = field["x_axis"][damping_nd-1:nx-damping_nd] #不包含damping区域
        t = field["t_axis"][0:ntime-1:8] #8个数一组,取每组的第一个
        by_fwd = field["by_fwd"][damping_nd-1:nx-damping_nd, 0:ntime-1:8]
        bz_fwd = field["bz_fwd"][damping_nd-1:nx-damping_nd, 0:ntime-1:8]
        bw = (by_fwd ** 2 + bz_fwd ** 2)/b0**2
        X, Y = np.meshgrid(x,t)    #一维向量转化为二维网格矩阵
        # print("x_axis="+str(x))
        # print("t="+str(t))
        # print("by_fwd="+str(by_fwd))
        # print("bz_fwd="+str(bz_fwd))
        # print("bw="+str(bw))
        # print("X="+str(X))
        # print("Y="+str(Y))
        # print(datetime.datetime.now())
        # print("bw="+str(bw))
        # print("log10(bw)="+str(np.log10(bw)))
        # print("log10(bw).T="+str(np.log10(bw).T))

        # plot forward plopagating waves
        fig = plt.figure()
        ax1 = fig.add_subplot(111)
        contourdata = ax1.pcolormesh(X, Y, 10 * np.log10(bw).T, cmap='plasma', norm=Normalize(vmin=-80, vmax=-20))
        pp = fig.colorbar(contourdata, ax=ax1, orientation='vertical')
        plt.xlabel('$x c^{-1}\Omega_e$')
        plt.ylabel('$t \Omega_e$')
        pp.set_label('$20\log B_w/B_0$')
        plt.savefig(os.path.join(directory, "bw_forward.png"))
        plt.close()

        # Magnitude of backward Bw
        by_bwd = field["by_bwd"][damping_nd - 1:nx - damping_nd, 0:ntime - 1:8]
        bz_bwd = field["bz_bwd"][damping_nd - 1:nx - damping_nd, 0:ntime - 1:8]
        bw = (by_bwd ** 2 + bz_bwd ** 2) / b0 ** 2

        # plot backward plopagating waves
        fig = plt.figure()
        ax1 = fig.add_subplot(111)
        contourdata = ax1.pcolormesh(X, Y, 10 * np.log10(bw).T, cmap='plasma', norm=Normalize(vmin=-80, vmax=-20))
        pp = fig.colorbar(contourdata, ax=ax1, orientation='vertical')
        plt.xlabel('$x c^{-1}\Omega_e$')
        plt.ylabel('$t \Omega_e$')
        pp.set_label('$20\log B_w/B_0$')
        plt.savefig(os.path.join(directory, "bw_backward.png"))
        plt.close()

[python调试笔记]Temporal and spatial profile of wave power

 

上一篇:Java date日期类型,结束日期减去开始日期求两者时间差,精确到秒


下一篇:「51nod1220」 约数之和 题解