xref: /petsc/src/mat/impls/python/pythonmat.c (revision 9371c9d470a9602b6d10a8bf50c9b2280a79e45a)
1af0996ceSBarry Smith #include <petsc/private/matimpl.h> /*I "petscmat.h" I*/
2c4aff060SBarry Smith 
3c4aff060SBarry Smith /*@C
4a5b23f4aSJose E. Roman    MatPythonSetType - Initialize a Mat object implemented in Python.
5c4aff060SBarry Smith 
6c4aff060SBarry Smith    Collective on Mat
7c4aff060SBarry Smith 
8d8d19677SJose E. Roman    Input Parameters:
9c4aff060SBarry Smith +  mat - the matrix (Mat) 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 
17db781477SPatrick Sanan .seealso: `MatCreate()`, `MatSetType()`, `MATPYTHON`, `PetscPythonInitialize()`
18c4aff060SBarry Smith @*/
19*9371c9d4SSatish 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
28ebead697SStefano Zampini    MatPythonGetType - Get the type of a Mat object implemented in Python.
29ebead697SStefano Zampini 
30ebead697SStefano Zampini    Not collective
31ebead697SStefano Zampini 
32ebead697SStefano Zampini    Input Parameter:
33ebead697SStefano Zampini .  mat - the matrix object
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 
40ebead697SStefano Zampini .seealso: `MatCreate()`, `MatSetType()`, `MATPYTHON`, `PetscPythonInitialize()`, `MatPythonSetType()`
41ebead697SStefano Zampini @*/
42*9371c9d4SSatish 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
51c4aff060SBarry 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
57c4aff060SBarry Smith .  m - number of local rows (or PETSC_DECIDE to have calculated if M is given)
58c4aff060SBarry Smith .  n - number of local columns (or PETSC_DECIDE to have calculated if N is given)
59c4aff060SBarry Smith .  M - number of global rows (or PETSC_DECIDE to have calculated if m is given)
60c4aff060SBarry 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 
68db781477SPatrick Sanan .seealso: `MATPYTHON`, `MatPythonSetType()`, `PetscPythonInitialize()`
69c4aff060SBarry Smith 
70c4aff060SBarry Smith @*/
71*9371c9d4SSatish Balay PetscErrorCode MatPythonCreate(MPI_Comm comm, PetscInt m, PetscInt n, PetscInt M, PetscInt N, const char pyname[], Mat *A) {
72c4aff060SBarry Smith   PetscFunctionBegin;
73c4aff060SBarry Smith   PetscValidCharPointer(pyname, 6);
74c4aff060SBarry Smith   PetscValidPointer(A, 6);
759566063dSJacob Faibussowitsch   PetscCall(MatCreate(comm, A));
769566063dSJacob Faibussowitsch   PetscCall(MatSetSizes(*A, m, n, M, N));
779566063dSJacob Faibussowitsch   PetscCall(MatSetType(*A, MATPYTHON));
789566063dSJacob Faibussowitsch   PetscCall(MatPythonSetType(*A, pyname));
79486bdcd3SStefano Zampini   PetscCall(MatBindToCPU(*A, PETSC_FALSE));
80c4aff060SBarry Smith   PetscFunctionReturn(0);
81c4aff060SBarry Smith }
82