Actual source code: gcreatev.c

  1: /*$Id: gcreatev.c,v 1.89 2001/08/07 03:02:17 balay Exp $*/

 3:  #include petscvec.h

  5: #if defined(PETSC_HAVE_MATLAB_ENGINE) && !defined(PETSC_USE_COMPLEX) && !defined(PETSC_USE_SINGLE)
  6: #include "engine.h"   /* Matlab include file */
  7: #include "mex.h"      /* Matlab include file */
  8: EXTERN_C_BEGIN
 11: int VecMatlabEnginePut_Default(PetscObject obj,void *mengine)
 12: {
 13:   int         ierr,n;
 14:   Vec         vec = (Vec)obj;
 15:   PetscScalar *array;
 16:   mxArray     *mat;

 19:   VecGetArray(vec,&array);
 20:   VecGetLocalSize(vec,&n);
 21: #if !defined(PETSC_USE_COMPLEX)
 22:   mat  = mxCreateDoubleMatrix(n,1,mxREAL);
 23: #else
 24:   mat  = mxCreateDoubleMatrix(n,1,mxCOMPLEX);
 25: #endif
 26:   PetscMemcpy(mxGetPr(mat),array,n*sizeof(PetscScalar));
 27:   PetscObjectName(obj);
 28:   mxSetName(mat,obj->name);
 29:   engPutArray((Engine *)mengine,mat);
 30: 
 31:   VecRestoreArray(vec,&array);
 32:   return(0);
 33: }
 34: EXTERN_C_END

 36: EXTERN_C_BEGIN
 39: int VecMatlabEngineGet_Default(PetscObject obj,void *mengine)
 40: {
 41:   int         ierr,n;
 42:   Vec         vec = (Vec)obj;
 43:   PetscScalar *array;
 44:   mxArray     *mat;

 47:   VecGetArray(vec,&array);
 48:   VecGetLocalSize(vec,&n);
 49:   mat  = engGetArray((Engine *)mengine,obj->name);
 50:   if (!mat) SETERRQ1(1,"Unable to get object %s from matlab",obj->name);
 51:   PetscMemcpy(array,mxGetPr(mat),n*sizeof(PetscScalar));
 52:   VecRestoreArray(vec,&array);
 53:   return(0);
 54: }
 55: EXTERN_C_END
 56: #endif