Changeset 17384


Ignore:
Timestamp:
03/05/14 09:23:02 (11 years ago)
Author:
seroussi
Message:

BUG: fixed segfault of P2 caused by Facepartitionning

Location:
issm/trunk-jpl/src/c/modules
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp

    r17383 r17384  
    7272                case P2Enum:
    7373                        EdgesPartitioning(&my_edges,iomodel);
    74                         FacesPartitioning(&my_faces,iomodel);
     74              if(iomodel->meshtype==Mesh3DEnum){
     75                                FacesPartitioning(&my_faces,iomodel);
     76                        }
    7577                        break;
    7678                case P2xP4Enum:
     
    115117                                        }
    116118                                }
    117                                 for(i=0;i<iomodel->numberoffaces;i++){
    118                                         if(iomodel->faces[i*6+5]==2){/*Vertical quads*/
    119                                                 if(my_faces[i]){
    120                                                         FaceGetVertexIndices(iomodel,&numfacevertices,&faceverticesid,i);
    121                                                         isnan=0;
    122                                                         for(j=0;j<numfacevertices;j++){
    123                                                                 if(xIsNan<IssmDouble>(spcdata[faceverticesid[j]])) isnan=1;
    124                                                         }
    125                                                         if(isnan==0){
    126                                                                 value=0;
     119                                if(iomodel->meshtype==Mesh3DEnum){
     120                                        for(i=0;i<iomodel->numberoffaces;i++){
     121                                                if(iomodel->faces[i*6+5]==2){/*Vertical quads*/
     122                                                        if(my_faces[i]){
     123                                                                FaceGetVertexIndices(iomodel,&numfacevertices,&faceverticesid,i);
     124                                                                isnan=0;
    127125                                                                for(j=0;j<numfacevertices;j++){
    128                                                                         value=value+spcdata[faceverticesid[j]]/numfacevertices;
     126                                                                        if(xIsNan<IssmDouble>(spcdata[faceverticesid[j]])) isnan=1;
    129127                                                                }
    130                                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,
    131                                                                                                 dof,value,analysis_type));
    132                                                                 count++;
     128                                                                if(isnan==0){
     129                                                                        value=0;
     130                                                                        for(j=0;j<numfacevertices;j++){
     131                                                                                value=value+spcdata[faceverticesid[j]]/numfacevertices;
     132                                                                        }
     133                                                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,
     134                                                                                                        dof,value,analysis_type));
     135                                                                        count++;
     136                                                                }
    133137                                                        }
    134138                                                }
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp

    r17383 r17384  
    132132                case P2Enum:
    133133                        EdgesPartitioning(&my_edges,iomodel);
    134                         FacesPartitioning(&my_faces,iomodel);
    135134                        for(i=0;i<iomodel->numberofvertices;i++){
    136135                                if(iomodel->my_vertices[i]){
     
    144143                        }
    145144                        id0 = id0+iomodel->numberofvertices+iomodel->numberofedges;
    146                         for(i=0;i<iomodel->numberoffaces;i++){
    147                                 if(iomodel->faces[i*6+5]==2){/*Vertical quads*/
    148                                         if(my_faces[i]){
    149                                                 node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,iomodel,analysis,approximation);
    150                                                 nodes->AddObject(node);
    151                                         }
    152                                 }
    153                                 else if(iomodel->faces[i*6+5]==1){/*Triangular base/top*/
    154                                         /*Nothing*/
    155                                 }
    156                                 else{
    157                                         _error_("not supported");
     145              if(iomodel->meshtype==Mesh3DEnum){
     146                                FacesPartitioning(&my_faces,iomodel);
     147                                for(i=0;i<iomodel->numberoffaces;i++){
     148                                        if(iomodel->faces[i*6+5]==2){/*Vertical quads*/
     149                                                if(my_faces[i]){
     150                                                        node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,iomodel,analysis,approximation);
     151                                                        nodes->AddObject(node);
     152                                                }
     153                                        }
     154                                        else if(iomodel->faces[i*6+5]==1){/*Triangular base/top*/
     155                                                /*Nothing*/
     156                                        }
     157                                        else{
     158                                                _error_("not supported");
     159                                        }
    158160                                }
    159161                        }
Note: See TracChangeset for help on using the changeset viewer.