Coder Social home page Coder Social logo

quill-pic / quill Goto Github PK

View Code? Open in Web Editor NEW
14.0 5.0 9.0 491 KB

Quill is a 3D QED-PIC code for simulations of interaction of electromagnetic radiation and particles with plasmas with QED effects such as gamma photon radiation and electron–positron pair production.

Home Page: https://quill-pic.github.io/Quill/

License: MIT License

Roff 3.12% C++ 72.24% Shell 0.34% Python 19.93% C 0.07% CMake 0.28% Makefile 0.02% TeX 4.00%
particle-in-cell qed plasma-physics

quill's Introduction

QUILL: 3D QED particle-in-cell code

QUILL (simulator for QUantum effects in Intense Laser-pLasma interactions) is a fully three-dimensional parallel particle-in-cell (PIC) code developed at the Institute of Applied Physics RAS, Nizhny Novgorod, Russia. To our knowledge, it was the first PIC code with implementation of the Monte Carlo QED approach to investigate the development of electron–positron cascades.

The code is able to model the following processes using the Monte Carlo technique:

  • photon emission by an electron in the strong field, with radiation reaction effects;
  • electron–positron pair creation from gamma photons (Breit–Wheeler process).

The Maxwell solvers implemented in the code are FDTD, NDFX (the scheme used in A. Pukhov's VLPL code), and hybrid five-point FDTD (the scheme reduces numerical Cherenkov instability). The particles pushers implemented in the code use Vay or Boris scheme.

Full documentation is available at https://quill-pic.github.io/Quill/

Dependencies

In order to build and run Quill, the following dependencies are required:

  • C++ compiler with C++11 support;
  • CMake (version 3.10 or higher);
  • MPI implementation;
  • Python3 interpreter (optional: NumPy and Matplotlib for data analysis).

Quill is developed and tested on Linux with the use of g++ and clang++ compilers and OpenMPI.

Build

To build Quill, run CMake in the build folder, e.g.

cd build
cmake ..
make

Or use your preferred way of building with CMake.

Building in any other folder is not recommended, as scripts rely on executables being present in the build folder.

Quill can be compiled without QED support by setting the CMake option QUILL_ENABLE_QED to OFF (ON by default),

cmake .. -DQUILL_ENABLE_QED=OFF

Input files

Example input files can be found in the conf/example folder. All possible parameters in the input file are described in the quill.conf.example file.

Run

To run Quill, use the run.sh script from the root folder and pass the name of the input file as a parameter. For example,

./run.sh /home/user/my-problem

By default, run.sh relies on mpirun. Rewrite the script itself if different behavior is required.

The number of MPI threads is determined by the n_sr parameter in the input file and should never be explicitly set to a different value.

Note: In order to run Quill, a Python interpreter is required on all nodes; it is used to parse the input file.

Analyze results

Results can be graphically analyzed with the qplot Python package located in the python folder. Refer to the documentation within the package itself. Documentation in IPython or Jupyter Notebooks/Lab can also be accessed using the ? command, e.g. qplot.density?

Low-level data reading is available in the resread package.

The qplot package depends on the matplotlib and numpy packages; resread depends only on numpy.

quill's People

Contributors

agolovanov avatar blendersamsonov avatar dmserebr avatar evgenynerush avatar sevansevanich avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

quill's Issues

Make tracks' output more efficient

Currently, in order to output tracks, every track output file is opened and closed every timestep, which creates significant load on the filesystem. Instead, track files should be reopened only when the tracked particle is transferred between the MPI processes.

Ability to limit particles output

In simulations where particles multiply a lot, outputting a fixed portion of all the particles can lead to very long write to disk. I propose to add ability to specify maximum number of particles to output via a new parameter in config. In that case I can still, for example, output only each 10th particle, unless they reach this maximum, or by specifying enthp = 1 and maximum number of particles output exactly that many particles.
Implementation seems to be quite straight-forward

Output of the "x" coordinate in tracks is incorrect

When the moving window is enabled, due to the initial value of nmw = 1, tracks experience additional jump of in the x coordinate. Setting nmw = 0 by default solves this particular issue, but additional checks of its effect on all other properties are required.

Improve OpenPMD support for meshes

All fields in the OpenPMD standard should be meaningful:

  • proper SI units should be used;
  • grid positions should be calculated correctly;
  • additional optional fields like date or machine should be implemented.

Deleting particles doesn't work with load balancing

When resizing the layers, checks whether the particles are truly deleted from the simulation or deleted because they are moved to a different layer are incorrect, and some particles might be wrongly considered truly deleted. This will result in these particles being wrongly added to the output of deleted particles.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.