The goal of this tutorial is to get familiar with:
- the
Speciesblock that allows you to define a particle species, - the
ParticleBinningdiagnostics to obtain particle energy spectra, - the problem of numerical heating and the necessity to correctly resolve the electron dynamics in explicit PIC codes.
Download the input file thermal_plasma_1d.py.
An infinite electron-ion plasma is let free to evolve in a 1D cartesian geometry with periodic boundary conditions.
The first step is to check that your input file is correct. To do so, you will run (locally) :program:`Smilei` in test mode:
./smilei_test thermal_plasma_1d.pyIf your simulation input file is correct, you can now run the simulation. Before going to the analysis of your simulation, check your log and/or error output.
Check what output files have been generated: what are they?
Let's now turn to analysing the output of your run with :program:`happi`.
To do so, open an ipython session:
ipythonIn ipython, import the :program:`happi` package:
import happithen open your simulation:
S = happi.Open('/path/to/the/simulation')Warning
Use the correct simulation path.
You are now ready to take a look at your simulation's results.
To have a quick access at your data and check what is going on, you will plot the electron and ion densities together with the electrostatic field E_x.
First, prepare the data:
# minus the electron density
ne = S.Field(0,'-Rho_eon', label="e- density")
# ion density
ni = S.Field(0,'Rho_ion', label="ion density")
# Ex field
ex = S.Field(0,'Ex', label="Ex field", vmin=-0.25,vmax=2)You may plot all these quantities independently using ex.plot() or ex.slide(),
but you can also use the multiSlide function of :program:`happi`:
happi.multiSlide(ne,ni,ex)Now, have a look at the ParticleBinning diagnostics in the input file.
What kind of data will this diagnostic provide?
You can compare the results at the beginning and at the end of the simulation:
Nt = S.ParticleBinning(0).getTimesteps()[-1] # the last timestep
f_initial = S.ParticleBinning(0, data_log=True, timesteps=0 , label="initial")
f_final = S.ParticleBinning(0, data_log=True, timesteps=Nt, label="final")
happi.multiPlot(f_initial, f_final)What can you conclude?
Have a look at the total energy and energy balance in your simulation
(remember the Utot and Ubal scalars).
Note the level of energy imbalance at the end of this simulation for which
the spatial resolution is equal to the Debye Length (\Delta x = \lambda_{\rm De}).
Increase your spatial resolution to \Delta x = 16 \times \lambda_{\rm De}. Run the simulation again, and check the energy imbalance at the end of the simulation. What do you observe? Can you check the electron spectrum at the beginning and end of the simulation? What is going on?
Finally, increase your spatial resolution to \Delta x = 2\,c/\omega_{pe} = 2\,c\lambda_{\rm De}/v_{\rm th} (you will need to extend your simulation box size to have enough cells). Check the evolution of the total energy. What do you observe?