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: }