8 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
12 #include "./../../../c/datastructures/datastructures.h"
16 void WriteData(mxArray** pdataref,
double* matrix,
int M,
int N){
18 mxArray *dataref = NULL;
19 double *tmatrix = NULL;
23 tmatrix=(
double*)mxMalloc(M*N*
sizeof(
double));
26 tmatrix[j*M+i]=matrix[i*N+j];
29 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
30 mxSetM(dataref,(mwSize)M);
31 mxSetN(dataref,(mwSize)N);
32 mxSetPr(dataref,(
double*)tmatrix);
35 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
41 void WriteData(mxArray** pdataref,
int* matrix,
int M,
int N){
43 mxArray* dataref = NULL;
44 double* tmatrix = NULL;
48 double* tmatrix=(
double*)mxMalloc(M*N*
sizeof(
double));
51 tmatrix[j*M+i]=(double)matrix[i*N+j];
54 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
55 mxSetM(dataref,(mwSize)M);
56 mxSetN(dataref,(mwSize)N);
57 mxSetPr(dataref,(
double*)tmatrix);
60 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
66 void WriteData(mxArray** pdataref,
double* vector,
int M){
68 mxArray* dataref = NULL;
69 double* vector_matlab = NULL;
74 vector_matlab=(
double*)mxMalloc(M*
sizeof(
double));
75 for(
int i=0;i<M;i++) vector_matlab[i]=vector[i];
76 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
77 mxSetM(dataref,(mwSize)M);
78 mxSetN(dataref,(mwSize)1);
79 mxSetPr(dataref,vector_matlab);
82 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
89 void WriteData(mxArray** pdataref,
int* vector,
int M){
91 mxArray* dataref = NULL;
92 double* vector_matlab = NULL;
97 vector_matlab=(
double*)mxMalloc(M*
sizeof(
double));
98 for(
int i=0;i<M;i++) vector_matlab[i]=
double(vector[i]);
99 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
100 mxSetM(dataref,(mwSize)M);
101 mxSetN(dataref,(mwSize)1);
102 mxSetPr(dataref,vector_matlab);
105 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
112 void WriteData(mxArray** pdataref,
short* vector,
int M){
114 mxArray* dataref = NULL;
115 double* vector_matlab = NULL;
120 vector_matlab=(
double*)mxMalloc(M*
sizeof(
double));
121 for(
int i=0;i<M;i++) vector_matlab[i]=
double(vector[i]);
122 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
123 mxSetM(dataref,(mwSize)M);
124 mxSetN(dataref,(mwSize)1);
125 mxSetPr(dataref,vector_matlab);
128 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
137 *pdataref=mxCreateDoubleScalar(scalar);
143 *pdataref=mxCreateDoubleScalar((
double)integer);
150 *pdataref=mxCreateDoubleScalar((
double)
boolean);
157 *pdataref=mxCreateString(
string);
174 mxArray *dataref = NULL;
175 const int numfields = 8;
176 const char *fnames[numfields];
178 mwSize dimensions[2] = {1,1};
182 fnames[i++] =
"Vertices";
183 fnames[i++] =
"Edges";
184 fnames[i++] =
"TangentAtEdges";
185 fnames[i++] =
"Corners";
186 fnames[i++] =
"RequiredVertices";
187 fnames[i++] =
"RequiredEdges";
188 fnames[i++] =
"CrackedEdges";
189 fnames[i++] =
"SubDomains";
193 dataref=mxCreateStructArray(ndim,dimensions,numfields,fnames);
216 mxArray *dataref = NULL;
217 const int numfields = 16;
218 const char *fnames[numfields];
220 mwSize dimensions[2] = {1,1};
224 fnames[i++] =
"Vertices";
225 fnames[i++] =
"Edges";
226 fnames[i++] =
"Triangles";
227 fnames[i++] =
"IssmEdges";
228 fnames[i++] =
"IssmSegments";
229 fnames[i++] =
"VerticesOnGeomVertex";
230 fnames[i++] =
"VerticesOnGeomEdge";
231 fnames[i++] =
"EdgesOnGeomEdge";
232 fnames[i++] =
"SubDomains";
233 fnames[i++] =
"SubDomainsFromGeom";
234 fnames[i++] =
"ElementConnectivity";
235 fnames[i++] =
"NodalConnectivity";
236 fnames[i++] =
"NodalElementConnectivity";
237 fnames[i++] =
"CrackedVertices";
238 fnames[i++] =
"CrackedEdges";
239 fnames[i++] =
"PreviousNumbering";
243 dataref=mxCreateStructArray(ndim,dimensions,numfields,fnames);
274 mxArray *dataref = NULL;
275 double *matrix_ptr = NULL;
276 double *tmatrix_ptr = NULL;
284 tmatrix_ptr=(
double*)mxMalloc(rows*cols*
sizeof(
double));
287 tmatrix_ptr[j*rows+i]=matrix_ptr[i*cols+j];
292 dataref=mxCreateDoubleMatrix(0,0,mxREAL);
293 mxSetM(dataref,rows);
294 mxSetN(dataref,cols);
295 mxSetPr(dataref,tmatrix_ptr);
298 xDelete<double>(matrix_ptr);
301 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
310 mxArray* dataref=NULL;
311 double* vector_ptr=NULL;
312 double* vector_matlab=NULL;
321 vector_matlab=(
double*)mxMalloc(rows*
sizeof(
double));
322 for(
int i=0;i<rows;i++) vector_matlab[i]=vector_ptr[i];
324 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
325 mxSetM(dataref,rows);
327 mxSetPr(dataref,vector_matlab);
330 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
334 xDelete<double>(vector_ptr);
343 mxArray *dataref = NULL;
344 const int numfields = 10;
345 const char *fnames[numfields];
347 mwSize dimensions[2] = {1,1};
351 fnames[i++] =
"numsegs";
352 fnames[i++] =
"segments";
353 fnames[i++] =
"pairs";
354 fnames[i++] =
"tips";
355 fnames[i++] =
"penaltypairs";
356 fnames[i++] =
"fill";
357 fnames[i++] =
"friction";
358 fnames[i++] =
"fraction";
359 fnames[i++] =
"fractionincrement";
360 fnames[i++] =
"state";
365 dataref=mxCreateStructArray(ndim,dimensions,numfields,fnames);
368 for(
int i=0;i<riftstruct->
numrifts;i++){
391 mxArray *dataref = NULL;
392 const int numfields = 6;
393 const char *fnames[numfields];
395 mwSize dimensions[2] = {1,1};
400 fnames[i++] =
"name";
401 fnames[i++] =
"nods";
402 fnames[i++] =
"density";
405 fnames[i++] =
"closed";
409 dimensions[0]=contours->
Size();
410 dataref=mxCreateStructArray(ndim,dimensions,numfields,fnames);
413 for(
int i=0;i<contours->
Size();i++){
417 sprintf(
id,
"%i",contour->
id);
441 void SetStructureField(mxArray* dataref,
const char* fieldname,
int M,
int N,
double* fieldpointer){
443 mxArray* field = NULL;
449 mxSetField(dataref,0,fieldname,field);
455 mxArray* field = NULL;
461 mxSetField(dataref,i,fieldname,field);
465 void SetStructureFieldi(mxArray* dataref,
int i,
const char* fieldname,
int M,
int N,
double* fieldpointer){
467 mxArray* field = NULL;
473 mxSetField(dataref,i,fieldname,field);
479 mxArray* field = NULL;
485 mxSetField(dataref,i,fieldname,field);
491 mxArray* field = NULL;
497 mxSetField(dataref,i,fieldname,field);
503 mxArray* field = NULL;
509 mxSetField(dataref,i,fieldname,field);