def _extract_current_results(data, curr, data_time): grid = data['models']['simulationGrid'] plate_spacing = _meters(grid['plate_spacing']) zmesh = np.linspace(0, plate_spacing, grid['num_z'] + 1) #holds the z-axis grid points in an array beam = data['models']['beam'] if _SIM_DATA.warpvnd_is_3d(data): cathode_area = _meters(grid['channel_width']) * _meters(grid['channel_height']) else: cathode_area = _meters(grid['channel_width']) RD_ideal = sources.j_rd(beam['cathode_temperature'], beam['cathode_work_function']) * cathode_area JCL_ideal = sources.cl_limit(beam['cathode_work_function'], beam['anode_work_function'], beam['anode_voltage'], plate_spacing) * cathode_area if beam['currentMode'] == '2' or (beam['currentMode'] == '1' and beam['beam_current'] >= JCL_ideal): curr2 = np.full_like(zmesh, JCL_ideal) y2_title = 'Child-Langmuir cold limit' else: curr2 = np.full_like(zmesh, RD_ideal) y2_title = 'Richardson-Dushman' return { 'title': 'Current for Time: {:.4e}s'.format(data_time), 'x_range': [0, plate_spacing], 'y_label': 'Current [A]', 'x_label': 'Z [m]', 'points': [ curr.tolist(), curr2.tolist(), ], 'x_points': zmesh.tolist(), 'y_range': [min(np.min(curr), np.min(curr2)), max(np.max(curr), np.max(curr2))], 'y1_title': 'Current', 'y2_title': y2_title, }
def _extract_current_results(data, curr, data_time): grid = data['models']['simulationGrid'] plate_spacing = _meters(grid['plate_spacing']) zmesh = np.linspace(0, plate_spacing, grid['num_z'] + 1) #holds the z-axis grid points in an array beam = data['models']['beam'] if data.models.simulationGrid.simulation_mode == '3d': cathode_area = _meters(grid['channel_width']) * _meters(grid['channel_height']) else: cathode_area = _meters(grid['channel_width']) RD_ideal = sources.j_rd(beam['cathode_temperature'], beam['cathode_work_function']) * cathode_area JCL_ideal = sources.cl_limit(beam['cathode_work_function'], beam['anode_work_function'], beam['anode_voltage'], plate_spacing) * cathode_area if beam['currentMode'] == '2' or (beam['currentMode'] == '1' and beam['beam_current'] >= JCL_ideal): curr2 = np.full_like(zmesh, JCL_ideal) y2_title = 'Child-Langmuir cold limit' else: curr2 = np.full_like(zmesh, RD_ideal) y2_title = 'Richardson-Dushman' return { 'title': 'Current for Time: {:.4e}s'.format(data_time), 'x_range': [0, plate_spacing], 'y_label': 'Current [A]', 'x_label': 'Z [m]', 'points': [ curr.tolist(), curr2.tolist(), ], 'x_points': zmesh.tolist(), 'y_range': [min(np.min(curr), np.min(curr2)), max(np.max(curr), np.max(curr2))], 'y1_title': 'Current', 'y2_title': y2_title, }
# # The `rswarp` repository has been updated with a cathode module to streamline the designation of cathode sources via each of these three methods. Below we will demonstrate their use and provide a simple template. #Cathode and anode settings CATHODE_TEMP = 1273.15 #1100. #1273.15 #1000. #cathode temperature in K CATHODE_PHI = 2.0 #work function in eV ANODE_WF = 0.1 GRID_BIAS = 0.4 #voltage applied to any grid of electrodes vacuum_level = CATHODE_PHI - ANODE_WF + GRID_BIAS #compute beam cutoff velocity for time-step determinance beam_beta = sources.compute_cutoff_beta(CATHODE_TEMP) #Compute Child-Langmuir limit for this setup A/m^2 cl_limit = sources.cl_limit(CATHODE_PHI, ANODE_WF, GRID_BIAS, PLATE_SPACING) #INJECTION SPECIFICATION USER_INJECT = 2 # --- Setup simulation species beam = Species(type=Electron, name='beam') # --- Set basic beam parameters SOURCE_RADIUS_1 = 0.5 * CHANNEL_WIDTH #a0 parameter - X plane SOURCE_RADIUS_2 = 0.5 * CHANNEL_WIDTH #b0 parameter - Y plane Z_PART_MIN = dz / 8. #starting particle z value #Compute cathode area for geomtry-specific current calculations if (w3d.solvergeom == w3d.XYZgeom): #For 3D cartesion geometry only
# # The `rswarp` repository has been updated with a cathode module to streamline the designation of cathode sources via each of these three methods. Below we will demonstrate their use and provide a simple template. #Cathode and anode settings CATHODE_TEMP = 1273.15 #1100. #1273.15 #1000. #cathode temperature in K CATHODE_PHI = 2.0 #work function in eV ANODE_WF = 0.1 GRID_BIAS = 0.4 #voltage applied to any grid of electrodes vacuum_level = CATHODE_PHI - ANODE_WF + GRID_BIAS #compute beam cutoff velocity for time-step determinance beam_beta = sources.compute_cutoff_beta(CATHODE_TEMP) #Compute Child-Langmuir limit for this setup A/m^2 cl_limit = sources.cl_limit(CATHODE_PHI, ANODE_WF, GRID_BIAS, PLATE_SPACING) #INJECTION SPECIFICATION USER_INJECT = 1 # --- Setup simulation species beam = Species(type=Electron, name='beam') # --- Set basic beam parameters SOURCE_RADIUS_1 = 0.5*CHANNEL_WIDTH #a0 parameter - X plane SOURCE_RADIUS_2 = 0.5*CHANNEL_WIDTH #b0 parameter - Y plane Z_PART_MIN = dz/8. #starting particle z value #Compute cathode area for geomtry-specific current calculations