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