Code Structure

EPOCH is designed so that it can fairly easily be extended while still being written in (more or less) standard Fortran90 and MPI1.2. This section details in increasing complexity what a programmer needs to know to develop the core systems of EPOCH, including the particle pusher, field solver, macro-particle weights and current solver.

Specifically, the core structure pages contain:

  • Basic structures - Some global and local variables, including physical constants, grid-properties, the time-step, and deck variables
  • Particles - How particles are stored in EPOCH, and the information contained in their data-structures
  • Linked lists - An explanation of the computer-science concept “linked lists”. These variable-length arrays are used to hold the EPOCH macro-particles.
  • Partlist - A description of the EPOCH subroutines used to create linked-lists for holding particles.
  • Field solver - Shows where the fields are evaluated on the EPOCH grid, and the equations solved.
  • Particle pusher - Describes how particle positions and velocities are updated in EPOCH.
  • Weighting functions - Explains how macro-particles are interpolated onto grid points, and vice versa.
  • Current solver - Explains how current densities are calculated within the code.
  • Boundary conditions - Details the different types of boundaries in an EPOCH simulation.
  • Parallelism - Discusses how parallelism is achieved in the code, and how the EPOCH load-balancer works.
  • Pre-compiler flags - How the pre-compiler flags in the Makefile work, and how to use them in the code.