xref: /petsc/src/sys/classes/matlabengine/ftn-custom/zmatlabf.c (revision 5975b3b6e3931510e2a64a701673cbe1930c6f42)
1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
25c6c1daeSBarry Smith #include <petscmatlab.h>
35c6c1daeSBarry Smith 
45c6c1daeSBarry Smith #if defined(PETSC_HAVE_FORTRAN_CAPS)
55c6c1daeSBarry Smith   #define petscmatlabenginecreate_      PETSCMATLABENGINECREATE
65c6c1daeSBarry Smith   #define petscmatlabengineevaluate_    PETSCMATLABENGINEEVALUATE
75c6c1daeSBarry Smith   #define petscmatlabenginegetoutput_   PETSCMATLABENGINEGETOUTPUT
85c6c1daeSBarry Smith   #define petscmatlabengineprintoutput_ PETSCMATLABENGINEPRINTOUTPUT
95c6c1daeSBarry Smith   #define petscmatlabengineputarray_    PETSCMATLABENGINEPUTARRAY
105c6c1daeSBarry Smith   #define petscmatlabenginegetarray_    PETSCMATLABENGINEGETARRAY
115c6c1daeSBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
125c6c1daeSBarry Smith   #define petscmatlabenginecreate_      petscmatlabenginecreate
135c6c1daeSBarry Smith   #define petscmatlabengineevaluate_    petscmatlabengineevaluate
145c6c1daeSBarry Smith   #define petscmatlabenginegetoutput_   petscmatlabenginegetoutput
155c6c1daeSBarry Smith   #define petscmatlabengineprintoutput_ petscmatlabengineprintoutput
165c6c1daeSBarry Smith   #define petscmatlabengineputarray_    petscmatlabengineputarray
175c6c1daeSBarry Smith   #define petscmatlabenginegetarray_    petscmatlabenginegetarray
185c6c1daeSBarry Smith #endif
195c6c1daeSBarry Smith 
20*5975b3b6SBarry Smith PETSC_EXTERN void petscmatlabenginecreate_(MPI_Comm *comm, char *m, PetscMatlabEngine *e, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
215c6c1daeSBarry Smith {
225c6c1daeSBarry Smith   char *ms;
235c6c1daeSBarry Smith 
245c6c1daeSBarry Smith   FIXCHAR(m, len, ms);
25*5975b3b6SBarry Smith   *ierr = PetscMatlabEngineCreate(MPI_Comm_f2c(*(MPI_Fint *)&*comm), ms, e);
26*5975b3b6SBarry Smith   if (*ierr) return;
275c6c1daeSBarry Smith   FREECHAR(m, ms);
285c6c1daeSBarry Smith }
295c6c1daeSBarry Smith 
30*5975b3b6SBarry Smith PETSC_EXTERN void petscmatlabengineevaluate_(PetscMatlabEngine *e, char *m, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
315c6c1daeSBarry Smith {
325c6c1daeSBarry Smith   char *ms;
335c6c1daeSBarry Smith   FIXCHAR(m, len, ms);
34*5975b3b6SBarry Smith   *ierr = PetscMatlabEngineEvaluate(*e, ms);
35*5975b3b6SBarry Smith   if (*ierr) return;
365c6c1daeSBarry Smith   FREECHAR(m, ms);
375c6c1daeSBarry Smith }
385c6c1daeSBarry Smith 
39*5975b3b6SBarry Smith PETSC_EXTERN void petscmatlabengineputarray_(PetscMatlabEngine *e, PetscInt *m, PetscInt *n, PetscScalar *a, char *s, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
405c6c1daeSBarry Smith {
415c6c1daeSBarry Smith   char *ms;
425c6c1daeSBarry Smith   FIXCHAR(s, len, ms);
43*5975b3b6SBarry Smith   *ierr = PetscMatlabEnginePutArray(*e, *m, *n, a, ms);
44*5975b3b6SBarry Smith   if (*ierr) return;
455c6c1daeSBarry Smith   FREECHAR(s, ms);
465c6c1daeSBarry Smith }
475c6c1daeSBarry Smith 
48*5975b3b6SBarry Smith PETSC_EXTERN void petscmatlabenginegetarray_(PetscMatlabEngine *e, PetscInt *m, PetscInt *n, PetscScalar *a, char *s, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
495c6c1daeSBarry Smith {
505c6c1daeSBarry Smith   char *ms;
515c6c1daeSBarry Smith   FIXCHAR(s, len, ms);
52*5975b3b6SBarry Smith   *ierr = PetscMatlabEngineGetArray(*e, *m, *n, a, ms);
53*5975b3b6SBarry Smith   if (*ierr) return;
545c6c1daeSBarry Smith   FREECHAR(s, ms);
555c6c1daeSBarry Smith }
56