Program Listing for File NuMagSANSlib_KernelSelector.h#
↰ Return to documentation for file (src/wrapper/NuMagSANSlib_KernelSelector.h)
#pragma once
inline void SelectKernelRunMulti(InputFileData* InputData, NuclearData* NucData_gpu, MagnetizationData* MagData_gpu,
StructureData* StructData_gpu, RotationData* RotData_gpu, ScatteringData* SANSData,
ScatteringData* SANSData_gpu) {
int L = (*SANSData->N_q) * (*SANSData->N_theta);
LogSystem::write("total number of Fourier space bins: " + std::to_string(L));
// Pure Magnetic Scattering Calculator without structure data #############################
if (InputData->MagData_activate_flag == 1 && InputData->NucData_activate_flag == 0 &&
InputData->StructData_activate_flag == 0 && InputData->RotData_activate_flag == 0) {
LogSystem::write("run: Atomistic_MagSANS_Kernel_dilute");
Atomistic_MagSANS_Kernel_dilute<<<(L + 255) / 256, 256>>>(*MagData_gpu, *SANSData_gpu);
CheckCUDAKernelRun("Atomistic_MagSANS_Kernel_dilute");
}
// Pure Nuclear Scattering Calculator without structure data ##############################
if (InputData->MagData_activate_flag == 0 && InputData->NucData_activate_flag == 1 &&
InputData->StructData_activate_flag == 0 && InputData->RotData_activate_flag == 0) {
LogSystem::write("run: Atomistic_NucSANS_Kernel_dilute");
Atomistic_NucSANS_Kernel_dilute<<<(L + 255) / 256, 256>>>(*NucData_gpu, *SANSData_gpu);
CheckCUDAKernelRun("Atomistic_NucSANS_Kernel_dilute");
}
// Combined Magnetic and Nuclear Scattering Calculator without structure data #############
if (InputData->MagData_activate_flag == 1 && InputData->NucData_activate_flag == 1 &&
InputData->StructData_activate_flag == 0 && InputData->RotData_activate_flag == 0) {
LogSystem::write("run: Atomistic_NuMagSANS_Kernel_dilute");
Atomistic_NuMagSANS_Kernel_dilute<<<(L + 255) / 256, 256>>>(*NucData_gpu, *MagData_gpu, *SANSData_gpu);
CheckCUDAKernelRun("Atomistic_NuMagSANS_Kernel_dilute");
}
// Pure Magnetic Scattering Calculator with structure data ################################
if (InputData->MagData_activate_flag == 1 && InputData->NucData_activate_flag == 0 &&
InputData->StructData_activate_flag == 1 && InputData->RotData_activate_flag == 0) {
LogSystem::write("run: Atomistic_MagSANS_Kernel");
Atomistic_MagSANS_Kernel<<<(L + 255) / 256, 256>>>(*MagData_gpu, *StructData_gpu, *SANSData_gpu);
CheckCUDAKernelRun("Atomistic_MagSANS_Kernel");
}
// Pure Nuclear Scattering Calculator with structure data #################################
if (InputData->MagData_activate_flag == 0 && InputData->NucData_activate_flag == 1 &&
InputData->StructData_activate_flag == 1 && InputData->RotData_activate_flag == 0) {
LogSystem::write("run: Atomistic_NucSANS_Kernel");
Atomistic_NucSANS_Kernel<<<(L + 255) / 256, 256>>>(*NucData_gpu, *StructData_gpu, *SANSData_gpu);
CheckCUDAKernelRun("Atomistic_NucSANS_Kernel");
}
// Combined Magnetic and Nuclear Scattering Calculator with structure data ################
if (InputData->MagData_activate_flag == 1 && InputData->NucData_activate_flag == 1 &&
InputData->StructData_activate_flag == 1 && InputData->RotData_activate_flag == 0) {
LogSystem::write("run: Atomistic_NuMagSANS_Kernel");
Atomistic_NuMagSANS_Kernel<<<(L + 255) / 256, 256>>>(*NucData_gpu, *MagData_gpu, *StructData_gpu,
*SANSData_gpu);
CheckCUDAKernelRun("Atomistic_NuMagSANS_Kernel");
}
// Pure Magnetic Scattering Calculator with rotation data and without structure data ######
if (InputData->MagData_activate_flag == 1 && InputData->NucData_activate_flag == 0 &&
InputData->StructData_activate_flag == 0 && InputData->RotData_activate_flag == 1) {
LogSystem::write("run: Atomistic_MagSANS_Kernel_RotDilute");
Atomistic_MagSANS_Kernel_RotDilute<<<(L + 255) / 256, 256>>>(*MagData_gpu, *RotData_gpu, *SANSData_gpu);
CheckCUDAKernelRun("Atomistic_MagSANS_Kernel_RotDilute");
}
// Pure Nuclear Scattering Calculator with rotation data and without structure data #######
if (InputData->MagData_activate_flag == 0 && InputData->NucData_activate_flag == 1 &&
InputData->StructData_activate_flag == 0 && InputData->RotData_activate_flag == 1) {
LogSystem::write("run: Atomistic_NucSANS_Kernel_RotDilute");
Atomistic_NucSANS_Kernel_RotDilute<<<(L + 255) / 256, 256>>>(*NucData_gpu, *RotData_gpu, *SANSData_gpu);
CheckCUDAKernelRun("Atomistic_NucSANS_Kernel_RotDilute");
}
// Combined Magnetic and Nuclear Scattering Calculator with rotation data #################
if (InputData->MagData_activate_flag == 1 && InputData->NucData_activate_flag == 1 &&
InputData->StructData_activate_flag == 0 && InputData->RotData_activate_flag == 1) {
LogSystem::write("run: Atomistic_NuMagSANS_Kernel_RotDilute");
Atomistic_NuMagSANS_Kernel_RotDilute<<<(L + 255) / 256, 256>>>(*NucData_gpu, *MagData_gpu, *RotData_gpu,
*SANSData_gpu);
CheckCUDAKernelRun("Atomistic_NuMagSANS_Kernel_RotDilute");
}
// Pure Magnetic Scattering Calculator with structure and rotation data ###################
if (InputData->MagData_activate_flag == 1 && InputData->NucData_activate_flag == 0 &&
InputData->StructData_activate_flag == 1 && InputData->RotData_activate_flag == 1) {
LogSystem::write("run: Atomistic_MagSANS_Kernel_StructRot");
Atomistic_MagSANS_Kernel_StructRot<<<(L + 255) / 256, 256>>>(*MagData_gpu, *StructData_gpu, *RotData_gpu,
*SANSData_gpu);
CheckCUDAKernelRun("Atomistic_MagSANS_Kernel_StructRot");
}
// Pure Nuclear Scattering Calculator with structure and rotation data ####################
if (InputData->MagData_activate_flag == 0 && InputData->NucData_activate_flag == 1 &&
InputData->StructData_activate_flag == 1 && InputData->RotData_activate_flag == 1) {
LogSystem::write("run: Atomistic_NucSANS_Kernel_StructRot");
Atomistic_NucSANS_Kernel_StructRot<<<(L + 255) / 256, 256>>>(*NucData_gpu, *StructData_gpu, *RotData_gpu,
*SANSData_gpu);
CheckCUDAKernelRun("Atomistic_NucSANS_Kernel_StructRot");
}
// Combined Magnetic and Nuclear Scattering Calculator with structure and rotation data ###
if (InputData->MagData_activate_flag == 1 && InputData->NucData_activate_flag == 1 &&
InputData->StructData_activate_flag == 1 && InputData->RotData_activate_flag == 1) {
LogSystem::write("run: Atomistic_NuMagSANS_Kernel_StructRot");
Atomistic_NuMagSANS_Kernel_StructRot<<<(L + 255) / 256, 256>>>(*NucData_gpu, *MagData_gpu, *StructData_gpu,
*RotData_gpu, *SANSData_gpu);
CheckCUDAKernelRun("Atomistic_NuMagSANS_Kernel_StructRot");
}
}
inline void SelectKernelRun(InputFileData* InputData, NuMagSANSData* Data) {
SelectKernelRunMulti(InputData, &Data->NucData_gpu, &Data->MagData_gpu, &Data->StructData_gpu, &Data->RotData_gpu,
&Data->SANSData, &Data->SANSData_gpu);
}