Changeset 2785


Ignore:
Timestamp:
01/08/10 08:23:17 (15 years ago)
Author:
Mathieu Morlighem
Message:

some improvements but anisotropic mesh still crashing

Location:
issm/trunk/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/Bamgx/Bamgx.cpp

    r2781 r2785  
    3434
    3535        /*output: */
    36         double* elementsout=NULL;
    37         double* xout=NULL;
    38         double* yout=NULL;
    39         int     nelout, nodsout;
     36        double* VerticesOut=NULL;
     37        double* TrianglesOut=NULL;
     38        int     NumVerticesOut;
     39        int     NumTrianglesOut;
    4040
    4141        /*Bamg options*/
     
    111111                rBBeqMBB = !strcmp(rBB,fMBB);
    112112
    113         if(bamgmesh->numberofelements==0){
     113        if(bamgmesh->NumTriangles==0){
    114114                /*Mesh generation {{{1*/
    115115                if (verbosity>0) printf("Construction of a mesh from a given geometry\n");
     116                if (verbosity>1) printf("   Processing geometry...\n");
    116117                Geometry Gh(bamggeom,bamgargs);
    117118                hmin = Max(hmin,Gh.MinimalHmin());
     
    119120
    120121                //build metric if not given in input
     122                if (verbosity>1) printf("   Generating Metric...\n");
    121123                for(i=0;i<Gh.nbv;i++)
    122124                  {
     
    129131
    130132                //generate mesh
     133                if (verbosity>1) printf("   Generating Mesh...\n");
    131134                Triangles Th(maxnbv,Gh);
    132135                if(splitcorners) Th.SplitInternalEdgeWithBorderVertices();
     
    136139
    137140                //Build output
    138                 nelout=Th.nbt-Th.NbOutT; //number of triangles - number of external triangles
    139                 nodsout=Th.nbv;
    140 
    141                 xout=(double*)xmalloc(nodsout*sizeof(double));
    142                 yout=(double*)xmalloc(nodsout*sizeof(double));
    143                 for (i=0;i<nodsout;i++){
    144                         xout[i]=Th.vertices[i].r.x;
    145                         yout[i]=Th.vertices[i].r.y;
    146                 }
    147 
    148                 elementsout=(double*)xmalloc(3*nelout*sizeof(double));
     141                if (verbosity>1) printf("   Processing Output...\n");
     142                NumVerticesOut=Th.nbv;
     143                VerticesOut=(double*)xmalloc(3*NumVerticesOut*sizeof(double));
     144                for (i=0;i<NumVerticesOut;i++){
     145                        VerticesOut[i*3+0]=Th.vertices[i].r.x;
     146                        VerticesOut[i*3+1]=Th.vertices[i].r.y;
     147                        VerticesOut[i*3+2]=Th.vertices[i].ReferenceNumber;
     148                }
     149
     150                NumTrianglesOut=Th.nbt-Th.NbOutT; //number of triangles - number of external triangles
     151                TrianglesOut=(double*)xmalloc(4*NumTrianglesOut*sizeof(double));
    149152                num=0;
    150153                for(i=0;i<Th.nbt;i++){
     
    152155                        if (t.link){
    153156                                //write the element only if it is part of the mesh (no boundary element)
    154                                 elementsout[3*num+0]=Th.Number(t[0])+1;
    155                                 elementsout[3*num+1]=Th.Number(t[1])+1;
    156                                 elementsout[3*num+2]=Th.Number(t[2])+1;
     157                                TrianglesOut[4*num+0]=Th.Number(t[0])+1;
     158                                TrianglesOut[4*num+1]=Th.Number(t[1])+1;
     159                                TrianglesOut[4*num+2]=Th.Number(t[2])+1;
     160                                TrianglesOut[4*num+3]=t.color;
    157161                                num=num+1;
    158162                        }
     
    166170
    167171                /*Read background mesh from simple delaunay triangulation: */
     172                if (verbosity>1) printf("   Processing initial mesh...\n");
    168173                Triangles BTh(bamgmesh,bamgargs); // read the background mesh
    169174
     
    378383
    379384                        //Build output
    380                         nelout=Th.nbt-Th.NbOutT; //number of triangles - number of external triangles
    381                         nodsout=Th.nbv;
    382 
    383                         xout=(double*)xmalloc(nodsout*sizeof(double));
    384                         yout=(double*)xmalloc(nodsout*sizeof(double));
    385                         for (i=0;i<nodsout;i++){
    386                                 xout[i]=Th.vertices[i].r.x;
    387                                 yout[i]=Th.vertices[i].r.y;
     385                        NumVerticesOut=Th.nbv;
     386                        VerticesOut=(double*)xmalloc(3*NumVerticesOut*sizeof(double));
     387                        for (i=0;i<NumVerticesOut;i++){
     388                                VerticesOut[i*3+0]=Th.vertices[i].r.x;
     389                                VerticesOut[i*3+1]=Th.vertices[i].r.y;
     390                                VerticesOut[i*3+2]=Th.vertices[i].ReferenceNumber;
    388391                        }
    389392
    390                         elementsout=(double*)xmalloc(3*nelout*sizeof(double));
     393                        NumTrianglesOut=Th.nbt-Th.NbOutT; //number of triangles - number of external triangles
     394                        TrianglesOut=(double*)xmalloc(4*NumTrianglesOut*sizeof(double));
    391395                        num=0;
    392396                        for(i=0;i<Th.nbt;i++){
     
    394398                                if (t.link){
    395399                                        //write the element only if it is part of the mesh (no boundary element)
    396                                         elementsout[3*num+0]=Th.Number(t[0])+1;
    397                                         elementsout[3*num+1]=Th.Number(t[1])+1;
    398                                         elementsout[3*num+2]=Th.Number(t[2])+1;
     400                                        TrianglesOut[4*num+0]=Th.Number(t[0])+1;
     401                                        TrianglesOut[4*num+1]=Th.Number(t[1])+1;
     402                                        TrianglesOut[4*num+2]=Th.Number(t[2])+1;
     403                                        TrianglesOut[4*num+3]=t.color;
    399404                                        num=num+1;
    400405                                }
     
    408413
    409414        /*Assign output pointers*/
    410         bamgmesh->numberofelements=nelout;
    411         bamgmesh->numberofnodes=nodsout;
    412         xfree((void**)&bamgmesh->index);
    413         bamgmesh->index=elementsout;
    414         xfree((void**)&bamgmesh->x);
    415         bamgmesh->x=xout;
    416         xfree((void**)&bamgmesh->y);
    417         bamgmesh->y=yout;
     415        bamgmesh->NumTriangles=NumTrianglesOut;
     416        xfree((void**)&bamgmesh->Triangles);
     417        bamgmesh->Triangles=TrianglesOut;
     418
     419        bamgmesh->NumVertices=NumVerticesOut;
     420        xfree((void**)&bamgmesh->Vertices);
     421        bamgmesh->Vertices=VerticesOut;
    418422
    419423        /*No error return*/
     424        if (verbosity>1) printf("   Exiting Bamg.\n");
    420425        return noerr;
    421426
  • issm/trunk/src/c/Bamgx/MeshRead.cpp

    r2783 r2785  
    5252        verbose=bamgargs->verbose;
    5353
    54         nbv=bamgmesh->numberofnodes;
     54        nbv=bamgmesh->NumVertices;
    5555        nbvx=nbv;
    56         nbt=bamgmesh->numberofelements;
     56        nbt=bamgmesh->NumTriangles;
    5757        nbiv=nbvx;
    5858
    5959        //Vertices
    60         if(bamgmesh->x){
    61                 if(verbose>3) printf("Reading Vertices\n");
     60        if(bamgmesh->Vertices){
     61                if(verbose>3) printf("      processing Vertices\n");
    6262
    6363                vertices=(Vertex*)xmalloc(nbv*sizeof(Vertex));
     
    6565
    6666                for (i=0;i<nbv;i++){
    67                         vertices[i].r.x=bamgmesh->x[i];
    68                         vertices[i].r.y=bamgmesh->y[i];
     67                        vertices[i].r.x=bamgmesh->Vertices[i*3+0];
     68                        vertices[i].r.y=bamgmesh->Vertices[i*3+1];
    6969                        vertices[i].ReferenceNumber=1;
    7070                        vertices[i].DirOfSearch =NoDirOfSearch;
    7171                        vertices[i].m=M1;
    72                         vertices[i].color =0;
     72                        vertices[i].color=bamgmesh->Vertices[i*3+2];
    7373                }
    7474                nbtx=2*nbvx-2; // for filling The Holes and quadrilaterals
     
    7979
    8080        //Triangles
    81         if(bamgmesh->index){
    82                 if(verbose>3) printf("Reading index\n");
     81        if(bamgmesh->Triangles){
     82                if(verbose>3) printf("      processing Triangles\n");
    8383                triangles =new Triangle[nbt];
    84                 for (i=0;i<bamgmesh->numberofelements;i++){
     84                for (i=0;i<nbt;i++){
    8585                        Triangle & t = triangles[i];
    86                         i1=(Int4)bamgmesh->index[i*3+0]-1; //for C indexing
    87                         i2=(Int4)bamgmesh->index[i*3+1]-1; //for C indexing
    88                         i3=(Int4)bamgmesh->index[i*3+2]-1; //for C indexing
     86                        i1=(Int4)bamgmesh->Triangles[i*4+0]-1; //for C indexing
     87                        i2=(Int4)bamgmesh->Triangles[i*4+1]-1; //for C indexing
     88                        i3=(Int4)bamgmesh->Triangles[i*4+2]-1; //for C indexing
    8989                        t=Triangle(this,i1,i2,i3);
    90                         t.color=1; //reference = 1 for all triangles since it has not been specified
     90                        t.color=(Int4)bamgmesh->Triangles[i*4+3];
    9191                }
    9292        }
     
    9797        //Quadrilaterals
    9898        if(bamgmesh->Quadrilaterals){
    99                 if(verbose>3) printf("Reading Quadrilaterals\n");
     99                if(verbose>3) printf("      processing Quadrilaterals\n");
    100100                Int4 i1,i2,i3,i4,iref;
    101101                triangles =new Triangle[nbt];
     
    116116        }
    117117        else{
    118                 if(verbose>3) printf("No Quadrilaterals found\n");
     118                if(verbose>3) printf("      no Quadrilaterals found\n");
    119119        }
    120120
    121121        //hVertices
    122122        if(bamgmesh->hVertices){
    123                 if(verbose>3) printf("Reading hVertices\n");
     123                if(verbose>3) printf("      processing hVertices\n");
    124124                hvertices=1;
    125125                for (i=0;i< nbv;i++){
     
    128128        }
    129129        else{
    130                 if(verbose>3) printf("No hVertices found\n");
     130                if(verbose>3) printf("      no hVertices found\n");
    131131        }
    132132
    133133        //VertexOnGeometricEdge
    134134        if(bamgmesh->VertexOnGeometricEdge){
    135                 if(verbose>3) printf("Reading VertexOnGeometricEdge\n");
     135                if(verbose>3) printf("      processing VertexOnGeometricEdge\n");
    136136                NbVerticesOnGeomEdge=bamgmesh->NumVertexOnGeometricEdge;
    137137                VerticesOnGeomEdge= new  VertexOnGeom[NbVerticesOnGeomEdge] ;
     
    147147        }
    148148        else{
    149                 if(verbose>3) printf("No VertexOnGeometricEdge found\n");
     149                if(verbose>3) printf("      no VertexOnGeometricEdge found\n");
    150150        }
    151151
     
    156156                Real4 *len =0;
    157157
    158                 if(verbose>3) printf("Reading Edges\n");
     158                if(verbose>3) printf("      processing Edges\n");
    159159                nbe=bamgmesh->NumEdges;
    160160                edges = new Edge[nbe];
     
    219219        }
    220220        else{
    221                 if(verbose>3) printf("No Edges found\n");
     221                if(verbose>3) printf("      no Edges found\n");
    222222        }
    223223
    224224        //EdgeOnGeometricEdge
    225225        if(bamgmesh->EdgeOnGeometricEdge){
    226                 if(verbose>3) printf("Reading EdgeOnGeometricEdge\n");
     226                if(verbose>3) printf("      processing EdgeOnGeometricEdge\n");
    227227                int i1,i2,i,j;
    228228                i2=bamgmesh->NumEdgeOnGeometricEdge;
     
    237237        }
    238238        else{
    239                 if(verbose>3) printf("No EdgeOnGeometricEdge found\n");
     239                if(verbose>3) printf("      no EdgeOnGeometricEdge found\n");
    240240        }
    241241
     
    243243        if(bamgmesh->SubDomain){
    244244                Int4 i3,head,sens;
    245                 if(verbose>3) printf("Reading SubDomain\n");
     245                if(verbose>3) printf("      processing SubDomain\n");
    246246                NbSubDomains=bamgmesh->NumSubDomain;
    247247                subdomains = new SubDomain [ NbSubDomains ];
     
    256256        }
    257257        else{
    258                 if(verbose>3) printf("No SubDomain found\n");
     258                if(verbose>3) printf("      no SubDomain found\n");
    259259        }
    260260
     
    11811181
    11821182        //some checks
    1183         if(verbose>3) printf("Enter ReadGeometry\n");
    11841183        if (bamggeom->NumVertices<=0 || bamggeom->Vertices==NULL){
    11851184                throw ErrorException(__FUNCT__,exprintf("the domain provided does not contain any vertex"));
     
    11911190        //Vertices
    11921191        if (bamggeom->Vertices){
    1193                 if(verbose>3) printf("Reading Vertices\n");
     1192                if(verbose>3) printf("      processing Vertices\n");
    11941193                vertices = new GeometricalVertex[nbvx];
    11951194                for (i=0;i<nbv;i++) {
     
    12281227                Real4 *len =0;
    12291228
    1230                 if(verbose>3) printf("Reading Edges\n");
     1229                if(verbose>3) printf("      processing Edges\n");
    12311230                edges = new GeometricalEdge[nbe];
    12321231
     
    12761275        //hVertices
    12771276        if(bamggeom->hVertices){
    1278                 if(verbose>3) printf("Reading hVertices\n");
     1277                if(verbose>3) printf("      processing hVertices\n");
    12791278                for (i=0;i< nbv;i++){
    12801279                        vertices[i].m=Metric((Real4)bamggeom->hVertices[i]);
     
    12821281        }
    12831282        else{
    1284                 if(verbose>3) printf("No hVertices found\n");
     1283                if(verbose>3) printf("      no hVertices found\n");
    12851284        }
    12861285
    12871286        //MetricVertices
    12881287        if(bamggeom->MetricVertices){
    1289                 if(verbose>3) printf("Reading MetricVertices\n");
     1288                if(verbose>3) printf("      processing MetricVertices\n");
    12901289                hvertices=1;
    12911290                for (i=0;i< nbv;i++) {
     
    12941293        }
    12951294        else{
    1296                 if(verbose>3) printf("No MetricVertices found\n");
     1295                if(verbose>3) printf("      no MetricVertices found\n");
    12971296        }
    12981297
    12991298        //h1h2VpVertices
    13001299        if(bamggeom->h1h2VpVertices){
    1301                 if(verbose>3) printf("Reading h1h2VpVertices\n");
     1300                if(verbose>3) printf("      processing h1h2VpVertices\n");
    13021301                Real4 h1,h2,v1,v2;
    13031302                hvertices =1;
     
    13111310        }
    13121311        else{
    1313                 if(verbose>3) printf("No h1h2VpVertices found\n");
     1312                if(verbose>3) printf("      no h1h2VpVertices found\n");
    13141313        }
    13151314
    13161315        //MaximalAngleOfCorner
    13171316        if (bamggeom->MaximalAngleOfCorner){
    1318                 if(verbose>3) printf("Reading MaximalAngleOfCorner\n");
     1317                if(verbose>3) printf("      processing MaximalAngleOfCorner\n");
    13191318                MaximalAngleOfCorner=bamggeom->MaximalAngleOfCorner*Pi/180;
    13201319        }
    13211320        else{
    1322                 if(verbose>3) printf("No MaximalAngleOfCorner found\n");
     1321                if(verbose>3) printf("      no MaximalAngleOfCorner found\n");
    13231322        }
    13241323
    13251324        //TangentAtEdges
    13261325        if (bamggeom->TangentAtEdges){
    1327                 if(verbose>3) printf("Reading TangentAtEdges");
     1326                if(verbose>3) printf("      processing TangentAtEdges");
    13281327                int n,i,j,k;
    13291328                R2 tg;
     
    13421341        }
    13431342        else{
    1344                 if(verbose>3) printf("No TangentAtEdges found\n");
     1343                if(verbose>3) printf("      no TangentAtEdges found\n");
    13451344        }
    13461345
    13471346        //Corners
    13481347        if(bamggeom->Corners){
    1349                 if(verbose>3) printf("Reading Corners");
     1348                if(verbose>3) printf("      processing Corners");
    13501349                n=bamggeom->NumCorners;
    13511350                for (i=0;i<n;i++) {     
     
    13581357        }
    13591358        else{
    1360                 if(verbose>3) printf("No Corners found\n");
     1359                if(verbose>3) printf("      no Corners found\n");
    13611360        }
    13621361
    13631362        //RequiredVertices
    13641363        if(bamggeom->RequiredVertices){
    1365                 if(verbose>3) printf("Reading RequiredVertices");
     1364                if(verbose>3) printf("      processing RequiredVertices");
    13661365                n=bamggeom->NumRequiredVertices;
    13671366                for (i=0;i<n;i++) {     
     
    13731372        }
    13741373        else{
    1375                 if(verbose>3) printf("No RequiredVertices found\n");
     1374                if(verbose>3) printf("      no RequiredVertices found\n");
    13761375        }
    13771376
    13781377        //RequiredEdges
    13791378        if(bamggeom->RequiredEdges){
    1380                 if(verbose>3) printf("Reading RequiredEdges");
     1379                if(verbose>3) printf("      processing RequiredEdges");
    13811380                n=bamggeom->NumRequiredEdges;
    13821381                for (i=0;i<n;i++) {     
     
    13881387        }
    13891388        else{
    1390                 if(verbose>3) printf("No RequiredEdges found\n");
     1389                if(verbose>3) printf("      no RequiredEdges found\n");
    13911390        }
    13921391
     
    13941393        if(bamggeom->SubDomain){
    13951394                Int4 i0,i1,i2,i3;
    1396                 if(verbose>3) printf("Reading SubDomain\n");
     1395                if(verbose>3) printf("      processing SubDomain\n");
    13971396                NbSubDomains=bamggeom->NumSubDomain;
    13981397                subdomains = new GeometricalSubDomain[NbSubDomains];
     
    14101409        }
    14111410        else{
    1412                 if(verbose>3) printf("No SubDomain found\n");
     1411                if(verbose>3) printf("      no SubDomain found\n");
    14131412        }
    14141413}
  • issm/trunk/src/c/objects/BamgMesh.h

    r2771 r2785  
    88struct BamgMesh{
    99
    10         int     numberofelements;
    11         int     numberofnodes;
    12         double* x;
    13         double* y;
    14         double* index;
     10        int     NumTriangles;
     11        double* Triangles;
    1512
     13        int     NumVertices;
     14        double* Vertices;
     15
     16        int     NumEdges;
     17        double* Edges;
     18
     19        int     NumQuadrilaterals;
     20        double* Quadrilaterals;
     21
     22        int     NumVertexOnGeometricEdge;
     23        double* VertexOnGeometricEdge;
     24
     25        int     NumEdgeOnGeometricEdge;
     26        double* EdgeOnGeometricEdge;
     27
     28        int     NumSubDomain;
     29        double* SubDomain;
     30
     31        double* hVertices;
    1632};
    1733#endif
  • issm/trunk/src/m/classes/public/bamg.m

    r2781 r2785  
    5151
    5252% Bamg Mesh parameters {{{1
    53 bamg_mesh.numberofelements=0;
    54 bamg_mesh.numberofnodes=0;
    55 bamg_mesh.x=[];
    56 bamg_mesh.y=[];
     53bamg_mesh.NumVertices=0;
     54bamg_mesh.Vertices=[];
     55bamg_mesh.NumTriangles=0;
     56bamg_mesh.Triangles=[];
    5757bamg_mesh.index=zeros(0,3);
    5858if (~exist(options,'domain') & md.numberofgrids~=0 & strcmpi(md.type,'2d')),
    59         bamg_mesh.numberofelements=md.numberofelements;
    60         bamg_mesh.numberofnodes=md.numberofgrids;
    61         bamg_mesh.x=md.x;
    62         bamg_mesh.y=md.y;
    63         bamg_mesh.index=md.elements;
     59        bamg_mesh.NumVertices=md.numberofgrids;
     60        bamg_mesh.Vertices=[md.x md.y ones(md.numberofgrids,1)];
     61        bamg_mesh.NumTriangles=md.numberofelements;
     62        bamg_mesh.Triangles=[md.elements ones(md.numberofgrids,1)];
    6463end
    6564%}}}
     
    7877
    7978%call Bamg
    80 [elements,x,y]=Bamg(bamg_mesh,bamg_geometry,bamg_options);
     79[triangles vertices]=Bamg(bamg_mesh,bamg_geometry,bamg_options);
    8180
    8281% plug results onto model
    83 md.x=x;
    84 md.y=y;
    85 md.elements=elements;
     82md.x=vertices(:,1);
     83md.y=vertices(:,2);
     84md.elements=triangles(:,1:3);
    8685
    8786%Fill in rest of fields:
  • issm/trunk/src/mex/Bamg/Bamg.cpp

    r2781 r2785  
    1414
    1515        /*Mesh inputs*/
    16         int     numberofnodes;
    17         int     numberofelements;
    18         double* x;
    19         double* y;
    20         double* index;
     16        int     NumVerticesMesh;
     17        double* VerticesMesh=NULL;
     18        int     NumTrianglesMesh;
     19        double* TrianglesMesh=NULL;
    2120
    2221        /*Geom inputs: */
    23         int     NumVertices;
    24         double* Vertices=NULL;
    25         int     NumEdges;
    26         double* Edges=NULL;
    27         double* hVertices=NULL;
     22        int     NumVerticesGeom;
     23        double* VerticesGeom=NULL;
     24        int     NumEdgesGeom;
     25        double* EdgesGeom=NULL;
     26        double* hVerticesGeom=NULL;
    2827        double  MaximalAngleOfCorner;
    29         int     NumSubDomain;
    30         double* SubDomain=NULL;
     28        int     NumSubDomainGeom;
     29        double* SubDomainGeom=NULL;
    3130
    3231        /*Options inputs*/
     
    4443
    4544        /*create bamg geometry input*/
    46         FetchData(&NumVertices,mxGetField(BAMGGEOMETRY,0,"NumVertices"));
    47         bamggeom.NumVertices=NumVertices;
    48         FetchData(&Vertices,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"Vertices"));
    49         bamggeom.Vertices=Vertices;
    50         FetchData(&NumEdges,mxGetField(BAMGGEOMETRY,0,"NumEdges"));
    51         bamggeom.NumEdges=NumEdges;
    52         FetchData(&Edges,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"Edges"));
    53         bamggeom.Edges=Edges;
    54         FetchData(&hVertices,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"hVertices"));
    55         bamggeom.hVertices=hVertices;
    56         bamggeom.Edges=Edges;
     45        FetchData(&NumVerticesGeom,mxGetField(BAMGGEOMETRY,0,"NumVertices"));
     46        bamggeom.NumVertices=NumVerticesGeom;
     47        FetchData(&VerticesGeom,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"Vertices"));
     48        bamggeom.Vertices=VerticesGeom;
     49        FetchData(&NumEdgesGeom,mxGetField(BAMGGEOMETRY,0,"NumEdges"));
     50        bamggeom.NumEdges=NumEdgesGeom;
     51        FetchData(&EdgesGeom,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"Edges"));
     52        bamggeom.Edges=EdgesGeom;
     53        FetchData(&hVerticesGeom,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"hVertices"));
     54        bamggeom.hVertices=hVerticesGeom;
    5755        bamggeom.MetricVertices=NULL;
    5856        bamggeom.h1h2VpVertices=NULL;
     
    6765        bamggeom.NumRequiredEdges=0;
    6866        bamggeom.RequiredEdges=NULL;
    69         FetchData(&NumSubDomain,mxGetField(BAMGGEOMETRY,0,"NumSubDomain"));
    70         bamggeom.NumSubDomain=NumSubDomain;
    71         FetchData(&SubDomain,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"SubDomain"));
    72         bamggeom.SubDomain=SubDomain;
     67        FetchData(&NumSubDomainGeom,mxGetField(BAMGGEOMETRY,0,"NumSubDomain"));
     68        bamggeom.NumSubDomain=NumSubDomainGeom;
     69        FetchData(&SubDomainGeom,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"SubDomain"));
     70        bamggeom.SubDomain=SubDomainGeom;
    7371
    7472        /*create bamg mesh input*/
    75         FetchData(&numberofnodes,mxGetField(BAMGMESH,0,"numberofnodes"));
    76         bamgmesh.numberofnodes=numberofnodes;
    77         FetchData(&numberofelements,mxGetField(BAMGMESH,0,"numberofelements"));
    78         bamgmesh.numberofelements=numberofelements;
    79         FetchData(&x,NULL,NULL,mxGetField(BAMGMESH,0,"x"));
    80         bamgmesh.x=x;
    81         FetchData(&y,NULL,NULL,mxGetField(BAMGMESH,0,"y"));
    82         bamgmesh.y=y;
    83         FetchData(&index,NULL,NULL,mxGetField(BAMGMESH,0,"index"));
    84         bamgmesh.index=index;
     73        FetchData(&NumVerticesMesh,mxGetField(BAMGMESH,0,"NumVertices"));
     74        bamgmesh.NumVertices=NumVerticesMesh;
     75        FetchData(&VerticesMesh,NULL,NULL,mxGetField(BAMGMESH,0,"Vertices"));
     76        bamgmesh.Vertices=VerticesMesh;
     77        FetchData(&NumTrianglesMesh,mxGetField(BAMGMESH,0,"NumVertices"));
     78        bamgmesh.NumTriangles=NumTrianglesMesh;
     79        FetchData(&TrianglesMesh,NULL,NULL,mxGetField(BAMGMESH,0,"Vertices"));
     80        bamgmesh.Triangles=TrianglesMesh;
     81        bamgmesh.hVertices=NULL;
     82        bamgmesh.NumQuadrilaterals=0;
     83        bamgmesh.Quadrilaterals=NULL;
     84        bamgmesh.NumVertexOnGeometricEdge=0;
     85        bamgmesh.VertexOnGeometricEdge=NULL;
     86        bamgmesh.NumEdgeOnGeometricEdge=0;
     87        bamgmesh.EdgeOnGeometricEdge=NULL;
     88        bamgmesh.NumEdges=0;
     89        bamgmesh.Edges=NULL;
     90        bamgmesh.NumSubDomain=0;
     91        bamgmesh.SubDomain=NULL;
    8592
    8693        /*create bamg options input*/
     
    108115
    109116        /*write output datasets: */
    110         WriteData(ELEMENTSOUT,bamgmesh.index,bamgmesh.numberofelements,3);
    111         WriteData(XOUT,bamgmesh.x,bamgmesh.numberofnodes);
    112         WriteData(YOUT,bamgmesh.y,bamgmesh.numberofnodes);
     117        WriteData(TRIANGLESOUT,bamgmesh.Triangles,bamgmesh.NumTriangles,4);
     118        WriteData(VERTICESOUT,bamgmesh.Vertices,bamgmesh.NumVertices,3);
    113119
    114120        /*Free ressources: */
    115         xfree((void**)&Vertices);
    116         xfree((void**)&Edges);
    117         xfree((void**)&hVertices);
    118         xfree((void**)&SubDomain);
     121        xfree((void**)&VerticesGeom);
     122        xfree((void**)&EdgesGeom);
     123        xfree((void**)&hVerticesGeom);
     124        xfree((void**)&SubDomainGeom);
     125        xfree((void**)&TrianglesMesh);
     126        xfree((void**)&VerticesMesh);
    119127
    120128        /*end module: */
  • issm/trunk/src/mex/Bamg/Bamg.h

    r2780 r2785  
    2323
    2424/* serial output macros: */
    25 #define ELEMENTSOUT (mxArray**)&plhs[0]
    26 #define XOUT (mxArray**)&plhs[1]
    27 #define YOUT (mxArray**)&plhs[2]
     25#define TRIANGLESOUT (mxArray**)&plhs[0]
     26#define VERTICESOUT  (mxArray**)&plhs[1]
    2827
    2928/* serial arg counts: */
    3029#undef NLHS
    31 #define NLHS  3
     30#define NLHS  2
    3231#undef NRHS
    3332#define NRHS  3
Note: See TracChangeset for help on using the changeset viewer.