source: issm/trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp@ 12022

Last change on this file since 12022 was 12022, checked in by Mathieu Morlighem, 13 years ago

moved MODULEBOOT to ISSMBOOT to avoid conflict with mex

File size: 4.3 KB
Line 
1/* \file WriteData.c:
2 * \brief: general interface for writing data
3 */
4
5#ifdef HAVE_CONFIG_H
6 #include <config.h>
7#else
8#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
9#endif
10
11#include "../../include/include.h"
12#include "../../shared/shared.h"
13#include "./matlabio.h"
14
15#include <mex.h>
16
17/*FUNCTION WriteData(mxArray** pdataref,Matrix* matrix){{{1*/
18void WriteData(mxArray** pdataref,Matrix* matrix){
19
20 int i,j;
21 mxArray* dataref=NULL;
22 double* matrix_ptr=NULL;
23 int rows,cols;
24 double* tmatrix_ptr=NULL;
25
26 if(matrix){
27
28 #ifdef _HAVE_PETSC_
29 PetscMatrixToDoubleMatrix(&matrix_ptr,&rows,&cols,matrix->matrix);
30 #else
31 matrix_ptr=matrix->matrix->ToSerial();
32 matrix->matrix->GetSize(&rows,cols);
33 #endif
34
35 /*Now transpose the matrix: */
36 tmatrix_ptr=(double*)mxMalloc(rows*cols*sizeof(double));
37 for(i=0;i<cols;i++){
38 for(j=0;j<rows;j++){
39 tmatrix_ptr[i*rows+j]=matrix_ptr[j*cols+i];
40 }
41 }
42
43 /*create matlab matrix: */
44 dataref=mxCreateDoubleMatrix(0,0,mxREAL);
45 mxSetM(dataref,rows);
46 mxSetN(dataref,cols);
47 mxSetPr(dataref,tmatrix_ptr);
48
49 /*Free ressources:*/
50 xfree((void**)&matrix_ptr);
51
52 }
53 else{
54 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
55 }
56
57 *pdataref=dataref;
58}
59/*}}}*/
60/*FUNCTION WriteData(mxArray** pdataref,Vector* vector){{{1*/
61void WriteData(mxArray** pdataref,Vector* vector){
62
63 mxArray* dataref=NULL;
64 double* vector_ptr=NULL;
65 int rows;
66
67 if(vector){
68 /*call toolkit routine: */
69 #ifdef _HAVE_PETSC_
70 PetscVectorToDoubleVector(&vector_ptr,&rows,vector->vector);
71 #else
72 vector_ptr=vector->vector->ToMPISerial();
73 vector->vector->GetSize(&rows);
74 #endif
75
76 /*now create the matlab vector: */
77 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
78 mxSetM(dataref,rows);
79 mxSetN(dataref,1);
80 mxSetPr(dataref,vector_ptr);
81 }
82 else{
83 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
84 }
85 *pdataref=dataref;
86
87}
88/*}}}*/
89/*FUNCTION WriteData(mxArray** pdataref,double* matrix, int M,int N){{{1*/
90void WriteData(mxArray** pdataref,double* matrix, int M,int N){
91
92 mxArray* dataref=NULL;
93 mxArray* tdataref=NULL;
94
95 if(matrix){
96
97 /*data is a double* pointer. Copy into a matrix: */
98 tdataref = mxCreateDoubleMatrix(0,0,mxREAL);
99 mxSetM(tdataref,(mwSize)N);
100 mxSetN(tdataref,(mwSize)M);
101 mxSetPr(tdataref,(double*)matrix);
102
103 //transpose
104 mexCallMATLAB(1,&dataref,1,&tdataref, "transpose");
105 }
106 else{
107 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
108 }
109 *pdataref=dataref;
110}
111/*}}}*/
112/*FUNCTION WriteData(mxArray** pdataref,int* matrix, int M,int N){{{1*/
113void WriteData(mxArray** pdataref,int* matrix, int M,int N){
114
115 mxArray* dataref=NULL;
116 mxArray* tdataref=NULL;
117
118 if(matrix){
119
120 /*convert to double matrix*/
121 double* doublematrix=(double*)mxMalloc(M*N*sizeof(double));
122 for(int i=0;i<M*N;i++) doublematrix[i]=(double)matrix[i];
123
124 /*data is a double* pointer. Copy into a matrix: */
125 tdataref = mxCreateDoubleMatrix(0,0,mxREAL);
126 mxSetM(tdataref,(mwSize)N);
127 mxSetN(tdataref,(mwSize)M);
128 mxSetPr(tdataref,(double*)doublematrix);
129
130 //transpose
131 mexCallMATLAB(1,&dataref,1,&tdataref, "transpose");
132 }
133 else{
134 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
135 }
136 *pdataref=dataref;
137}
138/*}}}*/
139/*FUNCTION WriteData(mxArray** pdataref,double* vector, int M){{{1*/
140void WriteData(mxArray** pdataref,double* vector, int M){
141
142 mxArray* dataref=NULL;
143
144 if(vector){
145
146 /*data is a double* pointer. Copy into a vector: */
147 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
148 mxSetM(dataref,(mwSize)M);
149 mxSetN(dataref,(mwSize)1);
150 mxSetPr(dataref,vector);
151 }
152 else{
153 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
154 }
155
156 *pdataref=dataref;
157}
158/*}}}*/
159/*FUNCTION WriteData(mxArray** pdataref,double scalar){{{1*/
160void WriteData(mxArray** pdataref,double scalar){
161
162 *pdataref=mxCreateDoubleScalar(scalar);
163}
164/*}}}*/
165/*FUNCTION WriteData(mxArray** pdataref,int integer){{{1*/
166void WriteData(mxArray** pdataref,int integer){
167
168 *pdataref=mxCreateDoubleScalar((double)integer);
169
170}
171/*}}}*/
172/*FUNCTION WriteData(mxArray** pdataref,int boolean){{{1*/
173void WriteData(mxArray** pdataref,bool boolean){
174
175 *pdataref=mxCreateDoubleScalar((double)boolean);
176
177}
178/*}}}*/
179/*FUNCTION WriteData(mxArray** pdataref,char* string){{{1*/
180void WriteData(mxArray** pdataref,char* string){
181
182 *pdataref=mxCreateString(string);
183}
184/*}}}*/
Note: See TracBrowser for help on using the repository browser.