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()
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!")
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()
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
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!")
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
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
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()
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()
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!")
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!")
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)
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
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
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()
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()
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!")
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()
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()
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)
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)