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