source: issm/oecreview/Archive/22819-23185/ISSM-23064-23065.diff@ 23186

Last change on this file since 23186 was 23186, checked in by Mathieu Morlighem, 7 years ago

CHG: added Archive/22819-23185

File size: 18.4 KB
RevLine 
[23186]1Index: ../trunk-jpl/externalpackages/neopz/install.sh
2===================================================================
3--- ../trunk-jpl/externalpackages/neopz/install.sh (revision 23064)
4+++ ../trunk-jpl/externalpackages/neopz/install.sh (revision 23065)
5@@ -19,7 +19,7 @@
6
7 #Configure neopz using cmake
8 cd $PROJECT_SOURCE_DIR
9-cmake -DCMAKE_INSTALL_PREFIX:PATH=$PROJECT_BINARY_DIR
10+cmake -DCMAKE_INSTALL_PREFIX:PATH=$PROJECT_BINARY_DIR -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-g -O3"
11
12 cd $PROJECT_SOURCE_DIR
13 make
14Index: ../trunk-jpl/src/c/classes/AmrBamg.h
15===================================================================
16--- ../trunk-jpl/src/c/classes/AmrBamg.h (revision 23064)
17+++ ../trunk-jpl/src/c/classes/AmrBamg.h (revision 23065)
18@@ -34,7 +34,7 @@
19
20 /*General methods*/
21 void Initialize(int* elements,IssmDouble* x,IssmDouble* y,int numberofvertices,int numberofelements);
22- void ExecuteRefinementBamg(IssmDouble* field,IssmDouble* hmaxVertices,int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist);
23+ void ExecuteRefinementBamg(IssmDouble* field,IssmDouble* hmaxVertices,int** pdatalist,IssmDouble** pxylist,int** pelementslist);
24 void SetBamgOpts(IssmDouble hmin_in,IssmDouble hmax_in,IssmDouble err_in,IssmDouble gradation_in);
25
26 private:
27Index: ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h
28===================================================================
29--- ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h (revision 23064)
30+++ ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h (revision 23065)
31@@ -66,11 +66,9 @@
32 /*General methods*/
33 void CleanUp();
34 void Initialize();
35- void ExecuteRefinement(int numberofpoints,double* xylist,int* pnewnumberofvertices,int* pnewnumberofelements,double** px,double** py,int** pelementslist);
36- void ExecuteRefinement(int numberofpoints,double* xylist,double* deviatoricerror,double* thicknesserror,int* pnewnumberofvertices,int* pnewnumberofelements,double** px,double** py,int** pelementslist);
37- void ExecuteRefinement(double* gl_distance,double* if_distance,double* deviatoricerror,double* thicknesserror,int* pnewnumberofvertices,int* pnewnumberofelements,double** px,double** py,int** pelementslist);
38+ void ExecuteRefinement(double* gl_distance,double* if_distance,double* deviatoricerror,double* thicknesserror,int** pdatalist,double** pxy,int** pelementslist);
39 void CreateInitialMesh(int &nvertices,int &nelements,double* x,double* y,int* elements);
40- void CheckMesh(int* nvertices,int* nelements,double** px,double** py,int** pelements);
41+ void CheckMesh(int** pdata,double** pxy,int** pelements);
42 /*}}}*/
43 private:
44 /*Private attributes{{{*/
45@@ -85,7 +83,7 @@
46 void RefineMeshWithSmoothing(bool &verbose,TPZGeoMesh* gmesh);
47 void RefineMeshToAvoidHangingNodes(bool &verbose,TPZGeoMesh* gmesh);
48 void DeleteSpecialElements(bool &verbose,TPZGeoMesh* gmesh);
49- void GetMesh(TPZGeoMesh* gmesh,int* nvertices,int* nelements,double** px,double** py,int** pelements);
50+ void GetMesh(TPZGeoMesh* gmesh,int** pdata,double** pxy,int** pelements);
51 TPZGeoMesh* CreateRefPatternMesh(TPZGeoMesh* gmesh);
52 inline int GetElemMaterialID(){return 1;}
53 inline int GetNumberOfNodes(){return 3;}
54Index: ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp
55===================================================================
56--- ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp (revision 23064)
57+++ ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp (revision 23065)
58@@ -99,7 +99,7 @@
59 /*}}}*/
60
61 /*Mesh refinement methods*/
62-void AdaptiveMeshRefinement::ExecuteRefinement(double* gl_distance,double* if_distance,double* deviatoricerror,double* thicknesserror,int* pnewnumberofvertices,int* pnewnumberofelements,double** px,double** py,int** pelementslist){/*{{{*/
63+void AdaptiveMeshRefinement::ExecuteRefinement(double* gl_distance,double* if_distance,double* deviatoricerror,double* thicknesserror,int** pdatalist,double** pxylist,int** pelementslist){/*{{{*/
64
65 /*IMPORTANT! pelementslist are in Matlab indexing*/
66 /*NEOPZ works only in C indexing*/
67@@ -122,10 +122,10 @@
68 this->RefineMeshOneLevel(verbose,gl_distance,if_distance,deviatoricerror,thicknesserror);
69
70 /*Get new geometric mesh in ISSM data structure*/
71- this->GetMesh(this->previousmesh,pnewnumberofvertices,pnewnumberofelements,px,py,pelementslist);
72+ this->GetMesh(this->previousmesh,pdatalist,pxylist,pelementslist);
73
74 /*Verify the new geometry*/
75- this->CheckMesh(pnewnumberofvertices,pnewnumberofelements,px,py,pelementslist);
76+ this->CheckMesh(pdatalist,pxylist,pelementslist);
77 }
78 /*}}}*/
79 void AdaptiveMeshRefinement::RefineMeshOneLevel(bool &verbose,double* gl_distance,double* if_distance,double* deviatoricerror,double* thicknesserror){/*{{{*/
80@@ -448,7 +448,7 @@
81 gmesh->BuildConnectivity();
82 }
83 /*}}}*/
84-void AdaptiveMeshRefinement::GetMesh(TPZGeoMesh* gmesh,int* nvertices,int* nelements,double** px,double** py, int** pelements){/*{{{*/
85+void AdaptiveMeshRefinement::GetMesh(TPZGeoMesh* gmesh,int** pdata,double** pxy, int** pelements){/*{{{*/
86
87 /* IMPORTANT! pelements are in Matlab indexing
88 NEOPZ works only in C indexing.
89@@ -461,8 +461,8 @@
90 int nconformelements,nconformvertices;
91 int ntotalvertices = gmesh->NNodes();
92 int* newelements = NULL;
93- double* newmeshX = NULL;
94- double* newmeshY = NULL;
95+ int* newdata = NULL;
96+ double* newmeshXY = NULL;
97 TPZGeoEl* geoel = NULL;
98 long* vertex_index2sid = xNew<long>(ntotalvertices);
99 this->index2sid.clear(); this->index2sid.resize(gmesh->NElements());
100@@ -493,11 +493,14 @@
101 }
102 }
103
104+ /* Create new mesh structure and fill it */
105 nconformelements = (int)this->sid2index.size();
106 nconformvertices = (int)sid;
107 newelements = xNew<int>(nconformelements*this->GetNumberOfNodes());
108- newmeshX = xNew<double>(nconformvertices);
109- newmeshY = xNew<double>(nconformvertices);
110+ newmeshXY = xNew<double>(nconformvertices*2);
111+ newdata = xNew<int>(2);
112+ newdata[0] = nconformvertices;
113+ newdata[1] = nconformelements;
114
115 for(int i=0;i<ntotalvertices;i++){//over the TPZNode index (fill in the ISSM vertices coords)
116 sid=vertex_index2sid[i];
117@@ -504,8 +507,8 @@
118 if(sid==-1) continue;//skip this index (node no used)
119 TPZVec<REAL> coords(3,0.);
120 gmesh->NodeVec()[i].GetCoordinates(coords);
121- newmeshX[sid] = coords[0];
122- newmeshY[sid] = coords[1];
123+ newmeshXY[2*sid] = coords[0]; // X
124+ newmeshXY[2*sid+1] = coords[1]; // Y
125 }
126
127 for(int i=0;i<this->sid2index.size();i++){//over the sid (fill the ISSM elements)
128@@ -524,9 +527,9 @@
129 b=newelements[i*this->GetNumberOfNodes()+1]-1;
130 c=newelements[i*this->GetNumberOfNodes()+2]-1;
131
132- xa=newmeshX[a]; ya=newmeshY[a];
133- xb=newmeshX[b]; yb=newmeshY[b];
134- xc=newmeshX[c]; yc=newmeshY[c];
135+ xa=newmeshXY[2*a]; ya=newmeshXY[2*a+1];
136+ xb=newmeshXY[2*b]; yb=newmeshXY[2*b+1];
137+ xc=newmeshXY[2*c]; yc=newmeshXY[2*c+1];
138
139 detJ=(xb-xa)*(yc-ya)-(xc-xa)*(yb-ya);
140
141@@ -538,10 +541,8 @@
142 }
143
144 /*Setting outputs*/
145- *nvertices = nconformvertices;
146- *nelements = nconformelements;
147- *px = newmeshX;
148- *py = newmeshY;
149+ *pdata = newdata;
150+ *pxy = newmeshXY;
151 *pelements = newelements;
152
153 /*Cleanup*/
154@@ -692,37 +693,14 @@
155 return newgmesh;
156 }
157 /*}}}*/
158-void AdaptiveMeshRefinement::CheckMesh(int* nvertices,int* nelements,double** px,double** py,int** pelements){/*{{{*/
159+void AdaptiveMeshRefinement::CheckMesh(int** pdata,double** pxy,int** pelements){/*{{{*/
160
161 /*Basic verification*/
162- if(nvertices<=0) _error_("Impossible to continue: nvertices <=0!\n");
163- if(nelements<=0) _error_("Impossible to continue: nelements <=0!\n");
164- if(!px) _error_("Impossible to continue: px is NULL!\n");
165- if(!py) _error_("Impossible to continue: py is NULL!\n");
166+ if(!pdata) _error_("Impossible to continue: pdata is NULL!\n");
167+ if(pdata[0]<=0) _error_("Impossible to continue: nvertices <=0!\n");
168+ if(pdata[1]<=0) _error_("Impossible to continue: nelements <=0!\n");
169+ if(!pxy) _error_("Impossible to continue: pxy is NULL!\n");
170 if(!pelements) _error_("Impossible to continue: pelements is NULL!\n");
171-
172- /*Verify if there are orphan nodes*/
173- std::set<int> elemvertices;
174- elemvertices.clear();
175- for(int i=0;i<*nelements;i++){
176- for(int j=0;j<this->GetNumberOfNodes();j++) {
177- elemvertices.insert((*pelements)[i*this->GetNumberOfNodes()+j]);
178- }
179- }
180- if(elemvertices.size()!=*nvertices) _error_("Impossible to continue: elemvertices.size() != nvertices!\n");
181-
182- //Verify if there are inf or NaN in coords
183- for(int i=0;i<*nvertices;i++){
184- if(std::isnan((*px)[i]) || std::isinf((*px)[i])) _error_("Impossible to continue: px i=" << i <<" is NaN or Inf!\n");
185- if(std::isnan((*py)[i]) || std::isinf((*py)[i])) _error_("Impossible to continue: py i=" << i <<" is NaN or Inf!\n");
186- }
187- for(int i=0;i<*nelements;i++){
188- for(int j=0;j<this->GetNumberOfNodes();j++){
189- if(std::isnan((*pelements)[i*GetNumberOfNodes()+j])) _error_("Impossible to continue: px i=" << i <<" is NaN!\n");
190- if(std::isinf((*pelements)[i*GetNumberOfNodes()+j])) _error_("Impossible to continue: px i=" << i <<" is Inf!\n");
191- }
192- }
193-
194 }
195 /*}}}*/
196 void AdaptiveMeshRefinement::PrintGMeshVTK(TPZGeoMesh* gmesh,std::ofstream &file,bool matColor){/*{{{*/
197Index: ../trunk-jpl/src/c/classes/FemModel.cpp
198===================================================================
199--- ../trunk-jpl/src/c/classes/FemModel.cpp (revision 23064)
200+++ ../trunk-jpl/src/c/classes/FemModel.cpp (revision 23065)
201@@ -4876,7 +4876,9 @@
202 IssmDouble *newx = NULL;
203 IssmDouble *newy = NULL;
204 IssmDouble *newz = NULL;
205+ IssmDouble *newxylist = NULL;
206 int *newelementslist = NULL;
207+ int* newdatalist = NULL;
208 int newnumberofvertices = -1;
209 int newnumberofelements = -1;
210
211@@ -4910,36 +4912,45 @@
212 }
213
214 if(my_rank==0){
215- this->amrbamg->ExecuteRefinementBamg(vector_serial,hmaxvertices_serial,&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist);
216- if(newnumberofvertices<=0 || newnumberofelements<=0) _error_("Error in the refinement process.");
217+ this->amrbamg->ExecuteRefinementBamg(vector_serial,hmaxvertices_serial,&newdatalist,&newxylist,&newelementslist);
218+ if(newdatalist[0]<=0 || newdatalist[1]<=0) _error_("Error in the refinement process.");
219 }
220
221- /*Cleanup*/
222- xDelete<IssmDouble>(vector_serial);
223- xDelete<IssmDouble>(hmaxvertices_serial);
224- delete vector;
225+ /*Send new mesh to others CPU's*/
226+ if(my_rank) newdatalist=xNew<int>(2);
227+ ISSM_MPI_Bcast(newdatalist,2,ISSM_MPI_INT,0,IssmComm::GetComm());
228+ newnumberofvertices=newdatalist[0];
229+ newnumberofelements=newdatalist[1];
230+ if(my_rank){
231+ newxylist =xNew<IssmDouble>(newnumberofvertices*2);
232+ newelementslist=xNew<int>(newnumberofelements*this->GetElementsWidth());
233+ }
234+ ISSM_MPI_Bcast(newxylist,newnumberofvertices*2,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
235+ ISSM_MPI_Bcast(newelementslist,newnumberofelements*this->GetElementsWidth(),ISSM_MPI_INT,0,IssmComm::GetComm());
236
237- /*Send new mesh to others CPU*/
238- ISSM_MPI_Bcast(&newnumberofvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
239- ISSM_MPI_Bcast(&newnumberofelements,1,ISSM_MPI_INT,0,IssmComm::GetComm());
240- if(my_rank){
241- newx=xNew<IssmDouble>(newnumberofvertices);
242- newy=xNew<IssmDouble>(newnumberofvertices);
243- newz=xNew<IssmDouble>(newnumberofvertices);
244- newelementslist=xNew<int>(newnumberofelements*this->GetElementsWidth());
245- }
246- ISSM_MPI_Bcast(newx,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
247- ISSM_MPI_Bcast(newy,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
248- ISSM_MPI_Bcast(newz,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
249- ISSM_MPI_Bcast(newelementslist,newnumberofelements*this->GetElementsWidth(),ISSM_MPI_INT,0,IssmComm::GetComm());
250+ /*Reorganize the data*/
251+ newx=xNew<IssmDouble>(newnumberofvertices);
252+ newy=xNew<IssmDouble>(newnumberofvertices);
253+ newz=xNewZeroInit<IssmDouble>(newnumberofvertices);
254+ for(int i=0;i<newnumberofvertices;i++){
255+ newx[i] = newxylist[2*i];
256+ newy[i] = newxylist[2*i+1];
257+ }
258
259- /*Assign output pointers*/
260- *pnewnumberofvertices = newnumberofvertices;
261- *pnewnumberofelements = newnumberofelements;
262- *pnewx = newx;
263- *pnewy = newy;
264- *pnewz = newz;
265- *pnewelementslist = newelementslist;
266+ /*Assign output pointers*/
267+ *pnewnumberofvertices = newnumberofvertices;
268+ *pnewnumberofelements = newnumberofelements;
269+ *pnewx = newx;
270+ *pnewy = newy;
271+ *pnewz = newz;
272+ *pnewelementslist = newelementslist;
273+
274+ /*Cleanup*/
275+ xDelete<int>(newdatalist);
276+ xDelete<IssmDouble>(newxylist);
277+ xDelete<IssmDouble>(vector_serial);
278+ xDelete<IssmDouble>(hmaxvertices_serial);
279+ delete vector;
280 }
281 /*}}}*/
282 void FemModel::InitializeAdaptiveRefinementBamg(void){/*{{{*/
283@@ -5189,7 +5200,6 @@
284
285 /*pnewelementslist keep vertices in Matlab indexing*/
286 int my_rank = IssmComm::GetRank();
287- int numberofelements = this->elements->NumberOfElements();
288 IssmDouble* gl_distance = NULL;
289 IssmDouble* if_distance = NULL;
290 IssmDouble* deviatoricerror= NULL;
291@@ -5197,8 +5207,10 @@
292 IssmDouble* newx = NULL;
293 IssmDouble* newy = NULL;
294 IssmDouble* newz = NULL;
295+ IssmDouble* newxylist = NULL;
296 int* newelementslist = NULL;
297- int newnumberofvertices = -1;
298+ int* newdatalist = NULL;
299+ int newnumberofvertices = -1;
300 int newnumberofelements = -1;
301
302 /*Get fields, if requested*/
303@@ -5209,38 +5221,46 @@
304
305 if(my_rank==0){
306 this->amr->ExecuteRefinement(gl_distance,if_distance,deviatoricerror,thicknesserror,
307- &newnumberofvertices,&newnumberofelements,&newx,&newy,&newelementslist);
308- newz=xNewZeroInit<IssmDouble>(newnumberofvertices);
309- if(newnumberofvertices<=0 || newnumberofelements<=0) _error_("Error in the ReMeshNeopz.");
310+ &newdatalist,&newxylist,&newelementslist);
311+ if(newdatalist[0]<=0 || newdatalist[1]<=0) _error_("Error in the ReMeshNeopz.");
312 }
313
314- /*Send new mesh to others CPU*/
315- ISSM_MPI_Bcast(&newnumberofvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
316- ISSM_MPI_Bcast(&newnumberofelements,1,ISSM_MPI_INT,0,IssmComm::GetComm());
317- if(my_rank){
318- newx=xNew<IssmDouble>(newnumberofvertices);
319- newy=xNew<IssmDouble>(newnumberofvertices);
320- newz=xNew<IssmDouble>(newnumberofvertices);
321- newelementslist=xNew<int>(newnumberofelements*this->GetElementsWidth());
322- }
323- ISSM_MPI_Bcast(newx,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
324- ISSM_MPI_Bcast(newy,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
325- ISSM_MPI_Bcast(newz,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
326- ISSM_MPI_Bcast(newelementslist,newnumberofelements*this->GetElementsWidth(),ISSM_MPI_INT,0,IssmComm::GetComm());
327+ /*Send new mesh to others CPU's*/
328+ if(my_rank) newdatalist=xNew<int>(2);
329+ ISSM_MPI_Bcast(newdatalist,2,ISSM_MPI_INT,0,IssmComm::GetComm());
330+ newnumberofvertices=newdatalist[0];
331+ newnumberofelements=newdatalist[1];
332+ if(my_rank){
333+ newxylist =xNew<IssmDouble>(newnumberofvertices*2);
334+ newelementslist=xNew<int>(newnumberofelements*this->GetElementsWidth());
335+ }
336+ ISSM_MPI_Bcast(newxylist,newnumberofvertices*2,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
337+ ISSM_MPI_Bcast(newelementslist,newnumberofelements*this->GetElementsWidth(),ISSM_MPI_INT,0,IssmComm::GetComm());
338
339+ /*Reorganize the data*/
340+ newx=xNew<IssmDouble>(newnumberofvertices);
341+ newy=xNew<IssmDouble>(newnumberofvertices);
342+ newz=xNewZeroInit<IssmDouble>(newnumberofvertices);
343+ for(int i=0;i<newnumberofvertices;i++){
344+ newx[i] = newxylist[2*i];
345+ newy[i] = newxylist[2*i+1];
346+ }
347+
348 /*Assign the pointers*/
349- (*pnewelementslist) = newelementslist; //Matlab indexing
350- (*pnewx) = newx;
351- (*pnewy) = newy;
352- (*pnewz) = newz;
353- *pnewnumberofvertices= newnumberofvertices;
354- *pnewnumberofelements= newnumberofelements;
355+ (*pnewelementslist) = newelementslist; //Matlab indexing
356+ (*pnewx) = newx;
357+ (*pnewy) = newy;
358+ (*pnewz) = newz;
359+ *pnewnumberofvertices= newnumberofvertices;
360+ *pnewnumberofelements= newnumberofelements;
361
362 /*Cleanup*/
363- xDelete<IssmDouble>(deviatoricerror);
364- xDelete<IssmDouble>(thicknesserror);
365- xDelete<IssmDouble>(gl_distance);
366- xDelete<IssmDouble>(if_distance);
367+ xDelete<int>(newdatalist);
368+ xDelete<IssmDouble>(newxylist);
369+ xDelete<IssmDouble>(deviatoricerror);
370+ xDelete<IssmDouble>(thicknesserror);
371+ xDelete<IssmDouble>(gl_distance);
372+ xDelete<IssmDouble>(if_distance);
373 }
374 /*}}}*/
375 void FemModel::InitializeAdaptiveRefinementNeopz(void){/*{{{*/
376Index: ../trunk-jpl/src/c/classes/AmrBamg.cpp
377===================================================================
378--- ../trunk-jpl/src/c/classes/AmrBamg.cpp (revision 23064)
379+++ ../trunk-jpl/src/c/classes/AmrBamg.cpp (revision 23065)
380@@ -97,7 +97,7 @@
381 /*Cleanup and return*/
382 delete Th;
383 }/*}}}*/
384-void AmrBamg::ExecuteRefinementBamg(IssmDouble* field,IssmDouble* hmaxVertices,int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist){/*{{{*/
385+void AmrBamg::ExecuteRefinementBamg(IssmDouble* field,IssmDouble* hmaxVertices,int** pdatalist,IssmDouble** pxylist,int** pelementslist){/*{{{*/
386
387 /*Intermediaries*/
388 BamgGeom* geomout=new BamgGeom();
389@@ -149,17 +149,20 @@
390 this->previousmesh = meshout;
391
392 /*Prepare output*/
393- int nbv = meshout->VerticesSize[0];
394- int nbt = meshout->TrianglesSize[0];
395- IssmDouble *x = xNew<IssmDouble>(nbv);
396- IssmDouble *y = xNew<IssmDouble>(nbv);
397- IssmDouble *z = xNew<IssmDouble>(nbv);
398+ int nbv = meshout->VerticesSize[0];
399+ int nbt = meshout->TrianglesSize[0];
400+ int *datalist = xNew<int>(2);
401+ IssmDouble *xylist= xNew<IssmDouble>(nbv*2);
402+ int* elementslist = xNew<int>(nbt*3);
403+
404+ datalist[0] = nbv;
405+ datalist[1] = nbt;
406+
407 for(int i=0;i<nbv;i++){
408- x[i] = meshout->Vertices[i*3+0];
409- y[i] = meshout->Vertices[i*3+1];
410- z[i] = 0.;
411+ xylist[2*i] = meshout->Vertices[i*3+0];
412+ xylist[2*i+1] = meshout->Vertices[i*3+1];
413 }
414- int* elementslist= xNew<int>(nbt*3);
415+
416 for(int i=0;i<nbt;i++){
417 elementslist[3*i+0] = reCast<int>(meshout->Triangles[4*i+0]);
418 elementslist[3*i+1] = reCast<int>(meshout->Triangles[4*i+1]);
419@@ -166,14 +169,13 @@
420 elementslist[3*i+2] = reCast<int>(meshout->Triangles[4*i+2]);
421 }
422
423+ /*Assign pointers*/
424+ *pdatalist = datalist;
425+ *pxylist = xylist;
426+ *pelementslist = elementslist;
427+
428 /*Cleanup and return*/
429 delete geomout;
430- *pnewnumberofvertices = nbv;
431- *pnewnumberofelements = nbt;
432- *px = x;
433- *py = y;
434- *pz = z;
435- *pelementslist = elementslist;
436 }/*}}}*/
437 void AmrBamg::SetBamgOpts(IssmDouble hmin_in,IssmDouble hmax_in,IssmDouble err_in,IssmDouble gradation_in){/*{{{*/
438
Note: See TracBrowser for help on using the repository browser.