Open rl3418 opened 1 month ago
I am do a 3d boosted frame simulation of an electron beam travelling through a 3d undulator field. The boost is along the z direction and this is the field I used
#boost along z
warpx.gamma_boost = gamma_f
warpx.boost_direction = z
#field in lab frame
warpx.B_ext_grid_init_style = parse_B_ext_grid_function
warpx.Bx_external_grid_function(x,y,z) = if((z>(0.0)),if(z<2.15,-(k_x/k_y)\*sin(k_x\*x)*sinh(k_y\*y)*cos(k_u\*z),0.0),0.0)
warpx.By_external_grid_function(x,y,z) = if((z>(0.0)),if(z<2.15,B_0*cos(k_x\*x)\*cosh(k_y\*y)\*cos(k_u\*z),0.0),0.0)
warpx.Bz_external_grid_function(x,y,z) = if((z>(0.0)),if(z<2.15,-(k_u/k_y)\*B_0\*cos(k_x\*x)*sinh(k_y\*y)*sin(k_u\*z),0.0),0.0)
warpx.E_ext_grid_init_style = parse_E_ext_grid_function
warpx.Ex_external_grid_function(x,y,z) = 0
warpx.Ey_external_grid_function(x,y,z) = 0
warpx.Ez_external_grid_function(x,y,z) = 0
Below is a comparision between the z phase space predicted by the osiris simulation and the Warpx simulation
osiris warpx
The external field should sinusoidally modulate the z phase space. This is seen in the osiris code. Seems that the field is not applied properly in the WarpX code. Is there additional parameter that I need to specify?
external_particle_function seems to work. I guess external_grid_function doesn't include any time dependence. It doesn't know how to handle the time dependence after Lorentz transformation.
@rl3418 Thanks for your questions, and sorry for the late reply!
You had a number of different questions, so here are a few corresponding answers:
external_particle
fields cannot be visualized in the WarpX output. We might fix this in the near future, but again the current status is that these fields do not show up in the diagnostics (but yet they are indeed applied to the particles during the simulation). You mentioned that the WarpX document suggests otherwise: could you point me to the corresponding part of the documentation?external_particle
fields instead of the external_grid
fields. The external_grid
fields actually add the fields to the Maxwell grid, and the fields are then self-consistently updated, which can be problematic if the fields that you impose do not satisfy the right boundary conditions. It is much simpler to use external_particle
fields.-clightgamma_fbeta_f*(k_x/k_y)B_0sin(k_xx)sinh(k_yy)cos(k_ugamma_f(z+beta_f*t))
). Instead, simply pass the lab-frame expressions. WarpX will automatically transform these fields under the hood. (See these lines and these lines) I suspect that this is one of the main reason why the WarpX and Osiris results differ.BackTransformed
diagnostic in WarpX:
zinject_plane
is indeed automatically transformed to the boosted frame. So you only need to pass the (constant) value in the lab frame.Please let us know if anything is unclear. Also, feel free to post an updated version of your script that takes into account the above points, if you would like us to take another look.
Thanks for the clarification. I was doing the transformation manually just to diagnose the problems. The BackTransformation diagnostics was not working properly, so I tried to do the transformation myself. I need to run more simulations to figure out what is the underlying problem.
I found a typo in my script. The preliminary simulation showed some agreement with the osiris results. This was performed without the injection plane, since it is not possibility to have the zinject_plane change with time. I will run more simulations with the zinject_plane using the WarpX transformation then.
I performed 3d simulations of an electron beam travelling through an undulator in the boosted frame. The warpx simulation and the osiris simulation showed similar behaviour. The beam evolution in the zpz phase space seems to match, but warpx results showed splitting which seems numerical. z is the beam propagation and the boost direction.
The plots here show the phase space distribution in the boosted frame just before the beam fully enters the undulator. The red vertical line marks the boundary of the undulator field in the boosted frame. pz shows sinusoidal modulation as expected due to the z dependence of the undulator field. However, warpx results showed splitting which seems numerical.
warpx
osiris
comparision
This is the z pz plot at a later time in the boosted frame
One could argue that this is due to microbunching. But it forms very rapidly and this is not observed in osiris.
warpx
osiris
According to the manual, the external fields applied to the grid can be seen in the diagnostics that output the fields on the grid. I performed a boosted frame simulation with sinusoidal B fields in the lab frame.
I tried to plot the B fields in the boosted frame using diag1.diag_type = Full diag1.fields_to_plot = Bx By Bz
The boost was along z, so I was expecting the field to be proportional to cos(gamma_f*k_u*(z+beta_f*t*clight)). This doesn't seem to be consistent. What diagnostic should I use to plot the applied field.
Here is a lineout of the field and the input I used
test_3d.txt