Skip to content

hightower8083/synchrad

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

81 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Synchrotron Radiation calculator via openCL

Overview

Tool to compute energy density of synchrotron radiation in the spectral volume using the Fourier transformed Lienard-Wiechert potentials (see eq. (14.65) of J.D.Jackson's Classical electrodynamics).

This software processes the 3D (x, y, z, px, py, pz) trajectories of the charged point-like particles with weights, and maps the emittied energy to the 3D spectral domain (omega, theta, phi). The package also contains a number of convenience methods for pre- and post-proccessing.

Language and hardware

SynchRad is written in openCL and is interfaced with Python via PyOpenCL.

Code also uses Mako template manager for tweaking with the data types and native functions. It was tested on GPU and CPU devices using NVIDIA, AMD and Apple platforms, and it demonstrates a reasonable performance on GPUs, while on CPU the simillar OpenMP implementation is signifincantly faster.

Installation

Given that openCL and PyOpenCL are installed (e.g. via conda or pip) and configured on your machine, you can install SynchRad in a standard way, i.e. by cloning the source and running the setup.py script:

git clone https://github.com/hightower8083/synchrad.git
cd synchrad/
python setup.py install

To be able to use the software with multiple GPU or CPU devices via MPI one should also install mpi4py. To output result in VTK format via exportToVTK method, the tvtk.api should be installed.

Usage

A minimal example of SynchRad usage can be found in example/ folder of this repository.

Another common example would be to calculate radiation produced by the particles from, for example, a PIC simulation. In case if PIC software supports output in OpenPMD standard, this can be done with help of openPMD-viewer, using the conversion function:

from openpmd_viewer import OpenPMDTimeSeries, ParticleTracker
from synchrad.utils import tracksFromOPMD

ts = LpaDiagnostics('./run/diags_track/hdf5/', check_all_files=False)
ref_iteration = ts.iterations[-1]
pt = ParticleTracker( ts, iteration=ref_iteration, 
                      preserve_particle_index=True)

tracksFromOPMD( ts, pt, ref_iteration=ref_iteration, fname='tracks.h5')

where one can see doc-lines of tracksFromOPMD for more optional arguments.

The prepared track can be processed and saved to file using following commands:

import numpy as np
from synchrad.calc import SynchRad

calc_input = {'grid':[ (1e3/1.24e-6, 75e3/1.24e-6),
                       (0, 0.04),
                       (0.,2*np.pi),
                       (256, 32, 32) ],
              'dtype':'double',
             }

calc = SynchRad(calc_input)
calc.calculate_spectrum(file_tracks='./tracks.h5',file_spectrum='./spectrum.h5')

where radiation within 40 urad angle is calculated for the energies range [1 keV, 75 keV].

For more details see the example notebooks in tutorials/

Author and Contributions

This software is developed by Igor A Andriyash (igor.andriyash@gmail.com), and it is on the early stage of development.

Everyone is welcome to contribute either by testing and benchmarking, or by introducing further optimizations and adding utility methods.