Actual source code: gcreatev.c

  1: #define PETSCVEC_DLL

 3:  #include petscvec.h

  5: #include "engine.h"   /* Matlab include file */
  6: #include "mex.h"      /* Matlab include file */
 10: PetscErrorCode  VecMatlabEnginePut_Default(PetscObject obj,void *mengine)
 11: {
 13:   PetscInt       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: }

 38: PetscErrorCode  VecMatlabEngineGet_Default(PetscObject obj,void *mengine)
 39: {
 41:   PetscInt       n;
 42:   Vec            vec = (Vec)obj;
 43:   PetscScalar    *array;
 44:   mxArray        *mat;

 47:   VecGetArray(vec,&array);
 48:   VecGetLocalSize(vec,&n);
 49:   mat  = engGetVariable((Engine *)mengine,obj->name);
 50:   if (!mat) SETERRQ1(PETSC_ERR_LIB,"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: }