1*96a4b4d9SJacob Faibussowitsch #include <petsc/private/cupmsolverinterface.hpp> 2*96a4b4d9SJacob Faibussowitsch #include <petsc/private/petscadvancedmacros.h> 3*96a4b4d9SJacob Faibussowitsch 4*96a4b4d9SJacob Faibussowitsch namespace Petsc 5*96a4b4d9SJacob Faibussowitsch { 6*96a4b4d9SJacob Faibussowitsch 7*96a4b4d9SJacob Faibussowitsch namespace device 8*96a4b4d9SJacob Faibussowitsch { 9*96a4b4d9SJacob Faibussowitsch 10*96a4b4d9SJacob Faibussowitsch namespace cupm 11*96a4b4d9SJacob Faibussowitsch { 12*96a4b4d9SJacob Faibussowitsch 13*96a4b4d9SJacob Faibussowitsch namespace impl 14*96a4b4d9SJacob Faibussowitsch { 15*96a4b4d9SJacob Faibussowitsch 16*96a4b4d9SJacob Faibussowitsch #define PETSC_CUPMSOLVER_STATIC_VARIABLE_DEFN(THEIRS, DEVICE, OURS) const decltype(THEIRS) SolverInterfaceImpl<DeviceType::DEVICE>::OURS; 17*96a4b4d9SJacob Faibussowitsch 18*96a4b4d9SJacob Faibussowitsch #define PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUORIGINAL, HIPORIGINAL, OURS) \ 19*96a4b4d9SJacob Faibussowitsch PetscIfPetscDefined(HAVE_CUDA, PETSC_CUPMSOLVER_STATIC_VARIABLE_DEFN, PetscExpandToNothing)(CUORIGINAL, CUDA, OURS) PetscIfPetscDefined(HAVE_HIP, PETSC_CUPMSOLVER_STATIC_VARIABLE_DEFN, PetscExpandToNothing)(HIPORIGINAL, HIP, OURS) 20*96a4b4d9SJacob Faibussowitsch 21*96a4b4d9SJacob Faibussowitsch #define PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(SUFFIX) PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(PetscConcat(CUSOLVER_, SUFFIX), PetscConcat(HIPSOLVER_, SUFFIX), PetscConcat(CUPMSOLVER_, SUFFIX)) 22*96a4b4d9SJacob Faibussowitsch 23*96a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_SUCCESS) 24*96a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_NOT_INITIALIZED) 25*96a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_ALLOC_FAILED) 26*96a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_INTERNAL_ERROR) 27*96a4b4d9SJacob Faibussowitsch 28*96a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_OP_T, HIPSOLVER_OP_T, CUPMSOLVER_OP_T) 29*96a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_OP_N, HIPSOLVER_OP_N, CUPMSOLVER_OP_N) 30*96a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_OP_C, HIPSOLVER_OP_C, CUPMSOLVER_OP_C) 31*96a4b4d9SJacob Faibussowitsch 32*96a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_FILL_MODE_LOWER, HIPSOLVER_FILL_MODE_LOWER, CUPMSOLVER_FILL_MODE_LOWER) 33*96a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_FILL_MODE_UPPER, HIPSOLVER_FILL_MODE_UPPER, CUPMSOLVER_FILL_MODE_UPPER) 34*96a4b4d9SJacob Faibussowitsch 35*96a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_SIDE_LEFT, HIPSOLVER_SIDE_LEFT, CUPMSOLVER_SIDE_LEFT) 36*96a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_SIDE_RIGHT, HIPSOLVER_SIDE_RIGHT, CUPMSOLVER_SIDE_RIGHT) 37*96a4b4d9SJacob Faibussowitsch 38*96a4b4d9SJacob Faibussowitsch } // namespace impl 39*96a4b4d9SJacob Faibussowitsch 40*96a4b4d9SJacob Faibussowitsch } // namespace cupm 41*96a4b4d9SJacob Faibussowitsch 42*96a4b4d9SJacob Faibussowitsch } // namespace device 43*96a4b4d9SJacob Faibussowitsch 44*96a4b4d9SJacob Faibussowitsch } // namespace Petsc 45