Actual source code: gcreatev.c

  2: #include <petscvec.h>    /*I "petscvec.h" I*/

  4: #include <engine.h>   /* MATLAB include file */
  5: #include <mex.h>      /* MATLAB include file */
  9: PetscErrorCode  VecMatlabEnginePut_Default(PetscObject obj,void *mengine)
 10: {
 12:   PetscInt       n;
 13:   Vec            vec = (Vec)obj;
 14:   PetscScalar    *array;
 15:   mxArray        *mat;

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

 37: PetscErrorCode  VecMatlabEngineGet_Default(PetscObject obj,void *mengine)
 38: {
 40:   PetscInt       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(PETSC_COMM_SELF,PETSC_ERR_LIB,"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: }