xref: /petsc/src/sys/classes/matlabengine/ftn-custom/zmatlabf.c (revision 5c6c1daec53e1d9ab0bec9db5309fd8fc7645b8d)
1*5c6c1daeSBarry Smith #include <petsc-private/fortranimpl.h>
2*5c6c1daeSBarry Smith #include <petscmatlab.h>
3*5c6c1daeSBarry Smith 
4*5c6c1daeSBarry Smith #if defined(PETSC_HAVE_FORTRAN_CAPS)
5*5c6c1daeSBarry Smith #define petscmatlabenginecreate_      PETSCMATLABENGINECREATE
6*5c6c1daeSBarry Smith #define petscmatlabengineevaluate_    PETSCMATLABENGINEEVALUATE
7*5c6c1daeSBarry Smith #define petscmatlabenginegetoutput_   PETSCMATLABENGINEGETOUTPUT
8*5c6c1daeSBarry Smith #define petscmatlabengineprintoutput_ PETSCMATLABENGINEPRINTOUTPUT
9*5c6c1daeSBarry Smith #define petscmatlabengineputarray_    PETSCMATLABENGINEPUTARRAY
10*5c6c1daeSBarry Smith #define petscmatlabenginegetarray_    PETSCMATLABENGINEGETARRAY
11*5c6c1daeSBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
12*5c6c1daeSBarry Smith #define petscmatlabenginecreate_      petscmatlabenginecreate
13*5c6c1daeSBarry Smith #define petscmatlabengineevaluate_    petscmatlabengineevaluate
14*5c6c1daeSBarry Smith #define petscmatlabenginegetoutput_   petscmatlabenginegetoutput
15*5c6c1daeSBarry Smith #define petscmatlabengineprintoutput_ petscmatlabengineprintoutput
16*5c6c1daeSBarry Smith #define petscmatlabengineputarray_    petscmatlabengineputarray
17*5c6c1daeSBarry Smith #define petscmatlabenginegetarray_    petscmatlabenginegetarray
18*5c6c1daeSBarry Smith #endif
19*5c6c1daeSBarry Smith 
20*5c6c1daeSBarry Smith EXTERN_C_BEGIN
21*5c6c1daeSBarry Smith 
22*5c6c1daeSBarry Smith void PETSC_STDCALL petscmatlabenginecreate_(MPI_Comm *comm,CHAR m PETSC_MIXED_LEN(len),PetscMatlabEngine *e,
23*5c6c1daeSBarry Smith                                             PetscErrorCode *ierr PETSC_END_LEN(len))
24*5c6c1daeSBarry Smith {
25*5c6c1daeSBarry Smith   char *ms;
26*5c6c1daeSBarry Smith 
27*5c6c1daeSBarry Smith   FIXCHAR(m,len,ms);
28*5c6c1daeSBarry Smith   *ierr = PetscMatlabEngineCreate(MPI_Comm_f2c(*(MPI_Fint *)&*comm),ms,e);
29*5c6c1daeSBarry Smith   FREECHAR(m,ms);
30*5c6c1daeSBarry Smith }
31*5c6c1daeSBarry Smith 
32*5c6c1daeSBarry Smith void PETSC_STDCALL petscmatlabengineevaluate_(PetscMatlabEngine *e,CHAR m PETSC_MIXED_LEN(len),
33*5c6c1daeSBarry Smith                                               PetscErrorCode *ierr PETSC_END_LEN(len))
34*5c6c1daeSBarry Smith {
35*5c6c1daeSBarry Smith   char *ms;
36*5c6c1daeSBarry Smith   FIXCHAR(m,len,ms);
37*5c6c1daeSBarry Smith   *ierr = PetscMatlabEngineEvaluate(*e,ms);
38*5c6c1daeSBarry Smith   FREECHAR(m,ms);
39*5c6c1daeSBarry Smith }
40*5c6c1daeSBarry Smith 
41*5c6c1daeSBarry Smith void PETSC_STDCALL petscmatlabengineputarray_(PetscMatlabEngine *e,PetscInt *m,PetscInt *n,PetscScalar *a,
42*5c6c1daeSBarry Smith                                               CHAR s PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
43*5c6c1daeSBarry Smith {
44*5c6c1daeSBarry Smith   char *ms;
45*5c6c1daeSBarry Smith   FIXCHAR(s,len,ms);
46*5c6c1daeSBarry Smith   *ierr = PetscMatlabEnginePutArray(*e,*m,*n,a,ms);
47*5c6c1daeSBarry Smith   FREECHAR(s,ms);
48*5c6c1daeSBarry Smith }
49*5c6c1daeSBarry Smith 
50*5c6c1daeSBarry Smith void PETSC_STDCALL petscmatlabenginegetarray_(PetscMatlabEngine *e,PetscInt *m,PetscInt *n,PetscScalar *a,
51*5c6c1daeSBarry Smith                                               CHAR s PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
52*5c6c1daeSBarry Smith {
53*5c6c1daeSBarry Smith   char *ms;
54*5c6c1daeSBarry Smith   FIXCHAR(s,len,ms);
55*5c6c1daeSBarry Smith   *ierr = PetscMatlabEngineGetArray(*e,*m,*n,a,ms);
56*5c6c1daeSBarry Smith   FREECHAR(s,ms);
57*5c6c1daeSBarry Smith }
58*5c6c1daeSBarry Smith 
59*5c6c1daeSBarry Smith /*
60*5c6c1daeSBarry Smith extern int PetscMatlabEngineGetOutput(PetscMatlabEngine,char **);
61*5c6c1daeSBarry Smith extern int PetscMatlabEnginePrintOutput(PetscMatlabEngine,FILE*);
62*5c6c1daeSBarry Smith */
63*5c6c1daeSBarry Smith 
64*5c6c1daeSBarry Smith EXTERN_C_END
65