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) && !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:   engPutVariable((Engine *)mengine,obj->name,mat);
 29: 
 30:   VecRestoreArray(vec,&array);
 31:   return(0);
 32: }
 33: EXTERN_C_END

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

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