xref: /petsc/src/mat/impls/python/pythonmat.c (revision feff33ee0b5b037fa8f9f294dede656a2f85cc47)
1 #include <petsc/private/matimpl.h>          /*I "petscmat.h" I*/
2 
3 /*@C
4    MatPythonSetType - Initalize a Mat object implemented in Python.
5 
6    Collective on Mat
7 
8    Input Parameter:
9 +  mat - the matrix (Mat) object.
10 -  pyname - full dotted Python name [package].module[.{class|function}]
11 
12    Options Database Key:
13 .  -mat_python_type <pyname>
14 
15    Level: intermediate
16 
17 .keywords: Mat, Python
18 
19 .seealso: MatCreate(), MatSetType(), MATPYTHON, PetscPythonInitialize()
20 @*/
21 PetscErrorCode  MatPythonSetType(Mat mat,const char pyname[])
22 {
23   PetscErrorCode ierr;
24 
25   PetscFunctionBegin;
26   PetscValidHeaderSpecific(mat,MAT_CLASSID,1);
27   PetscValidCharPointer(pyname,2);
28   ierr = PetscTryMethod(mat,"MatPythonSetType_C",(Mat, const char[]),(mat,pyname));CHKERRQ(ierr);
29   PetscFunctionReturn(0);
30 }
31 
32 
33 /*@C
34    MatPythonCreate - Create a Mat object implemented in Python.
35 
36    Collective on Mat
37 
38    Input Parameters:
39 +  comm - MPI communicator
40 .  m - number of local rows (or PETSC_DECIDE to have calculated if M is given)
41 .  n - number of local columns (or PETSC_DECIDE to have calculated if N is given)
42 .  M - number of global rows (or PETSC_DECIDE to have calculated if m is given)
43 .  N - number of global columns (or PETSC_DECIDE to have calculated if n is given)
44 -  pyname - full dotted Python name [package].module[.{class|function}]
45 
46    Output Parameter:
47 .  A - the matrix
48 
49    Level: intermediate
50 
51 .keywords: Mat, Python
52 
53 .seealso: MATPYTHON, MatPythonSetType(), PetscPythonInitialize()
54 
55 @*/
56 PetscErrorCode  MatPythonCreate(MPI_Comm comm,PetscInt m,PetscInt n,PetscInt M,PetscInt N,const char pyname[],Mat *A)
57 {
58   PetscErrorCode ierr;
59 
60   PetscFunctionBegin;
61   PetscValidCharPointer(pyname,6);
62   PetscValidPointer(A,6);
63   ierr = MatCreate(comm,A);CHKERRQ(ierr);
64   ierr = MatSetSizes(*A,m,n,M,N);CHKERRQ(ierr);
65   ierr = MatSetType(*A,MATPYTHON);CHKERRQ(ierr);
66   ierr = MatPythonSetType(*A,pyname);CHKERRQ(ierr);
67   PetscFunctionReturn(0);
68 }
69