xref: /petsc/src/mat/impls/python/pythonmat.c (revision 3ba1676111f5c958fe6c2729b46ca4d523958bb3)
1af0996ceSBarry Smith #include <petsc/private/matimpl.h> /*I "petscmat.h" I*/
2c4aff060SBarry Smith 
3c4aff060SBarry Smith /*@C
411a5261eSBarry Smith    MatPythonSetType - Initialize a `Mat` object implemented in Python.
5c4aff060SBarry Smith 
6c3339decSBarry Smith    Collective
7c4aff060SBarry Smith 
8d8d19677SJose E. Roman    Input Parameters:
911a5261eSBarry 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 
1711a5261eSBarry Smith .seealso: `Mat`, `MatType`, `MatCreate()`, `MatSetType()`, `MATPYTHON`, `PetscPythonInitialize()`
18c4aff060SBarry Smith @*/
19d71ae5a4SJacob Faibussowitsch PetscErrorCode MatPythonSetType(Mat mat, const char pyname[])
20d71ae5a4SJacob Faibussowitsch {
21c4aff060SBarry Smith   PetscFunctionBegin;
220700a824SBarry Smith   PetscValidHeaderSpecific(mat, MAT_CLASSID, 1);
23c4aff060SBarry Smith   PetscValidCharPointer(pyname, 2);
24cac4c232SBarry Smith   PetscTryMethod(mat, "MatPythonSetType_C", (Mat, const char[]), (mat, pyname));
25*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
26c4aff060SBarry Smith }
27c4aff060SBarry Smith 
28c4aff060SBarry Smith /*@C
2911a5261eSBarry Smith    MatPythonGetType - Get the type of a `Mat` object implemented in Python.
30ebead697SStefano Zampini 
31ebead697SStefano Zampini    Not collective
32ebead697SStefano Zampini 
33ebead697SStefano Zampini    Input Parameter:
3411a5261eSBarry Smith .  mat - the matrix
35ebead697SStefano Zampini 
36ebead697SStefano Zampini    Output Parameter:
37ebead697SStefano Zampini .  pyname - full dotted Python name [package].module[.{class|function}]
38ebead697SStefano Zampini 
39ebead697SStefano Zampini    Level: intermediate
40ebead697SStefano Zampini 
4111a5261eSBarry Smith .seealso: `Mat`, `MatType`, `MatCreate()`, `MatSetType()`, `MATPYTHON`, `PetscPythonInitialize()`, `MatPythonSetType()`
42ebead697SStefano Zampini @*/
43d71ae5a4SJacob Faibussowitsch PetscErrorCode MatPythonGetType(Mat mat, const char *pyname[])
44d71ae5a4SJacob Faibussowitsch {
45ebead697SStefano Zampini   PetscFunctionBegin;
46ebead697SStefano Zampini   PetscValidHeaderSpecific(mat, MAT_CLASSID, 1);
47ebead697SStefano Zampini   PetscValidPointer(pyname, 2);
48ebead697SStefano Zampini   PetscUseMethod(mat, "MatPythonGetType_C", (Mat, const char *[]), (mat, pyname));
49*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
50ebead697SStefano Zampini }
51ebead697SStefano Zampini 
52ebead697SStefano Zampini /*@C
5311a5261eSBarry Smith    MatPythonCreate - Create a `Mat` object implemented in Python.
54c4aff060SBarry Smith 
55c3339decSBarry Smith    Collective
56c4aff060SBarry Smith 
57c4aff060SBarry Smith    Input Parameters:
58c4aff060SBarry Smith +  comm - MPI communicator
5911a5261eSBarry Smith .  m - number of local rows (or `PETSC_DECIDE` to have calculated if M is given)
6011a5261eSBarry Smith .  n - number of local columns (or `PETSC_DECIDE` to have calculated if N is given)
6111a5261eSBarry Smith .  M - number of global rows (or `PETSC_DECIDE` to have calculated if m is given)
6211a5261eSBarry Smith .  N - number of global columns (or `PETSC_DECIDE` to have calculated if n is given)
63c4aff060SBarry Smith -  pyname - full dotted Python name [package].module[.{class|function}]
64c4aff060SBarry Smith 
65c4aff060SBarry Smith    Output Parameter:
66c4aff060SBarry Smith .  A - the matrix
67c4aff060SBarry Smith 
68c4aff060SBarry Smith    Level: intermediate
69c4aff060SBarry Smith 
7011a5261eSBarry Smith .seealso: `Mat`, `MatType`, `MATPYTHON`, `MatPythonSetType()`, `PetscPythonInitialize()`
71c4aff060SBarry Smith @*/
72d71ae5a4SJacob Faibussowitsch PetscErrorCode MatPythonCreate(MPI_Comm comm, PetscInt m, PetscInt n, PetscInt M, PetscInt N, const char pyname[], Mat *A)
73d71ae5a4SJacob Faibussowitsch {
74c4aff060SBarry Smith   PetscFunctionBegin;
75c4aff060SBarry Smith   PetscValidCharPointer(pyname, 6);
76c4aff060SBarry Smith   PetscValidPointer(A, 6);
779566063dSJacob Faibussowitsch   PetscCall(MatCreate(comm, A));
789566063dSJacob Faibussowitsch   PetscCall(MatSetSizes(*A, m, n, M, N));
799566063dSJacob Faibussowitsch   PetscCall(MatSetType(*A, MATPYTHON));
809566063dSJacob Faibussowitsch   PetscCall(MatPythonSetType(*A, pyname));
81486bdcd3SStefano Zampini   PetscCall(MatBindToCPU(*A, PETSC_FALSE));
82*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
83c4aff060SBarry Smith }
84