PICLas Documentation
User Guide
User Guide
1. Installation
1.1. AppImage executable download
1.2. Prerequisites
1.2.1. Ubuntu or similar
1.2.2. CentOS
1.3. Required Libraries
1.3.1. Installing GCC
1.3.2. Installing OpenMPI
1.3.3. Installing HDF5
1.3.4. Installing PETSc
1.4. Obtaining the source
1.5. Compiling the code
1.5.1. Directory paths
2. Mesh Generation
2.1. Mesh generation with PyHOPE
2.2. Mesh conversion with PyHOPE
2.2.1. Mesh generation with Gmsh
2.2.2. Mesh generation with Coreform Cubit
2.2.3. Mesh generation with OMNIS/HEXPRESS
2.2.4. Mesh generation with GridPro
2.2.5. Mesh generation with CENTAUR
2.2.6. Mesh generation with MeshGems/SALOME
3. Workflow
3.1. Compiler options
3.2. Solver settings
3.3. Setup of parameter file(s)
3.4. Simulation
3.4.1. Parallel execution
3.4.2. Profile-guided optimization (PGO)
3.5. Post-processing
4. Features & Models
4.1. Variable polynomial degree (p-adaption)
4.1.1. Refining boundary elements (pAdaptionType = non-periodic-BC)
4.2. Particle Tracking
4.2.1. DoRefMapping
4.2.2. Tracing
4.2.3. Parameters for DoRefMapping and Tracing (NEEDS UPDATING)
4.2.4. Rotating Frame of Reference
4.2.5. Cartesian background mesh (Fast Initialization Background Mesh, FIBGM)
4.3. Field Solver - Poisson Equation
4.3.1. PETSc Solver
4.3.2. Internal CG Solver
4.3.3. Symmetric Simulations
4.4. Boundary Conditions - Field Solver
4.4.1. Maxwell’s Equations
4.4.2. Poisson’s Equation
4.4.3. Dielectric Materials
4.5. Boundary Conditions - Particle Solver
4.5.1. Reflective Wall
4.5.2. Rotational Periodicity
4.5.3. Porous Wall / Pump
4.5.4. Surface Chemistry
4.5.5. Catalytic Surfaces
4.5.6. Deposition of Charges on resolved Dielectric Surfaces
4.5.7. Deposition of charges on distributed capacitance boundary condition (DCBC) surfaces
4.6. Particle Initialization & Emission
4.6.1. Initialization
4.6.2. Surface Flux
4.7. Particle-In-Cell
4.7.1. Lorentz force
4.7.2. Charge and Current Deposition
4.8. Drift-diffusion model
4.8.1. Finite volume solver
4.8.2. Boundary conditions
4.8.3. Plasma chemistry
4.8.4. Visualisation
4.9. Magnetic Background Field
4.9.1. Read-in of an External Field
4.9.2. Calculation with superB
4.10. Direct Simulation Monte Carlo
4.10.1. Species Definition
4.10.2. Pairing & Collision Modelling
4.10.3. Inelastic Collisions & Relaxation
4.10.4. Chemistry & Ionization
4.10.5. Granular Flows
4.10.6. Additional Features
4.10.7. Ensuring Physical Simulation Results
4.11. Background Gas
4.11.1. Distribution from DSMC result
4.11.2. Regions
4.11.3. Trace species
4.11.4. Cross-section based collision probability
4.11.5. Cross-section based vibrational relaxation probability
4.11.6. Cross-section based electronic relaxation probability
4.12. Unified Species Database
4.12.1. Species data
4.12.2. Reaction data
4.12.3. Cross-section data
4.13. Fokker-Planck Collision Operator
4.14. Bhatnagar-Gross-Krook Collision Operator
4.15. Features of the Particle Solver
4.15.1. Macroscopic Restart
4.15.2. Variable Time Step
4.15.3. Symmetric Simulations
4.15.4. Variable Particle Weighting
4.15.5. Virtual Cell Merge
4.16. Radiation & Radiation Transport
4.17. Raytracing & Photoionization
4.17.1. Pulse definition
4.17.2. Surface interaction
4.17.3. Photo-ionization probability
4.17.4. Volume and surface super-sampling
4.18. Discrete velocity method
4.18.1. Finite volume solver
4.18.2. Initial and boundary conditions
4.18.3. Visualisation
5. Visualization & Output
5.1. Particle Data
5.2. Field Solver and PIC
5.2.1. Element-polynomial field properties
5.2.2. Element-constant field/particle properties
5.2.3. Time-averaged Fields
5.3. Particle Flow and Surface Sampling
5.3.1. Electronic excitation
5.4. Integral Variables
5.4.1. Field Variables
5.4.2. Particle Variables
5.4.3. Surface Variables
5.5. Dynamic Mode Decomposition
5.5.1. Ritz spectrum (coaxial_DMD_Spec.dat)
5.5.2. Mode visualization (coaxial_DMD.h5)
5.6. Surface Group Output
6. Tools
6.1. Unified Species Database (USD)
6.1.1. Maintain and edit database
6.2. Userblock
6.2.1.
extract_userblock.py
6.2.2.
rebuild.py
7. Tutorials
7.1. Plasma Wave (PIC, Poisson’s Equation)
7.1.1. Mesh Generation with PyHOPE (pre-processing)
7.1.2. PIC Simulation with PICLas
7.1.3. Visualization (post-processing)
7.2. Landau Damping (PIC, Poisson’s Equation)
7.2.1. Mesh Generation with PyHOPE (pre-processing)
7.2.2. PIC Simulation with PICLas
7.2.3. Visualisation (post-processing)
7.3. Two Stream Instability (PIC, Poisson’s Equation)
7.3.1. Mesh Generation with PyHOPE (pre-processing)
7.3.2. PIC Simulation with PICLas
7.3.3. Visualization (post-processing)
7.4. Negative Streamer Discharge (PIC, Poisson’s Equation)
7.4.1. Drift-Diffusion Electron Fluid
7.4.2. Particle-in-cell/Monte Carlo Collision (PIC/MCC)
7.4.3. Comparison of Electron Fluid and PIC-MCC
7.5. Adiabatic Box/Reservoir (DSMC, Relaxation/Chemistry)
7.5.1. Mesh Generation with PyHOPE (pre-processing)
7.5.2. Simulation: Chemistry disabled
7.5.3. Visualization, chemistry disabled (post-processing)
7.5.4. Simulation: Chemistry enabled
7.5.5. Visualization, chemistry enabled (post-processing)
7.6. Hypersonic Flow around the 70° Cone (DSMC) - 2D Mesh
7.6.1. Mesh Generation with PyHOPE (pre-processing)
7.6.2. Flow simulation with DSMC
7.6.3. Run the simulation
7.6.4. Visualization (post-processing)
7.7. Hypersonic Flow around the 70° Cone (DSMC) - 3D Mesh with Gmsh
7.7.1. Mesh generation with Gmsh
7.7.2. Flow simulation with DSMC
8. Cluster Guidelines
8.1. Simulating at HLRS
8.1.1. Cloning with the SSH protocol
8.1.2. Setting up the module environment
8.1.3. Installing PETSc with restricted internet access
8.1.4. Compiling and executing PICLas
9. Appendix
9.1. Tested compiler combinations
9.2. Unified Species Database (USD)
9.2.1. Electronic database
9.2.2. Reactions
Developer Guide
Developer Guide
1. GitLab Workflow
1.1. Issues & Milestones
1.2. Merge Request (MR)
1.2.1. Automatic release note generation
1.3. Release and deploy
1.3.1. Release Tag
1.3.2. GitHub
2. Documentation
2.1. Building documentation
2.1.1. HTML Version
2.1.2. PDF Version
2.2. Writing documentation
2.2.1. Figures
3. Style Guide
3.1. Header of Functions and Subroutines
3.2. Variables
3.3. Functions and Control Structures
3.4. Workflow Description
3.5. Special Rules
3.5.1. CALL Allocate_Shared()
3.5.2. USE MOD_Preproc
3.6. Code Annotations
4. Best Practices
4.1. MPI
4.2. Shared Memory Windows
4.3. Hawk
4.3.1. Striping
4.3.2. Species-zero bug
4.4. CollectiveStop
5. Troubleshooting
5.1. WriteArrayToHDF5() and the collective flag
5.2. Seemingly meaningless change in code triggers segmentation fault or slow down of the code
5.3. Possible memory leak detection when using MPICH
5.3.1. PETSc
6. Code Extension
6.1. Surface Sampling & Output
6.2. Allocating particle data
6.3. Insert new particles
6.4. Remove particles
6.5. Particle internal data container
6.5.1. MPI communication
7. Useful Functions
7.1. General Functions and Subroutines
7.2. Particle Functions and Subroutines
8. MPI Implementation
8.1. General Remarks: Things to consider
8.2. Construction of Halo Region (MPI 3.0 Shared Memory)
8.2.1. Mesh Geometry
8.2.2. Element/Side Mappings
8.2.3. Particle Element Mappings
8.3. Custom communicators
8.3.1. Available communicators
9. Regression Testing
9.1. reggie2.0 Tool
9.2. Local execution of reggie2.0
9.3. Compression of HDF5 reference files
9.4. Running GitLab
.gitlab-ci.yml
Tests
9.5. Remote Testing on Gitlab
9.6. Code Coverage
9.6.1. Coverage on GitLab
9.6.2. Local coverage tests
9.6.3. Reggie coverage
9.7. Local Testing using
gitlab-ci-local
9.7.1. Example
9.8. Regression Test
Gitlab Runner
Setup for self-hosted Servers
9.8.1. Prerequisites: Installation of Software on Clean Ubuntu Setup (18.04)
9.8.2. Installation of Gitlab Runners
9.8.3. Configuration Files
9.8.4. Automatic Deployment to Other Platforms (GitHub)
10. Unit tests
10.1. Integration of unit test with CTest
10.2. Implementation of unit tests
10.2.1. CMakeLists.txt
10.2.2. General unit test structure
10.2.3. Generation of reference mesh data
11. Compiler Options
12. Developer Tools
12.1. WarningsCheck
12.2. Remove trailing white spaces
12.3. Module Environment
12.3.1. FAQ: Common Problems
13. Performance Analysis
13.1. Extrae and Paraver
13.1.1. Installation
13.1.2. Code Instrumentation
13.1.3. Tracing the code
13.1.4. User functions
13.2. Intel® VTune™
13.2.1. VTune Installation
13.2.2. Batch jobs
13.2.3. Usage
13.3. Valgrind
13.3.1. Installation of Valgrind
13.3.2. Execution of Valgrind
14. Building the AppImage Executable
14.1. piclas
14.2. piclas2vtk and other tools
14.3. Troubleshooting
15. Markdown Examples
15.1. Linking
15.1.1. Hyperlinks
15.1.2. Referencing other sections of the documentation
15.2. Code environment
15.3. Equations
15.4. Bibtex, cite
15.5. section references
15.6. Figures, caption
15.7. tables
15.8. unnumbered section headings
15.9. Code blocks for various languages
References
References
PICLas Documentation
Index
Index