1af0996ceSBarry Smith #include <petsc/private/matimpl.h> /*I "petscmat.h" I*/ 2c4aff060SBarry Smith 3c4aff060SBarry Smith /*@C 4*11a5261eSBarry Smith MatPythonSetType - Initialize a `Mat` object implemented in Python. 5c4aff060SBarry Smith 6c4aff060SBarry Smith Collective on Mat 7c4aff060SBarry Smith 8d8d19677SJose E. Roman Input Parameters: 9*11a5261eSBarry Smith + mat - the matrix object. 10c4aff060SBarry Smith - pyname - full dotted Python name [package].module[.{class|function}] 11c4aff060SBarry Smith 12c4aff060SBarry Smith Options Database Key: 1367b8a455SSatish Balay . -mat_python_type <pyname> - python class 14c4aff060SBarry Smith 15c4aff060SBarry Smith Level: intermediate 16c4aff060SBarry Smith 17*11a5261eSBarry Smith .seealso: `Mat`, `MatType`, `MatCreate()`, `MatSetType()`, `MATPYTHON`, `PetscPythonInitialize()` 18c4aff060SBarry Smith @*/ 199371c9d4SSatish Balay PetscErrorCode MatPythonSetType(Mat mat, const char pyname[]) { 20c4aff060SBarry Smith PetscFunctionBegin; 210700a824SBarry Smith PetscValidHeaderSpecific(mat, MAT_CLASSID, 1); 22c4aff060SBarry Smith PetscValidCharPointer(pyname, 2); 23cac4c232SBarry Smith PetscTryMethod(mat, "MatPythonSetType_C", (Mat, const char[]), (mat, pyname)); 24c4aff060SBarry Smith PetscFunctionReturn(0); 25c4aff060SBarry Smith } 26c4aff060SBarry Smith 27c4aff060SBarry Smith /*@C 28*11a5261eSBarry Smith MatPythonGetType - Get the type of a `Mat` object implemented in Python. 29ebead697SStefano Zampini 30ebead697SStefano Zampini Not collective 31ebead697SStefano Zampini 32ebead697SStefano Zampini Input Parameter: 33*11a5261eSBarry Smith . mat - the matrix 34ebead697SStefano Zampini 35ebead697SStefano Zampini Output Parameter: 36ebead697SStefano Zampini . pyname - full dotted Python name [package].module[.{class|function}] 37ebead697SStefano Zampini 38ebead697SStefano Zampini Level: intermediate 39ebead697SStefano Zampini 40*11a5261eSBarry Smith .seealso: `Mat`, `MatType`, `MatCreate()`, `MatSetType()`, `MATPYTHON`, `PetscPythonInitialize()`, `MatPythonSetType()` 41ebead697SStefano Zampini @*/ 429371c9d4SSatish Balay PetscErrorCode MatPythonGetType(Mat mat, const char *pyname[]) { 43ebead697SStefano Zampini PetscFunctionBegin; 44ebead697SStefano Zampini PetscValidHeaderSpecific(mat, MAT_CLASSID, 1); 45ebead697SStefano Zampini PetscValidPointer(pyname, 2); 46ebead697SStefano Zampini PetscUseMethod(mat, "MatPythonGetType_C", (Mat, const char *[]), (mat, pyname)); 47ebead697SStefano Zampini PetscFunctionReturn(0); 48ebead697SStefano Zampini } 49ebead697SStefano Zampini 50ebead697SStefano Zampini /*@C 51*11a5261eSBarry Smith MatPythonCreate - Create a `Mat` object implemented in Python. 52c4aff060SBarry Smith 53c4aff060SBarry Smith Collective on Mat 54c4aff060SBarry Smith 55c4aff060SBarry Smith Input Parameters: 56c4aff060SBarry Smith + comm - MPI communicator 57*11a5261eSBarry Smith . m - number of local rows (or `PETSC_DECIDE` to have calculated if M is given) 58*11a5261eSBarry Smith . n - number of local columns (or `PETSC_DECIDE` to have calculated if N is given) 59*11a5261eSBarry Smith . M - number of global rows (or `PETSC_DECIDE` to have calculated if m is given) 60*11a5261eSBarry Smith . N - number of global columns (or `PETSC_DECIDE` to have calculated if n is given) 61c4aff060SBarry Smith - pyname - full dotted Python name [package].module[.{class|function}] 62c4aff060SBarry Smith 63c4aff060SBarry Smith Output Parameter: 64c4aff060SBarry Smith . A - the matrix 65c4aff060SBarry Smith 66c4aff060SBarry Smith Level: intermediate 67c4aff060SBarry Smith 68*11a5261eSBarry Smith .seealso: `Mat`, `MatType`, `MATPYTHON`, `MatPythonSetType()`, `PetscPythonInitialize()` 69c4aff060SBarry Smith @*/ 709371c9d4SSatish Balay PetscErrorCode MatPythonCreate(MPI_Comm comm, PetscInt m, PetscInt n, PetscInt M, PetscInt N, const char pyname[], Mat *A) { 71c4aff060SBarry Smith PetscFunctionBegin; 72c4aff060SBarry Smith PetscValidCharPointer(pyname, 6); 73c4aff060SBarry Smith PetscValidPointer(A, 6); 749566063dSJacob Faibussowitsch PetscCall(MatCreate(comm, A)); 759566063dSJacob Faibussowitsch PetscCall(MatSetSizes(*A, m, n, M, N)); 769566063dSJacob Faibussowitsch PetscCall(MatSetType(*A, MATPYTHON)); 779566063dSJacob Faibussowitsch PetscCall(MatPythonSetType(*A, pyname)); 78486bdcd3SStefano Zampini PetscCall(MatBindToCPU(*A, PETSC_FALSE)); 79c4aff060SBarry Smith PetscFunctionReturn(0); 80c4aff060SBarry Smith } 81