xref: /petsc/src/sys/objects/device/impls/cupm/cupmsolverinterface.cxx (revision 96a4b4d95ea58ea02aff154c6b83fc6968de23ca)
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