Actual source code: gcreatev.c


  2: #include <petscvec.h>
  3: #include <petsc/private/petscimpl.h>

  5: #include <engine.h> /* MATLAB include file */
  6: #include <mex.h>    /* MATLAB include file */

  8: PETSC_EXTERN PetscErrorCode VecMatlabEnginePut_Default(PetscObject obj, void *mengine)
  9: {
 10:   PetscInt           n;
 11:   Vec                vec = (Vec)obj;
 12:   const PetscScalar *array;
 13:   mxArray           *mat;

 15:   VecGetArrayRead(vec, &array);
 16:   VecGetLocalSize(vec, &n);
 17: #if defined(PETSC_USE_COMPLEX)
 18:   mat = mxCreateDoubleMatrix(n, 1, mxCOMPLEX);
 19: #else
 20:   mat = mxCreateDoubleMatrix(n, 1, mxREAL);
 21: #endif
 22:   PetscArraycpy(mxGetPr(mat), array, n);
 23:   PetscObjectName(obj);
 24:   engPutVariable((Engine *)mengine, obj->name, mat);

 26:   VecRestoreArrayRead(vec, &array);
 27:   return 0;
 28: }

 30: PETSC_EXTERN PetscErrorCode VecMatlabEngineGet_Default(PetscObject obj, void *mengine)
 31: {
 32:   PetscInt     n;
 33:   Vec          vec = (Vec)obj;
 34:   PetscScalar *array;
 35:   mxArray     *mat;

 37:   VecGetArray(vec, &array);
 38:   VecGetLocalSize(vec, &n);
 39:   mat = engGetVariable((Engine *)mengine, obj->name);
 41:   PetscArraycpy(array, mxGetPr(mat), n);
 42:   VecRestoreArray(vec, &array);
 43:   return 0;
 44: }