xref: /petsc/src/mat/impls/python/pythonmat.c (revision ebead697dbf761eb322f829370bbe90b3bd93fa3)
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 @*/
197087cfbeSBarry Smith PetscErrorCode  MatPythonSetType(Mat mat,const char pyname[])
20c4aff060SBarry Smith {
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));
25c4aff060SBarry Smith   PetscFunctionReturn(0);
26c4aff060SBarry Smith }
27c4aff060SBarry Smith 
28c4aff060SBarry Smith /*@C
29*ebead697SStefano Zampini    MatPythonGetType - Get the type of a Mat object implemented in Python.
30*ebead697SStefano Zampini 
31*ebead697SStefano Zampini    Not collective
32*ebead697SStefano Zampini 
33*ebead697SStefano Zampini    Input Parameter:
34*ebead697SStefano Zampini .  mat - the matrix object
35*ebead697SStefano Zampini 
36*ebead697SStefano Zampini    Output Parameter:
37*ebead697SStefano Zampini .  pyname - full dotted Python name [package].module[.{class|function}]
38*ebead697SStefano Zampini 
39*ebead697SStefano Zampini    Level: intermediate
40*ebead697SStefano Zampini 
41*ebead697SStefano Zampini .seealso: `MatCreate()`, `MatSetType()`, `MATPYTHON`, `PetscPythonInitialize()`, `MatPythonSetType()`
42*ebead697SStefano Zampini @*/
43*ebead697SStefano Zampini PetscErrorCode  MatPythonGetType(Mat mat,const char *pyname[])
44*ebead697SStefano Zampini {
45*ebead697SStefano Zampini   PetscFunctionBegin;
46*ebead697SStefano Zampini   PetscValidHeaderSpecific(mat,MAT_CLASSID,1);
47*ebead697SStefano Zampini   PetscValidPointer(pyname,2);
48*ebead697SStefano Zampini   PetscUseMethod(mat,"MatPythonGetType_C",(Mat, const char*[]),(mat,pyname));
49*ebead697SStefano Zampini   PetscFunctionReturn(0);
50*ebead697SStefano Zampini }
51*ebead697SStefano Zampini 
52*ebead697SStefano Zampini /*@C
53c4aff060SBarry Smith    MatPythonCreate - Create a Mat object implemented in Python.
54c4aff060SBarry Smith 
55c4aff060SBarry Smith    Collective on Mat
56c4aff060SBarry Smith 
57c4aff060SBarry Smith    Input Parameters:
58c4aff060SBarry Smith +  comm - MPI communicator
59c4aff060SBarry Smith .  m - number of local rows (or PETSC_DECIDE to have calculated if M is given)
60c4aff060SBarry Smith .  n - number of local columns (or PETSC_DECIDE to have calculated if N is given)
61c4aff060SBarry Smith .  M - number of global rows (or PETSC_DECIDE to have calculated if m is given)
62c4aff060SBarry 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 
70db781477SPatrick Sanan .seealso: `MATPYTHON`, `MatPythonSetType()`, `PetscPythonInitialize()`
71c4aff060SBarry Smith 
72c4aff060SBarry Smith @*/
737087cfbeSBarry Smith PetscErrorCode  MatPythonCreate(MPI_Comm comm,PetscInt m,PetscInt n,PetscInt M,PetscInt N,const char pyname[],Mat *A)
74c4aff060SBarry Smith {
75c4aff060SBarry Smith   PetscFunctionBegin;
76c4aff060SBarry Smith   PetscValidCharPointer(pyname,6);
77c4aff060SBarry Smith   PetscValidPointer(A,6);
789566063dSJacob Faibussowitsch   PetscCall(MatCreate(comm,A));
799566063dSJacob Faibussowitsch   PetscCall(MatSetSizes(*A,m,n,M,N));
809566063dSJacob Faibussowitsch   PetscCall(MatSetType(*A,MATPYTHON));
819566063dSJacob Faibussowitsch   PetscCall(MatPythonSetType(*A,pyname));
82486bdcd3SStefano Zampini   PetscCall(MatBindToCPU(*A,PETSC_FALSE));
83c4aff060SBarry Smith   PetscFunctionReturn(0);
84c4aff060SBarry Smith }
85