source: issm/trunk-jpl/src/c/matlab/objects/Bamg/BamgMesh.cpp@ 12011

Last change on this file since 12011 was 12011, checked in by Eric.Larour, 13 years ago

Preliminary commit of new issm version, where serial code is starting to be stripped away. Will not run before some major debugging is done

File size: 7.0 KB
Line 
1#include <stdio.h>
2#include "../objects.h"
3#include "../../io/io.h"
4#include "../../shared/shared.h"
5
6/*Constructors/Destructors*/
7/*FUNCTION BamgMesh::BamgMesh(void* module_struct){{{1*/
8BamgMesh::BamgMesh(void* module_struct){
9
10 mxArray* matlab_struct=NULL;
11 int lines,cols;
12
13 /*recover our pointer: */
14 matlab_struct=(mxArray*)module_struct;
15
16
17 FetchData(&this->Vertices, &this->VerticesSize[0], &this->VerticesSize[1], mxGetAssignedField(matlab_struct,0,"Vertices"));
18 FetchData(&this->Edges, &this->EdgesSize[0], &this->EdgesSize[1], mxGetAssignedField(matlab_struct,0,"Edges"));
19 FetchData(&this->Triangles, &this->TrianglesSize[0], &this->TrianglesSize[1], mxGetAssignedField(matlab_struct,0,"Triangles"));
20 this->QuadrilateralsSize[0]=0, this->QuadrilateralsSize[1]=0; this->Quadrilaterals=NULL;
21
22 this->SubDomainsSize[0]=0, this->SubDomainsSize[1]=0; this->SubDomains=NULL;
23 this->SubDomainsFromGeomSize[0]=0, this->SubDomainsFromGeomSize[1]=0; this->SubDomainsFromGeom=NULL;
24 this->CrackedVerticesSize[0]=0, this->CrackedVerticesSize[1]=0; this->CrackedVertices=NULL;
25 FetchData(&this->CrackedEdges, &this->CrackedEdgesSize[0], &this->CrackedEdgesSize[1], mxGetAssignedField(matlab_struct,0,"CrackedEdges"));
26
27 FetchData(&this->VerticesOnGeomEdge, &this->VerticesOnGeomEdgeSize[0], &this->VerticesOnGeomEdgeSize[1], mxGetAssignedField(matlab_struct,0,"VerticesOnGeomEdge"));
28 FetchData(&this->VerticesOnGeomVertex,&this->VerticesOnGeomVertexSize[0],&this->VerticesOnGeomVertexSize[1],mxGetAssignedField(matlab_struct,0,"VerticesOnGeomVertex"));
29 FetchData(&this->EdgesOnGeomEdge, &this->EdgesOnGeomEdgeSize[0], &this->EdgesOnGeomEdgeSize[1], mxGetAssignedField(matlab_struct,0,"EdgesOnGeomEdge"));
30
31 this->IssmEdgesSize[0]=0, this->IssmEdgesSize[1]=0; this->IssmEdges=NULL;
32 FetchData(&this->IssmSegments, &this->IssmSegmentsSize[0], &this->IssmSegmentsSize[1], mxGetAssignedField(matlab_struct,0,"IssmSegments"));
33
34 this->ElementConnectivitySize[0]=0, this->ElementConnectivitySize[1]=0; this->ElementConnectivity=NULL;
35 this->NodalConnectivitySize[0]=0, this->NodalConnectivitySize[1]=0; this->NodalConnectivity=NULL;
36 this->NodalElementConnectivitySize[0]=0, this->NodalElementConnectivitySize[1]=0; this->NodalElementConnectivity=NULL;
37
38}
39/*}}}*/
40
41/*Methods*/
42/*FUNCTION BamgMesh::SetStructureFields{{{1*/
43void BamgMesh::SetStructureFields(void* module_struct){
44
45 mxArray** matlab_struct=NULL;
46
47 /*Intermediary*/
48 int i;
49 mxArray* output=NULL;
50 const int numfields=16;
51 const char* fnames[numfields];
52 mwSize ndim=2;
53 mwSize dimensions[2]={1,1};
54
55 /*recover pointer: */
56 matlab_struct=(mxArray**)module_struct;
57
58 /*Initialize field names*/
59 i=0;
60 fnames[i++] = "Triangles";
61 fnames[i++] = "Vertices";
62 fnames[i++] = "Edges";
63 fnames[i++] = "IssmSegments";
64 fnames[i++] = "IssmEdges";
65 fnames[i++] = "Quadrilaterals";
66 fnames[i++] = "VerticesOnGeomVertex";
67 fnames[i++] = "VerticesOnGeomEdge";
68 fnames[i++] = "EdgesOnGeomEdge";
69 fnames[i++] = "SubDomains";
70 fnames[i++] = "SubDomainsFromGeom";
71 fnames[i++] = "ElementConnectivity";
72 fnames[i++] = "NodalConnectivity";
73 fnames[i++] = "NodalElementConnectivity";
74 fnames[i++] = "CrackedVertices";
75 fnames[i++] = "CrackedEdges";
76 _assert_(i==numfields);
77
78 /*Initialize Matlab structure*/
79 output=mxCreateStructArray(ndim,dimensions,numfields,fnames);
80
81 /*set each matlab each field*/
82 i=0;
83 i++; SetStructureField(output,"Triangles", this->TrianglesSize[0], this->TrianglesSize[1], this->Triangles);
84 i++; SetStructureField(output,"Vertices", this->VerticesSize[0], this->VerticesSize[1], this->Vertices);
85 i++; SetStructureField(output,"Edges", this->EdgesSize[0], this->EdgesSize[1], this->Edges);
86 i++; SetStructureField(output,"IssmSegments", this->IssmSegmentsSize[0], this->IssmSegmentsSize[1], this->IssmSegments);
87 i++; SetStructureField(output,"IssmEdges", this->IssmEdgesSize[0], this->IssmEdgesSize[1], this->IssmEdges);
88 i++; SetStructureField(output,"Quadrilaterals", this->QuadrilateralsSize[0], this->QuadrilateralsSize[1], this->Quadrilaterals);
89 i++; SetStructureField(output,"VerticesOnGeomVertex",this->VerticesOnGeomVertexSize[0],this->VerticesOnGeomVertexSize[1], this->VerticesOnGeomVertex);
90 i++; SetStructureField(output,"VerticesOnGeomEdge", this->VerticesOnGeomEdgeSize[0], this->VerticesOnGeomEdgeSize[1], this->VerticesOnGeomEdge);
91 i++; SetStructureField(output,"EdgesOnGeomEdge", this->EdgesOnGeomEdgeSize[0], this->EdgesOnGeomEdgeSize[1], this->EdgesOnGeomEdge);
92 i++; SetStructureField(output,"SubDomains", this->SubDomainsSize[0], this->SubDomainsSize[1], this->SubDomains);
93 i++; SetStructureField(output,"SubDomainsFromGeom", this->SubDomainsFromGeomSize[0], this->SubDomainsFromGeomSize[1], this->SubDomainsFromGeom);
94 i++; SetStructureField(output,"ElementConnectivity", this->ElementConnectivitySize[0], this->ElementConnectivitySize[1], this->ElementConnectivity);
95 i++; SetStructureField(output,"NodalConnectivity", this->NodalConnectivitySize[0], this->NodalConnectivitySize[1], this->NodalConnectivity);
96 i++; SetStructureField(output,"NodalElementConnectivity", this->NodalElementConnectivitySize[0], this->NodalElementConnectivitySize[1], this->NodalElementConnectivity);
97 i++; SetStructureField(output,"CrackedVertices", this->CrackedVerticesSize[0], this->CrackedVerticesSize[1], this->CrackedVertices);
98 i++; SetStructureField(output,"CrackedEdges", this->CrackedEdgesSize[0], this->CrackedEdgesSize[1], this->CrackedEdges);
99 _assert_(i==numfields);
100
101 /*Assign output*/
102 *matlab_struct=output;
103
104}
105/*}}}*/
106/*FUNCTION BamgMesh::SetStructureField{{{1*/
107void BamgMesh::SetStructureField(void* module_struct,const char* fieldname,int fieldrows,int fieldcols,double* fieldpointer){
108
109 /*Intermediary*/
110 mxArray* matlab_struct=NULL;
111 int i1,i2;
112 mxArray* pfield=NULL;
113 mxArray* pfield2=NULL;
114
115 /*recover pointer: */
116 matlab_struct=(mxArray*)module_struct;
117
118 /*Copy field*/
119 double* fieldcopy=NULL;
120 if (fieldrows*fieldcols){
121 fieldcopy=(double*)xmalloc(fieldrows*fieldcols*sizeof(double));
122 for(i1=0;i1<fieldrows;i1++){
123 for(i2=0;i2<fieldcols;i2++){
124 fieldcopy[fieldcols*i1+i2]=fieldpointer[fieldcols*i1+i2];
125 }
126 }
127 }
128
129 /*Set matlab field*/
130 pfield=mxCreateDoubleMatrix(0,0,mxREAL);
131 mxSetM(pfield,fieldcols);
132 mxSetN(pfield,fieldrows);
133 mxSetPr(pfield,fieldcopy);
134 mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
135 mxSetField(matlab_struct,0,fieldname,pfield2);
136}
137/*}}}*/
Note: See TracBrowser for help on using the repository browser.