nx = 64 ny = 64 xmin = -20.e-6 ymin = -20.e-6 xmax = +20.e-6 ymax = +20.e-6 uniform_plasma = picmi.UniformDistribution( density=1.e25, upper_bound=[0., None, None], directed_velocity=[0.1 * constants.c, 0., 0.]) electrons = picmi.Species(particle_type='electron', name='electrons', initial_distribution=uniform_plasma) grid = picmi.Cartesian2DGrid( number_of_cells=[nx, ny], lower_bound=[xmin, ymin], upper_bound=[xmax, ymax], lower_boundary_conditions=['periodic', 'periodic'], upper_boundary_conditions=['periodic', 'periodic'], moving_window_velocity=[0., 0., 0.], warpx_max_grid_size=32) solver = picmi.ElectromagneticSolver(grid=grid, cfl=1.) sim = picmi.Simulation(solver=solver, max_steps=40,
uniform_plasma_elec = picmi.UniformDistribution( density = PLASMA_DENSITY, upper_bound = [None] * 3, rms_velocity = [v_rms_elec] * 3, directed_velocity = [0.] * 3 ) uniform_plasma_ion = picmi.UniformDistribution( density = PLASMA_DENSITY, upper_bound = [None] * 3, rms_velocity = [v_rms_ion] * 3, directed_velocity = [0.] * 3 ) electrons = picmi.Species( particle_type='electron', name='electrons', initial_distribution=uniform_plasma_elec ) ions = picmi.Species( particle_type='He', name='he_ions', charge='q_e', initial_distribution=uniform_plasma_ion ) # MCC collisions cross_sec_direc = '../../../../warpx-data/MCC_cross_sections/He/' mcc_electrons = picmi.MCCCollisions( name='coll_elec', species=electrons, background_density=N_INERT, background_temperature=T_INERT, background_mass=ions.mass,
solver = picmi.ElectromagneticSolver(grid=grid, cfl=1) beam_distribution = picmi.UniformDistribution( density=1.e23, lower_bound=[-20.e-6, -20.e-6, -150.e-6], upper_bound=[+20.e-6, +20.e-6, -100.e-6], directed_velocity=[0., 0., 1.e9]) plasma_distribution = picmi.UniformDistribution( density=1.e22, lower_bound=[-200.e-6, -200.e-6, 0.], upper_bound=[+200.e-6, +200.e-6, None], fill_in=True) beam = picmi.Species(particle_type='electron', name='beam', initial_distribution=beam_distribution) plasma = picmi.Species(particle_type='electron', name='plasma', initial_distribution=plasma_distribution) sim = picmi.Simulation(solver=solver, max_steps=1000, verbose=1, warpx_plot_int=2, warpx_current_deposition_algo=3, warpx_charge_deposition_algo=0, warpx_field_gathering_algo=0, warpx_particle_pusher_algo=0) sim.add_species(beam,
############ PLASMA ############# ################################# elec_dist = picmi.UniformDistribution( density=plasma_density, rms_velocity=[elec_rms_velocity] * 3, directed_velocity=[elec_rms_velocity, 0., 0.]) ion_dist = picmi.UniformDistribution( density=plasma_density, rms_velocity=[ion_rms_velocity] * 3, ) electrons = picmi.Species( particle_type='electron', name='electron', warpx_do_not_deposit=1, initial_distribution=elec_dist, ) ions = picmi.Species(particle_type='H', name='ion', charge='q_e', mass="5*m_e", warpx_do_not_deposit=1, initial_distribution=ion_dist) ################################# ########## COLLISIONS ########### ################################# collision1 = picmi.CoulombCollisions(name='collisions1', species=[electrons, ions],
########################## # physics components ########################## uniform_plasma_elec = picmi.UniformDistribution( density=1e23, # number of electrons per m^3 lower_bound=[-1e-5, -1e-5, -149e-6], upper_bound=[1e-5, 1e-5, -129e-6], directed_velocity=[0., 0., 2000. * picmi.constants.c ] # uth the std of the (unitless) momentum ) electrons = picmi.Species(particle_type='electron', name='electrons', initial_distribution=uniform_plasma_elec, warpx_save_particles_at_xhi=1, warpx_save_particles_at_eb=1) ########################## # numerics components ########################## grid = picmi.Cartesian3DGrid( number_of_cells=[nx, ny, nz], lower_bound=[xmin, ymin, zmin], upper_bound=[xmax, ymax, zmax], lower_boundary_conditions=['none', 'none', 'none'], upper_boundary_conditions=['none', 'none', 'none'], lower_boundary_conditions_particles=['open', 'open', 'open'], upper_boundary_conditions_particles=['open', 'open', 'open'],
grid=grid, cfl=1., stencil_order=[em_order, em_order, em_order]) electron_beam = picmi.GaussianBunchDistribution( n_physical_particles=total_charge / constants.q_e, rms_bunch_size=[beam_rms_size, beam_rms_size, beam_rms_size], velocity_divergence=[ electron_beam_divergence, electron_beam_divergence, electron_beam_divergence ]) proton_beam = picmi.GaussianBunchDistribution( n_physical_particles=total_charge / constants.q_e, rms_bunch_size=[beam_rms_size, beam_rms_size, beam_rms_size]) electrons = picmi.Species(particle_type='electron', name='electrons', initial_distribution=electron_beam) protons = picmi.Species(particle_type='proton', name='protons', initial_distribution=proton_beam) field_diag1 = picmi.FieldDiagnostic( name='diag1', grid=grid, period=10, data_list=args.fields_to_plot, warpx_format=args.diagformat, write_dir='.', warpx_file_prefix='Python_gaussian_beam_plt') part_diag1 = picmi.ParticleDiagnostic(name='diag1',
upper_boundary_conditions_particles=[ 'absorbing', 'absorbing', 'absorbing' ]) # Particles vel_z = 0.5 * c multiparticles_distribution = picmi.ParticleListDistribution(x=[0.05, 0.], y=[0., 0.04], z=[0.05, 0.05], ux=[0., 0.], uy=[0., 0.], uz=[vel_z, vel_z], weight=[1., 1.]) electrons = picmi.Species(particle_type='electron', name='electrons', initial_distribution=multiparticles_distribution) # Plasma lenses plasma_lenses = picmi.PlasmaLens( period=0.5, starts=[0.1, 0.11, 0.12, 0.13], lengths=[0.1, 0.11, 0.12, 0.13], strengths_E=[600000., 800000., 600000., 200000.], strengths_B=[0.0, 0.0, 0.0, 0.0]) # Electromagnetic solver solver = picmi.ElectromagneticSolver(grid=grid, method='Yee', cfl=0.7) # Diagnostics part_diag1 = picmi.ParticleDiagnostic(
upper_boundary_conditions_particles = ['absorbing', 'periodic'], moving_window_velocity = None, warpx_max_grid_size = 32 ) solver = picmi.ElectrostaticSolver( grid=grid, method='Multigrid', required_precision=1e-6, warpx_self_fields_verbosity=0 ) ########################## # physics components ########################## electrons = picmi.Species( particle_type='electron', name='electrons' ) ########################## # diagnostics ########################## field_diag = picmi.FieldDiagnostic( name = 'diag1', grid = grid, period = 10, data_list = ['phi'], write_dir = '.', warpx_file_prefix = f'Python_particle_attr_access_plt_{color}' )
# Particles: plasma electrons plasma_density = 2e23 plasma_xmin = -20e-06 plasma_ymin = None plasma_zmin = 10e-06 plasma_xmax = 20e-06 plasma_ymax = None plasma_zmax = None uniform_distribution = picmi.UniformDistribution( density=plasma_density, lower_bound=[plasma_xmin, plasma_ymin, plasma_zmin], upper_bound=[plasma_xmax, plasma_ymax, plasma_zmax], fill_in=True) electrons = picmi.Species(particle_type='electron', name='electrons', initial_distribution=uniform_distribution) # Particles: beam electrons q_tot = 1e-12 x_m = 0. y_m = 0. z_m = -28e-06 x_rms = 0.5e-06 y_rms = 0.5e-06 z_rms = 0.5e-06 ux_m = 0. uy_m = 0. uz_m = 500. ux_th = 2. uy_th = 2.
########################## # physics components ########################## uniform_plasma_elec = picmi.UniformDistribution( density = 1e15, # number of electrons per m^3 lower_bound = [-1e-5, -1e-5, -125e-6], upper_bound = [1e-5, 1e-5, -120e-6], directed_velocity = [0., 0., 5e6] # uth the std of the (unitless) momentum ) electrons = picmi.Species( particle_type='electron', name='electrons', initial_distribution=uniform_plasma_elec, warpx_save_particles_at_zhi=1, warpx_save_particles_at_zlo=1, warpx_reflection_model_zhi="0.5" ) ########################## # diagnostics ########################## field_diag = picmi.ParticleDiagnostic( species=electrons, name = 'diag1', data_list=['previous_positions'], period = 10, write_dir = '.', warpx_file_prefix = 'Python_particle_reflection_plt'
) ########################## # physics components ########################## uniform_plasma_elec = picmi.UniformDistribution( density = 1e15, upper_bound = [None] * 3, rms_velocity = [np.sqrt(constants.kb * 1e3 / constants.m_e)] * 3, directed_velocity = [0.] * 3 ) electrons = picmi.Species( particle_type='electron', name='electrons', initial_distribution=uniform_plasma_elec, warpx_save_previous_position=True ) ########################## # diagnostics ########################## field_diag = picmi.ParticleDiagnostic( species=electrons, name = 'diag1', data_list=['previous_positions'], period = 10, write_dir = '.', warpx_file_prefix = 'Python_prev_positions_plt' )
def setup_run(self): """Setup simulation components.""" ####################################################################### # Set geometry and boundary conditions # ####################################################################### self.grid = picmi.Cartesian1DGrid( number_of_cells=[self.nz], warpx_max_grid_size=128, lower_bound=[0], upper_bound=[self.gap], lower_boundary_conditions=['dirichlet'], upper_boundary_conditions=['dirichlet'], lower_boundary_conditions_particles=['absorbing'], upper_boundary_conditions_particles=['absorbing'], warpx_potential_hi_z=self.voltage, ) ####################################################################### # Field solver # ####################################################################### self.solver = picmi.ElectrostaticSolver(grid=self.grid, method='Multigrid', required_precision=1e-12, warpx_self_fields_verbosity=0) ####################################################################### # Particle types setup # ####################################################################### self.electrons = picmi.Species( particle_type='electron', name='electrons', initial_distribution=picmi.UniformDistribution( density=self.plasma_density, rms_velocity=[ np.sqrt(constants.kb * self.elec_temp / constants.m_e) ] * 3, )) self.ions = picmi.Species( particle_type='He', name='he_ions', charge='q_e', mass=self.m_ion, initial_distribution=picmi.UniformDistribution( density=self.plasma_density, rms_velocity=[ np.sqrt(constants.kb * self.gas_temp / self.m_ion) ] * 3, )) ####################################################################### # Collision initialization # ####################################################################### cross_sec_direc = '../../../../warpx-data/MCC_cross_sections/He/' mcc_electrons = picmi.MCCCollisions( name='coll_elec', species=self.electrons, background_density=self.gas_density, background_temperature=self.gas_temp, background_mass=self.ions.mass, scattering_processes={ 'elastic': { 'cross_section': cross_sec_direc + 'electron_scattering.dat' }, 'excitation1': { 'cross_section': cross_sec_direc + 'excitation_1.dat', 'energy': 19.82 }, 'excitation2': { 'cross_section': cross_sec_direc + 'excitation_2.dat', 'energy': 20.61 }, 'ionization': { 'cross_section': cross_sec_direc + 'ionization.dat', 'energy': 24.55, 'species': self.ions }, }) mcc_ions = picmi.MCCCollisions( name='coll_ion', species=self.ions, background_density=self.gas_density, background_temperature=self.gas_temp, scattering_processes={ 'elastic': { 'cross_section': cross_sec_direc + 'ion_scattering.dat' }, 'back': { 'cross_section': cross_sec_direc + 'ion_back_scatter.dat' }, # 'charge_exchange' : { # 'cross_section' : cross_sec_direc+'charge_exchange.dat' # } }) ####################################################################### # Initialize simulation # ####################################################################### self.sim = picmi.Simulation( solver=self.solver, time_step_size=self.dt, max_steps=self.max_steps, warpx_collisions=[mcc_electrons, mcc_ions], warpx_load_balance_intervals=self.max_steps // 5000, verbose=self.test) self.sim.add_species(self.electrons, layout=picmi.GriddedLayout( n_macroparticle_per_cell=[self.seed_nppc], grid=self.grid)) self.sim.add_species(self.ions, layout=picmi.GriddedLayout( n_macroparticle_per_cell=[self.seed_nppc], grid=self.grid)) ####################################################################### # Add diagnostics for the CI test to be happy # ####################################################################### field_diag = picmi.FieldDiagnostic( name='diag1', grid=self.grid, period=0, data_list=['rho_electrons', 'rho_he_ions'], write_dir='.', warpx_file_prefix='Python_background_mcc_1d_plt') self.sim.add_diagnostic(field_diag)