Warwick-Plasma / epoch

Particle-in-cell code for plasma physics simulations
https://epochpic.github.io
GNU General Public License v3.0
176 stars 56 forks source link

How to set up a vortex electron beam in the injector block? #576

Open qiqi77346 opened 11 months ago

qiqi77346 commented 11 months ago

Hello, everyone, How to set up a vortex electron beam in the injector block? I can‘t find vortex about orbital angular momentum in the Users Manual of EPOCH. The following is a example about injector block, but don't setting up electron orbital angular momentum. How to set up orbital angular momentum of electrons?

begin:control nx = 128 ny = 128

Final time of simulation

t_end = 3.0e-1

Size of domain

x_min = 0 x_max = 2.5e5 y_min = -2.5e5 y_max = 2.5e5 stdout_frequency = 1000 end:control

begin:boundaries bc_x_min = periodic bc_x_max = periodic bc_y_min = periodic bc_y_max = periodic end:boundaries

begin:constant drift_p = 2.5e-24 temperature = 273 dens = 1 ppc = 8 end:constant

begin:injector boundary = x_min species = Beam number_density = dens temperature = temperature drift_px = drift_p nparticles_per_cell = ppc end:injector

begin:species

Background electrons (immobile ions)

name = Background charge = -1 mass = 1.0 temperature = temperature drift_px = -drift_p / 1000 number_density = dens 1000 nparticles = ppc nx * ny end:species

begin:species

Beam

name = Beam charge = -1 mass = 1.0

temperature_x = temperature

drift_px = drift_p

number_density = dens

bc_x_min = simple_outflow bc_x_max = simple_outflow end:species

begin:output name = normal

Simulated time between output dumps

dt_snapshot = 0.5e-2 dump_last = T

Properties at particle positions

particles = always

px = always

Properties on grid

grid = always ex = always ey = always ez = always bx = always by = always bz = always jx = always ppc = always + species

average_particle_energy = always

mass_density = never + species

charge_density = always number_density = always + species

temperature = always + species

Extended io

distribution_functions = always end:output

begin:dist_fn name = x_px ndims = 2

direction1 = dir_x direction2 = dir_px

Range is ignored for spatial coordinates

range1 = (1, 1) range2 = (-5e-24, 5e-24)

Resolution is ignored for spatial coordinates

resolution1 = 1 resolution2 = 200

include_species:Beam include_species:Background end:dist_fn

Status-Mirror commented 11 months ago

Hey @qiqi77346,

You have a 2D simulation here, so I'm guessing you want to model rotating momentum in the $xy$ plane? Are you asking to set up particles with momenta rotating about the central point in the simulation, something like this diagram:

Screenshot from 2023-10-31 15-04-11

Cheers, Stuart

qiqi77346 commented 11 months ago

Hey @qiqi77346,

You have a 2D simulation here, so I'm guessing you want to model rotating momentum in the xy plane? Are you asking to set up particles with momenta rotating about the central point in the simulation, something like this diagram:

Screenshot from 2023-10-31 15-04-11

Cheers, Stuart

Hello, @Status-Mirror what you say is correct. Yes, I want to set up particles with momenta rotating in injected block of the simulation. Now, I only know how to set up energy of particles by "drift_px = -drift_p / 1000". But how to I set up "particles with momenta rotating"? like being shown of this diagram.

Status-Mirror commented 11 months ago

I think I've misunderstood what you wanted - the simulation you're describing could only be done in 3D.

You want particles to be injected from the z_min boundary with some drifting pz, but with px and py rotating in the $xy$ plane as in the diagram.

Using file injectors, you can manually specify the injection position, time, weight and momentum of injected particles. If you wrote some software to automatically generate these particle files (with momentum changing with position), then you could achieve any arbitrary injection characteristics. See the example on file injectors and the injector block documentation to learn more.