File self_vectors_cuda_scatter_device.hpp

This file contains a class which implements the scattering calculation for self scattering.

Author

Daniel Vonk dan@danvonk.com

Version

See VERSION in CMakeLists.txt

Copyright

GNU General Public License

class SelfVectorsCUDAScatterDevice : public AbstractVectorsXPUScatterDevice
#include <self_vectors_cuda_scatter_device.hpp>

Implements self type scattering using vectors for orientational averaging (incoherent scattering) Computes scattering amplitudes a_n(q,t) Alignment by atoms

Public Functions

SelfVectorsCUDAScatterDevice(boost::mpi::communicator allcomm, boost::mpi::communicator partitioncomm, Sample &sample, std::vector<CartesianCoor3D> vectors, size_t NAF, boost::asio::ip::tcp::endpoint fileservice_endpoint, boost::asio::ip::tcp::endpoint monitorservice_endpoint)
SelfVectorsCUDAScatterDevice(const SelfVectorsCUDAScatterDevice &other) = delete
SelfVectorsCUDAScatterDevice operator=(const SelfVectorsCUDAScatterDevice &other) = delete
virtual ~SelfVectorsCUDAScatterDevice()

Protected Functions

virtual double progress() override
virtual void stage_data() override
virtual void compute() override
virtual bool ram_check() override
virtual void print_pre_runner_info() override
fftw_complex *scatter(size_t qindex, size_t aindex) = delete
void scatterblock(size_t atomindex, size_t index, size_t count) = delete
void store(fftw_complex *at) = delete
void dsp(fftw_complex *at) = delete

Protected Attributes

size_t coord_size_ = 0
size_t current_atomindex_ = 0
ModAssignment assignment_

Private Members

double *dscatter_factors = nullptr
coor_t *dcoords = nullptr
CartesianCoor3D *dsubvector_index = nullptr
std::complex<double> *dafinal_ = nullptr
std::complex<double> *da2final_ = nullptr
fftw_complex *datfinal_ = nullptr
const size_t NTHREADS = 1024
size_t global_memory_ = 0
size_t shared_mem_per_block_ = 0
int max_threads_per_block_ = 0
int max_threads_per_sm_ = 0
int num_sm_ = 0
int max_parallel_atoms_ = 0
dim3 blockDim_ = dim3(32, 32)