示例#1
0
文件: E_field.py 项目: giannisker/XGC
def Local_E_Z(iz, it, cut):
    global Zi, Ri, pot
    option = 1
    if cut == None:
        cut = core.jcut
    dZ = core.Zi[1] - core.Zi[0]
    dR = core.Ri[1] - core.Ri[0]
    Sep_ip = core.getiparrs_hor(0.95, 1., core.jcut)[-1]

    # dphi/dZ
    potim1 = core.getcutvalue_hor(core.pot[:, iz, it], cut - 1, option)
    poti = core.getcutvalue_hor(core.pot[:, iz, it], cut, option)
    potip1 = core.getcutvalue_hor(core.pot[:, iz, it], cut + 1, option)
    dphidZ_N = -(potip1 - potim1) / (2. * dZ)

    #Plotting
    L = np.array([x for x in range(0, len(dphidZ_N))])
    unit = (core.Rmax - core.Rmin) / 100
    R = np.array([L[ip] * unit + core.Rmin for ip in range(0, len(dphidZ_N))])
    plt.title('Local $E_y$-field')
    plt.xlabel('$R(m)$')
    plt.ylabel('$E_y$')
    plt.plot(R[:], dphidZ_N[:], 'go')
    plt.axvline(x=Sep_ip * unit + core.Rmin,
                color='b',
                linestyle='dashed',
                linewidth=2)
    plt.legend()
    plt.show()
示例#2
0
def Mag_N_flux():
    '''Writes on text the Z-component of the magnetic drifts flux.'''
    option = 1
    start = 0
    time_range = 200
    cut = accuracy / 2

    #new_file = open("Norm_Magnetic_Fluxes_higher@%s.txt" %(cut),'a')
    new_file = open("Norm_Magnetic_Fluxes_Bottom.txt", 'a')
    new_file.write("Magnetic" + "\t" + "R" + "\t" + "psi" + "\n")
    br = core.getcutvalue_hor(core.bfield[:, 0], cut, 1)

    ne_all = np.array([[
        core.getcutvalue_hor(core.ne[:, iz, it], cut, option)
        for iz in range(core.Nplanes)
    ] for it in range(start, start + time_range)])
    print("ne_all done...")

    for Flux_ip in range(0, accuracy):
        if math.isnan(br[Flux_ip]) == True:
            pass
        else:
            Mag = core.magnetic_flux_norm(cut, Flux_ip, ne_all)
            R = (Rmin + unitR * Flux_ip)
            psi = core.psii[Flux_ip]
            new_file.write(str(Mag) + "\t" + str(R) + "\t" + str(psi) + "\n")
    new_file.close()
    return ("Done!")
示例#3
0
文件: E_field.py 项目: giannisker/XGC
def z_variation_E_z_field(iz, it, cut):
    global Zi, Ri, pot
    option = 1
    if cut == None:
        cut = core.jcut
    dZ = core.Zi[1] - core.Zi[0]
    dR = core.Ri[1] - core.Ri[0]
    Sep_ip = core.getiparrs_hor(0.95, 1., core.jcut)[-1]

    field_value = []
    for cut_plane in range(cut - 20, cut + 20):
        # dphi/dZ
        potim1 = core.getcutvalue_hor(core.pot[:, iz, it], cut_plane - 1,
                                      option)
        poti = core.getcutvalue_hor(core.pot[:, iz, it], cut_plane, option)
        potip1 = core.getcutvalue_hor(core.pot[:, iz, it], cut_plane + 1,
                                      option)
        dphidZ_N = -(potip1 - potim1) / (2. * dZ)
        field_value.append(dphidZ_N[Sep_ip - 1])

    #Plotting
    L = np.array([x for x in range(0, len(field_value))])
    unit = (core.Zmax - core.Zmin) / 100
    R = np.array(
        [L[ip] * unit + core.Zmin for ip in range(0, len(field_value))])
    plt.title('Local $E_y$-field at a vertical line')
    plt.xlabel('$Z(m)$')
    plt.ylabel('$E_y$')
    plt.plot(R[:], field_value[:], 'go')
    plt.legend()
    plt.show()
示例#4
0
文件: Reyn.py 项目: giannisker/XGC
def phi_tilda(cut):#loads all potential and density matrices that we will take the derivative.
    option = 1
    t_start = 550 
    t_end = 650
    planes = core.Nplanes
    
    #loading density
    n_e=core.loader.calcNeTotal()
    n_tot = np.asarray([[core.getcutvalue_hor(n_e[:,iz,it],(cut),option) for iz in range(0,planes)] for it in range(t_start,t_end)])
    #loading arrays of potential: phi[it,iz,ip]
    phim = np.asarray([[core.getcutvalue_hor(core.pot[:,iz,it],(cut-1)%len(core.Zi),option) for iz in range(0,planes)] for it in range(t_start,t_end)])
    print('array 1 loaded')
    phi = np.asarray([[core.getcutvalue_hor(core.pot[:,iz,it],cut,option) for iz in range(0,planes)] for it in range(t_start,t_end)])
    print('array 2 loaded')
    phip = np.asarray([[core.getcutvalue_hor(core.pot[:,iz,it],(cut+1)%len(core.Zi),option) for iz in range(0,planes)] for it in range(t_start,t_end)])
    print('array 3 loaded')
    
    #toroidal averaging: phi_tor[it,ip]
    phim_tor = phim.mean(axis=1)
    phi_tor = phi.mean(axis=1)
    phip_tor = phip.mean(axis=1)
    n_tor = n_tot.mean(axis=1)

    #time averaging: phi_av[ip]
    phim_av = phim_tor.mean(axis=0)
    phi_av = phi_tor.mean(axis=0)
    phip_av = phip_tor.mean(axis=0)
    n_av = n_tor.mean(axis=0)
    
    #phi_tilda: dphi[it,iz,ip]
    dphim = np.asarray(phim[:,:,:] - phim_av[np.newaxis,np.newaxis,:])
    dphi = np.asarray(phi[:,:,:] - phi_av[np.newaxis,np.newaxis,:])
    dphip = np.asarray(phip[:,:,:] - phip_av[np.newaxis,np.newaxis,:])
    
    return phim,phi,phip,n_tot,n_av,phim_av,phi_av,phip_av
示例#5
0
def i_heat_N_flux():
    '''Writes on text the Z-component of the exb and parallel ion heat flux.'''
    option = 1
    start = 0
    time_range = 200
    cut = accuracy / 2

    #new_file = open("Norm_i_heat_Fluxes@%s.txt" %(cut),'a')
    new_file = open("Norm_i_heat_Fluxes_Bottom.txt", 'a')
    new_file.write("Eq_exb" + "\t" + "Tur_exb" + "\t" + "Eq_par" + "\t" +
                   "Tur_par" + "\t" + "R" + "\t" + "psi" + "\n")
    br = core.getcutvalue_hor(core.bfield[:, 0], cut, 1)

    temp = np.array(
        [[core.getcutvRvZ(iz, it, cut) for iz in range(core.Nplanes)]
         for it in range(start, start + time_range)])
    VZ_all = temp[:, :, 1, :]
    print("VZ_all done...")
    ne_all = np.array([[
        core.getcutvalue_hor(core.ne[:, iz, it], cut, option)
        for iz in range(core.Nplanes)
    ] for it in range(start, start + time_range)])
    print("ne_all done...")
    Ti_perp_all = np.array([[
        core.map_array(core.i_T_perp, (iz - 1) % core.Nplanes, it, cut)
        for iz in range(core.Nplanes)
    ] for it in range(start, start + time_range)])
    print("Ti_perp_all done...")
    Ei_para_all = np.array([[
        core.map_array(core.i_E_para, (iz - 1) % core.Nplanes, it, cut)
        for iz in range(core.Nplanes)
    ] for it in range(start, start + time_range)])
    print("Ei_para_all done...")
    Vpar_all = np.array([[
        core.map_array(core.e_u_para, (iz - 1) % core.Nplanes, it, cut)
        for iz in range(core.Nplanes)
    ] for it in range(start, start + time_range)])
    print("Vpar_all done...")

    for Flux_ip in range(0, accuracy):
        if math.isnan(br[Flux_ip]) == True:
            pass
        else:
            exb, par = core.i_heat_flux_norm(cut, Flux_ip, VZ_all, ne_all,
                                             Ti_perp_all, Ei_para_all,
                                             Vpar_all)
            R = (Rmin + unitR * Flux_ip)
            psi = core.psii[Flux_ip]
            new_file.write(
                str(exb) + "\t" + str(par) + "\t" + str(R) + "\t" + str(psi) +
                "\n")
    new_file.close()
    return ("Done!")
示例#6
0
文件: Reyn.py 项目: giannisker/XGC
def theta_psi_der(cut):# takes the d/dtheta and d/dpsi derivatives of a phi[it,iz,ip] along a cut. 
    global Zi,Ri,pot,jcut,bfield,B2,unitR
    option=1
    R_len = len(core.Ri)
    if cut==None:
        cut = core.jcut
        
    dZ = core.Zi[1] - core.Zi[0]
    dR = core.Ri[1] - core.Ri[0]
    
    
    phim,phi,phip,n_tot,n_av,phim_av,phi_av,phip_av = phi_tilda(cut)
    
    #d/dZ of total phi
    arrim1 = phim
    arri = phi
    arrip1 = phip    
    darrdZ = (arrip1-arrim1)/(2.*dZ)
    #d/dZ of average phi
    arravm1 = phim_av
    arrav = phi_av
    arravp1 = phip_av    
    darravdZ = (arravp1-arravm1)/(2.*dZ)
    #d/dR of total phi
    arriplus = np.roll(arri,-1,axis=2)
    arriminus = np.roll(arri,1,axis=2)
    darrdR = (arriplus-arriminus)/(2.*dR)
    darrdR[0] = (arri[1]-arri[0])/dR
    darrdR[-1] = (arri[-1]-arri[-2])/dR
    #d/dR of average phi
    arravplus = np.roll(arrav,-1)
    arravminus = np.roll(arrav,1)
    darravdR = (arravplus-arravminus)/(2.*dR)
    darravdR[0] = (arrav[1]-arrav[0])/dR
    darravdR[-1] = (arrav[-1]-arrav[-2])/dR
    
    BRi = core.getcutvalue_hor(core.bfield[:,0],cut,option)
    BZi = core.getcutvalue_hor(core.bfield[:,1],cut,option)
    Bzetai = core.getcutvalue_hor(core.bfield[:,2],cut,option)
    Bp = np.sqrt(np.square(BRi)+np.square(BZi))
    B = np.sqrt(np.square(BRi)+np.square(BZi)+np.square(Bzetai))
    R = np.array([ip*core.unitR+core.Rmin for ip in range(0,R_len)])+core.Rmaj
    
    
    darrdtheta = (1/(Bp))*(BRi*darrdR + BZi*darrdZ)
    darrdpsi = (1/(Bp))*(-BRi*darrdZ + BZi*darrdR)
    darravdtheta = (1/(Bp))*(BRi*darravdR + BZi*darravdZ)
    darravdpsi = (1/(Bp))*(-BRi*darravdZ + BZi*darravdR)
    return -darrdtheta/B, -darrdpsi/B, n_tot, n_av, -darravdtheta/B,-darravdpsi/B
示例#7
0
文件: Reyn.py 项目: giannisker/XGC
def thita_psi_der(arr,cut):# takes the d/dtheta and d/dpsi derivatives of a [Z,R] array along a cut. Returns simple derivatives and divided by B. 
    global Zi,Ri,pot,jcut,bfield,B2,unitR
    option=1
    
    darrdR = R_der(arr)[cut,:]
    darrdZ = Z_der(arr,cut)
    
    BRi = core.getcutvalue_hor(core.bfield[:,0],cut,option)
    BZi = core.getcutvalue_hor(core.bfield[:,1],cut,option)
    Bzetai = core.getcutvalue_hor(core.bfield[:,2],cut,option)
    Bp = np.sqrt(np.square(BRi)+np.square(BZi))
    B = np.sqrt(np.square(BRi)+np.square(BZi)+np.square(Bzetai))
    
    darrdtheta = (1/(Bp))*(-BRi*darrdZ + BZi*darrdR)
    darrdpsi = (1/(Bp))*(BRi*darrdR + BZi*darrdZ)
    return darrdtheta, darrdpsi
示例#8
0
def psi_cont():
    Rmin = core.loader.Rmin
    Rmax = core.loader.Rmax
    Zmin = core.loader.Zmin
    Zmax = core.loader.Zmax
    unitR = (Rmax - Rmin) / 100
    unitZ = (Zmax - Zmin) / 100
    R_points = [ip * unitR + Rmin for ip in range(100)]
    Z_points = [ip * unitZ + Zmin for ip in range(100)]
    psi = []
    for cut in range(100):
        psi.append(core.getcutvalue_hor(core.psin[:], cut, 1))
    psi = np.reshape(psi, (100, 100))
    fig, ax = plt.subplots()
    contour_levels = np.arange(0, 1.7, 0.05)
    CS = plt.contour(R_points, Z_points, psi, contour_levels)
    CB = plt.colorbar(CS, extend='both')
    #plt.clabel(CS, inline=1, fontsize=10)
    plt.xlabel("R(m)")
    plt.ylabel("Z(m)")
    ax.plot(core.loader.RZ[core.sepInds, 0], core.loader.RZ[core.sepInds, 1],
            'k--')
    plt.axhline(y=0.0, color='k', linestyle='--')
    plt.axvline(x=core.Rmaj, color='k', linestyle='--')
    plt.title(r'$\Psi$ contours')
    plt.show()
示例#9
0
文件: banana.py 项目: giannisker/XGC
def contour_banana_plot(R_star, Z_star, W_star):
    '''Contour plot of the normalized toroidal momentum branches, i.e., the banana orbits.'''
    psin_star_p, psin_star_m = psi_star(R_star, Z_star, W_star)
    psi_list = []
    for cut in range(len(core.Zi)):
        psi_list.append(core.getcutvalue_hor(core.psin[:], cut, 1))
    psi_mat = np.reshape(psi_list, (len(core.Ri), len(core.Zi)))
    fig, ax = plt.subplots(figsize=(10, 10))
    contour_levels = np.arange(0.9, 1.2, 0.05)
    CS = plt.contour(R, Z, psi_mat, contour_levels, colors='y')
    #CB = plt.colorbar(CS, extend='both')
    p_levels = np.arange(-0.06468, 1.6884, 0.5)
    m_levels = np.arange(-0.06468, 1.9245, 0.5)
    CP = plt.contour(R, Z, psin_star_p, p_levels, colors='b', linewidths=2)
    CM = plt.contour(R, Z, psin_star_m, m_levels, colors='r', linewidths=2)
    #print("pmax",np.nanmax(psin_star_p))
    #print("pmin",np.nanmin(psin_star_p))
    #print("mmax",np.nanmax(psin_star_m))
    #print("mmin",np.nanmin(psin_star_p))
    #CB = plt.colorbar(CP, extend='both')
    #CD = plt.colorbar(CM, extend='both')
    #plt.clabel(CP, inline=1,fmt='%.2E', fontsize=10)
    plt.xlabel("R(m)")
    plt.ylabel("Z(m)")
    ax.plot(core.loader.RZ[core.sepInds, 0], core.loader.RZ[core.sepInds, 1],
            'k--')
    plt.title('Banana Orbits, $R_\star = %s,\,\, E_i = %s\, eV$' %
              (R_star, W_star))
    plt.show()
示例#10
0
def Particle_N_flux():
    '''Writes on text the Z-component (normal to a horizontal line) of the particle fluxes (exb and parallel components).'''
    option = 1
    start = 0
    time_range = 200
    cut = accuracy / 2

    #new_file = open("Norm_Particle_Fluxes_higher@%s.txt" %(cut),'a')
    new_file = open("Norm_Particle_Fluxes_Top.txt", 'a')
    new_file.write("ExB" + "\t" + "Par" + "\t" + "R" + "\t" + "psi" + "\n")
    br = core.getcutvalue_hor(core.bfield[:, 0], cut, 1)

    #loading arrays
    temp = np.array(
        [[core.getcutvRvZ(iz, it, cut) for iz in range(core.Nplanes)]
         for it in range(start, start + time_range)])
    VZ_all = temp[:, :, 1, :]
    print("VZ_all done...")

    ne_all = np.array([[
        core.getcutvalue_hor(core.ne[:, iz, it], cut, option)
        for iz in range(core.Nplanes)
    ] for it in range(start, start + time_range)])
    print("ne_all done...")

    Vpar_all = np.array([[
        core.map_array(core.e_u_para, (iz - 1) % core.Nplanes, it, cut)
        for iz in range(core.Nplanes)
    ] for it in range(start, start + time_range)])
    print("Vpar_all done...")

    for Flux_ip in range(0, accuracy):
        if math.isnan(br[Flux_ip]) == True:
            pass
        else:
            exb, par = core.particle_fluxes_norm(cut, Flux_ip, ne_all, VZ_all,
                                                 Vpar_all)
            R = (Rmin + unitR * Flux_ip)
            psi = core.psii[Flux_ip]
            new_file.write(
                str(exb) + "\t" + str(par) + "\t" + str(R) + "\t" + str(psi) +
                "\n")
    new_file.close()
    return ("Done!")
示例#11
0
def e_mag_heat_N_flux():
    '''Writes on text the Z-component of the magnetic drifts electron heat flux.'''
    option = 1
    start = 0
    time_range = 200
    cut = accuracy / 2

    #new_file = open("Norm_e_mag_heat_Fluxes@%s.txt" %(cut),'a')
    new_file = open("Norm_e_mag_heat_Fluxes_Top.txt", 'a')
    new_file.write("Magnetic" + "\t" + "R" + "\t" + "psi" + "\n")
    br = core.getcutvalue_hor(core.bfield[:, 0], cut, 1)

    ne_all = np.array([[
        core.getcutvalue_hor(core.ne[:, iz, it], cut, option)
        for iz in range(core.Nplanes)
    ] for it in range(start, start + time_range)])
    print("ne_all done...")
    Te_perp_all = np.array([[
        core.map_array(core.e_T_perp, (iz - 1) % core.Nplanes, it, cut)
        for iz in range(core.Nplanes)
    ] for it in range(start, start + time_range)])
    print("Te_perp_all done...")
    Ee_para_all = np.array([[
        core.map_array(core.e_E_para, (iz - 1) % core.Nplanes, it, cut)
        for iz in range(core.Nplanes)
    ] for it in range(start, start + time_range)])
    print("Ee_para_all done...")

    for Flux_ip in range(0, accuracy):
        if math.isnan(br[Flux_ip]) == True:
            pass
        else:
            mag = core.mag_e_heat_flux_norm(cut, Flux_ip, ne_all, Te_perp_all,
                                            Ee_para_all)
            R = (Rmin + unitR * Flux_ip)
            psi = core.psii[Flux_ip]
            new_file.write(str(mag) + "\t" + str(R) + "\t" + str(psi) + "\n")
    new_file.close()
    return ("Done!")
示例#12
0
def write_mat():
    B_R = np.array([
        core.getcutvalue_hor(core.bfield[:, 0], cut, 1)
        for cut in range(0, len(L))
    ])
    B_Z = np.array([
        core.getcutvalue_hor(core.bfield[:, 1], cut, 1)
        for cut in range(0, len(L))
    ])
    B_zeta = np.array([
        core.getcutvalue_hor(core.bfield[:, 2], cut, 1)
        for cut in range(0, len(L))
    ])
    ne_all = np.array([[[
        core.getcutvalue_hor(core.ne[:, iz, it], cut, 1)
        for iz in range(0, core.Nplanes)
    ] for cut in range(0, len(L))] for it in range(0, 889)])
    #pot_all = np.array([[[core.getcutvalue_hor(core.pot[:,iz,it],cut,1) for iz in range(0,core.Nplanes)]for cut in range(0,len(L))] for it in range(490,690)])
    np.save(trgt + 'B_R_mid_CMOD', B_R)
    np.save(trgt + 'B_Z_mid_CMOD', B_Z)
    np.save(trgt + 'B_zeta_mid_CMOD', B_zeta)
    np.save(trgt + 'ne_mid_CMOD', ne_all)
示例#13
0
文件: banana.py 项目: giannisker/XGC
def loading_fun():
    '''Function that reads the 2D values of psin,R,B,Bp,b_zeta and phi.'''
    global psin, unitR, unitZ, phi, B, Bp, Bzetai, R, Z, Rmin, Rmax, Zmin, Zmax
    option = 1
    Rmax = np.amax(core.RZ[:, 0])
    Rmin = np.amin(core.RZ[:, 0])
    Zmax = np.amax(core.RZ[:, 1])
    Zmin = np.amin(core.RZ[:, 1])
    unitR = (Rmax - Rmin) / len(core.Ri)
    unitZ = (Zmax - Zmin) / len(core.Zi)

    phi = np.asarray([[
        core.getcutvalue_hor(core.pot[:, iz, 0], cut, option)
        for iz in range(0, core.Nplanes)
    ] for cut in range(0, len(core.Zi))]).mean(axis=1)
    psin = np.asarray([
        core.getcutvalue_hor(core.psin[:], cut, option)
        for cut in range(0, len(core.Zi))
    ])
    BRi = np.asarray([
        core.getcutvalue_hor(core.bfield[:, 0], cut, option)
        for cut in range(0, len(core.Zi))
    ])
    BZi = np.asarray([
        core.getcutvalue_hor(core.bfield[:, 1], cut, option)
        for cut in range(0, len(core.Zi))
    ])
    Bzetai = np.asarray([
        core.getcutvalue_hor(core.bfield[:, 2], cut, option)
        for cut in range(0, len(core.Zi))
    ])
    Bp = np.sqrt(np.square(BRi) + np.square(BZi))
    B = np.sqrt(np.square(BRi) + np.square(BZi) + np.square(Bzetai))
    R = np.array([ip * unitR + Rmin for ip in range(0, len(core.Zi))])
    Z = np.array([ip * unitZ + Zmin for ip in range(0, len(core.Zi))])

    return psin, phi, B, Bp, Bzetai, R, Z
示例#14
0
def shear(
    it, cut
):  #takes the d/dpsi of E_psi/RBp and multiplies with (RBp)^2/B to find the shear.
    '''Calculates the Burrell shear along a cut at a particular time.'''
    option = 1
    c = 3.0e8
    dZ = core.Zi[1] - core.Zi[0]
    dR = core.Ri[1] - core.Ri[0]

    unitR = (core.loader.Rmax - core.loader.Rmin) / len(core.Ri)

    dphidpsi = two_d_psi_der(it)

    arrim1 = dphidpsi[(cut - 1) % len(core.Zi), :]
    arri = dphidpsi[cut, :]
    arrip1 = dphidpsi[(cut + 1) % len(core.Zi), :]
    darrdZ = (arrip1 - arrim1) / (2. * dZ)

    arriplus = np.roll(arri, -1)
    arriminus = np.roll(arri, 1)
    darrdR = (arriplus - arriminus) / (2. * dR)
    darrdR[0] = (arri[1] - arri[0]) / dR
    darrdR[-1] = (arri[-1] - arri[-2]) / dR

    BRi = core.getcutvalue_hor(core.bfield[:, 0], cut, option)
    BZi = core.getcutvalue_hor(core.bfield[:, 1], cut, option)
    Bzetai = core.getcutvalue_hor(core.bfield[:, 2], cut, option)
    Bp = np.sqrt(np.square(BRi) + np.square(BZi))
    Bmag = np.sqrt(np.square(BRi) + np.square(BZi) + np.square(Bzetai))
    L = np.array([x for x in range(0, len(core.Ri))])
    R = np.array(
        [L[ip] * unitR + core.loader.Rmin
         for ip in range(0, len(core.Ri))]) + core.Rmaj

    doubledpsi = (1 / Bp) * (BRi * darrdZ - BZi * darrdR)
    Shear = ((np.square(R) * np.square(Bp)) / Bmag) * doubledpsi
    return Shear
示例#15
0
def pot0_contour_plot(time):
    pot0_all = np.array([
        core.getcutvalue_hor(core.pot0[:, time], cut, 1)
        for cut in range(0, 100)
    ])
    fig, ax = plt.subplots()
    CS = plt.contourf(R_points, Z_points, pot0_all)
    CB = plt.colorbar(CS, extend='both')
    plt.clabel(CS, inline=1, fmt='%.2E', fontsize=10)
    plt.xlabel("R(m)")
    plt.ylabel("Z(m)")
    ax.plot(core.loader.RZ[core.sepInds, 0], core.loader.RZ[core.sepInds, 1],
            'k--')
    plt.title('Pot0 Contours, t=%d' % (time))
    plt.show()
示例#16
0
def av_pot0_contour_plot():
    pot0_all = np.array([[
        core.getcutvalue_hor(core.pot0[:, time], cut, 1)
        for cut in range(0, 100)
    ] for time in range(500, 650)])
    pot0_av = pot0_all.mean(axis=0)
    fig, ax = plt.subplots()
    CS = plt.contourf(R_points, Z_points, pot0_av)
    CB = plt.colorbar(CS, extend='both')
    plt.clabel(CS, inline=1, fmt='%.2E', fontsize=10)
    plt.xlabel("R(m)")
    plt.ylabel("Z(m)")
    ax.plot(core.loader.RZ[core.sepInds, 0], core.loader.RZ[core.sepInds, 1],
            'k--')
    plt.title('Averaged Pot0 Contours')
    plt.show()
示例#17
0
def X_den():
    '''Writes on text the density on a line at the X-point.'''

    cut = accuracy / 2
    new_file = open("density_LFS@%s.txt" % (cut), 'a')
    new_file.write("den" + "\t" + "R" + "\t" + "psi" + "\n")
    br = core.getcutvalue_hor(core.bfield[:, 0], cut, 1)
    for Flux_ip in range(0, accuracy):
        if math.isnan(br[Flux_ip]) == True:
            pass
        else:
            _, _, _, _, n = core.norm_parallel_flux(cut, Flux_ip)
            R = (Rmin + unitR * Flux_ip)
            psi = core.psii[Flux_ip]
            new_file.write(str(n) + "\t" + str(R) + "\t" + str(psi) + "\n")
    new_file.close()
    return ("Done!")
示例#18
0
文件: E_field.py 项目: giannisker/XGC
def z_variation_E_r_field(iz, it, cut):
    global Zi, Ri, pot
    option = 1
    if cut == None:
        cut = core.jcut
    dZ = core.Zi[1] - core.Zi[0]
    dR = core.Ri[1] - core.Ri[0]
    Sep_ip = core.getiparrs_hor(0.95, 1., core.jcut)[-1]

    field_value = []
    for cut_plane in range(cut - 20, cut + 20):
        # dphi/dR
        dphidR_N = []
        lengthR = len(
            core.getcutvalue_hor(core.pot[:, iz, it], cut_plane, option))
        iterlistR = list(range(0, lengthR))
        potrm10 = core.getcutvalue_hor(core.pot[:, iz, it], cut_plane,
                                       option)[lengthR - 1]
        potrp10 = core.getcutvalue_hor(core.pot[:, iz, it], cut_plane,
                                       option)[1]
        dphidR_N.append(-(potrp10 - potrm10) / (2. * dR))
        for i in iterlistR[1:-1]:
            potrm1 = core.getcutvalue_hor(core.pot[:, iz, it], cut_plane,
                                          option)[i - 1]
            potrp1 = core.getcutvalue_hor(core.pot[:, iz, it], cut_plane,
                                          option)[i + 1]
            dphidR_N.append(-(potrp1 - potrm1) / (2. * dR))
        potrm1L = core.getcutvalue_hor(core.pot[:, iz, it], cut_plane,
                                       option)[lengthR - 2]
        potrp1L = core.getcutvalue_hor(core.pot[:, iz, it], cut_plane,
                                       option)[0]
        dphidR_N.append(-(potrp1L - potrm1L) / 2 * dR)
        field_value.append(dphidR_N[Sep_ip - 1])

    #Plotting
    L = np.array([x for x in range(0, len(field_value))])
    unit = (core.Zmax - core.Zmin) / 100
    R = np.array(
        [L[ip] * unit + core.Zmin for ip in range(0, len(field_value))])
    plt.title('Local $E_r$-field at a vertical line')
    plt.xlabel('$Z(m)$')
    plt.ylabel('$E_r$')
    plt.plot(R[:], field_value[:], 'go')
    plt.legend()
    plt.show()
示例#19
0
文件: E_field.py 项目: giannisker/XGC
def Radial_E_field(iz, it, cut):
    global Zi, Ri, pot
    option = 1
    if cut == None:
        cut = core.jcut
    dZ = core.Zi[1] - core.Zi[0]
    dR = core.Ri[1] - core.Ri[0]
    Sep_ip = core.getiparrs_hor(0.95, 1., core.jcut)[-1]

    # dphi/dR
    dphidR_N = []
    lengthR = len(core.getcutvalue_hor(core.pot[:, iz, it], cut, option))
    iterlistR = list(range(0, lengthR))
    potrm10 = core.getcutvalue_hor(core.pot[:, iz, it], cut,
                                   option)[lengthR - 1]
    potrp10 = core.getcutvalue_hor(core.pot[:, iz, it], cut, option)[1]
    dphidR_N.append(-(potrp10 - potrm10) / (2. * dR))
    for i in iterlistR[1:-1]:
        potrm1 = core.getcutvalue_hor(core.pot[:, iz, it], cut, option)[i - 1]
        potrp1 = core.getcutvalue_hor(core.pot[:, iz, it], cut, option)[i + 1]
        dphidR_N.append(-(potrp1 - potrm1) / (2. * dR))
    potrm1L = core.getcutvalue_hor(core.pot[:, iz, it], cut,
                                   option)[lengthR - 2]
    potrp1L = core.getcutvalue_hor(core.pot[:, iz, it], cut, option)[0]
    dphidR_N.append(-(potrp1L - potrm1L) / 2 * dR)

    #Plotting
    L = np.array([x for x in range(0, len(dphidR_N))])
    unit = (core.Rmax - core.Rmin) / 100
    R = np.array([L[ip] * unit + core.Rmin for ip in range(0, len(dphidR_N))])
    plt.title('Radial E-field')
    plt.xlabel('$R(m)$')
    plt.ylabel('$E_r$')
    plt.plot(R[:], dphidR_N[:], 'go')
    plt.axvline(x=Sep_ip * unit + core.Rmin,
                color='b',
                linestyle='dashed',
                linewidth=2)
    plt.legend()
    plt.show()
示例#20
0
def psi_der(arr, it,
            cut):  #takes the d/dpsi on the potential and divides by RBp
    '''Takes a single derivative wrt psi along a cut.'''
    option = 1
    if cut == None:
        cut = core.jcut

    dZ = core.Zi[1] - core.Zi[0]
    dR = core.Ri[1] - core.Ri[0]

    unitR = (core.loader.Rmax - core.loader.Rmin) / len(core.Ri)
    unitZ = (core.loader.Zmax - core.loader.Zmin) / len(core.Zi)

    arrim1 = np.asarray([
        core.getcutvalue_hor(arr[:, iz, it], (cut - 1) % len(core.Zi), option)
        for iz in range(0, core.Nplanes)
    ]).mean(axis=0)
    arri = np.asarray([
        core.getcutvalue_hor(arr[:, iz, it], cut, option)
        for iz in range(0, core.Nplanes)
    ]).mean(axis=0)
    arrip1 = np.asarray([
        core.getcutvalue_hor(arr[:, iz, it], (cut + 1) % len(core.Zi), option)
        for iz in range(0, core.Nplanes)
    ]).mean(axis=0)
    darrdZ = (arrip1 - arrim1) / (2. * dZ)

    arriplus = np.roll(arri, -1)
    arriminus = np.roll(arri, 1)
    darrdR = (arriplus - arriminus) / (2. * dR)
    darrdR[0] = (arri[1] - arri[0]) / dR
    darrdR[-1] = (arri[-1] - arri[-2]) / dR

    BRi = core.getcutvalue_hor(core.bfield[:, 0], cut, option)
    BZi = core.getcutvalue_hor(core.bfield[:, 1], cut, option)
    Bzetai = core.getcutvalue_hor(core.bfield[:, 2], cut, option)
    Bp = np.sqrt(np.square(BRi) + np.square(BZi))
    L = np.array([x for x in range(0, len(core.Ri))])
    R = np.array(
        [L[ip] * unitR + core.loader.Rmin
         for ip in range(0, len(core.Ri))]) + core.Rmaj

    darrdpsi = (1 / Bp) * (BRi * darrdZ - BZi * darrdR)
    return -darrdpsi / (R * Bp)
示例#21
0
def write_turb():
    pot_all = np.array([[[
        core.getcutvalue_hor(core.pot[:, iz, it], cut, 1)
        for iz in range(0, core.Nplanes)
    ] for cut in range(0, len(L))] for it in range(490, 690)])
    np.save('pot_turb_region', pot_all)