Changeset 23532


Ignore:
Timestamp:
12/11/18 12:45:16 (6 years ago)
Author:
Mathieu Morlighem
Message:

CHG: getting rid of counters now that all datasets are analysis specific

Location:
issm/trunk-jpl/src/c
Files:
31 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp

    r23066 r23532  
    4444
    4545                        /* Add load */
    46                         loads->AddObject(new Numericalflux(iomodel->loadcounter+i+1,i,i,iomodel,BalancethicknessAnalysisEnum));
     46                        loads->AddObject(new Numericalflux(i+1,i,i,iomodel,BalancethicknessAnalysisEnum));
    4747                }
    4848
  • TabularUnified issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp

    r23336 r23532  
    3333
    3434                        /*Get node ids*/
    35                         penpair_ids[0]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+0]);
    36                         penpair_ids[1]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+1]);
     35                        penpair_ids[0]=reCast<int>(vertex_pairing[2*i+0]);
     36                        penpair_ids[1]=reCast<int>(vertex_pairing[2*i+1]);
    3737
    3838                        /*Create Load*/
    39                         loads->AddObject(new Penpair(
    40                                                         iomodel->loadcounter+count+1,
    41                                                         &penpair_ids[0],
    42                                                         FreeSurfaceBaseAnalysisEnum));
     39                        loads->AddObject(new Penpair(count+1, &penpair_ids[0], FreeSurfaceBaseAnalysisEnum));
    4340                        count++;
    4441                }
  • TabularUnified issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp

    r20690 r23532  
    3333
    3434                        /*Get node ids*/
    35                         penpair_ids[0]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+0]);
    36                         penpair_ids[1]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+1]);
     35                        penpair_ids[0]=reCast<int>(vertex_pairing[2*i+0]);
     36                        penpair_ids[1]=reCast<int>(vertex_pairing[2*i+1]);
    3737
    3838                        /*Create Load*/
    39                         loads->AddObject(new Penpair(
    40                                                         iomodel->loadcounter+count+1,
    41                                                         &penpair_ids[0],
    42                                                         FreeSurfaceTopAnalysisEnum));
     39                        loads->AddObject(new Penpair( count+1, &penpair_ids[0], FreeSurfaceTopAnalysisEnum));
    4340                        count++;
    4441                }
  • TabularUnified issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp

    r23528 r23532  
    128128                        /*keep only this partition's nodes:*/
    129129                        if(iomodel->my_vertices[i]){
    130                                 loads->AddObject(new Moulin(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCEfficientAnalysisEnum));
     130                                loads->AddObject(new Moulin(i+1,i,iomodel,HydrologyDCEfficientAnalysisEnum));
    131131                        }
    132132                }
    133133                else if(reCast<int>(iomodel->Data("md.mesh.vertexonbase")[i])){
    134134                        if(iomodel->my_vertices[i]){
    135                                 loads->AddObject(new Moulin(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCEfficientAnalysisEnum));
     135                                loads->AddObject(new Moulin(i+1,i,iomodel,HydrologyDCEfficientAnalysisEnum));
    136136                        }
    137137                }
  • TabularUnified issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp

    r23387 r23532  
    155155                        /*keep only this partition's nodes:*/
    156156                        if(iomodel->my_vertices[i]){
    157                                 loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
    158                                 loads->AddObject(new Moulin(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
     157                                loads->AddObject(new Pengrid(i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
     158                                loads->AddObject(new Moulin(i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
    159159                        }
    160160                }
    161161                else if(reCast<int>(iomodel->Data("md.mesh.vertexonbase")[i])){
    162162                        if(iomodel->my_vertices[i]){
    163                                 loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
    164                                 loads->AddObject(new Moulin(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
     163                                loads->AddObject(new Pengrid(i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
     164                                loads->AddObject(new Moulin(i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
    165165                        }
    166166                }
  • TabularUnified issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.cpp

    r23066 r23532  
    3838                        /*keep only this partition's nodes:*/
    3939                        if(iomodel->my_vertices[i]){
    40                                 loads->AddObject(new Moulin(iomodel->loadcounter+i+1,i,iomodel,HydrologyShaktiAnalysisEnum));
     40                                loads->AddObject(new Moulin(i+1,i,iomodel,HydrologyShaktiAnalysisEnum));
    4141                        }
    4242                }
    4343                else if(reCast<int>(iomodel->Data("md.mesh.vertexonbase")[i])){
    4444                        if(iomodel->my_vertices[i]){
    45                                 loads->AddObject(new Moulin(iomodel->loadcounter+i+1,i,iomodel,HydrologyShaktiAnalysisEnum));
     45                                loads->AddObject(new Moulin(i+1,i,iomodel,HydrologyShaktiAnalysisEnum));
    4646                        }       
    4747                }
     
    5858        for(int i=0;i<M;i++){
    5959                if(iomodel->my_elements[segments[i*3+2]-1]){
    60                         loads->AddObject(new Neumannflux(iomodel->loadcounter+i+1,i,iomodel,segments,HydrologyShaktiAnalysisEnum));
     60                        loads->AddObject(new Neumannflux(i+1,i,iomodel,segments,HydrologyShaktiAnalysisEnum));
    6161                }
    6262        }
  • TabularUnified issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp

    r23505 r23532  
    5151
    5252                        /* Add load */
    53                         loads->AddObject(new Numericalflux(iomodel->loadcounter+i+1,i,i,iomodel,MasstransportAnalysisEnum));
     53                        loads->AddObject(new Numericalflux(i+1,i,i,iomodel,MasstransportAnalysisEnum));
    5454                }
    5555
     
    7777
    7878                        /*Get node ids*/
    79                         penpair_ids[0]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+0]);
    80                         penpair_ids[1]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+1]);
     79                        penpair_ids[0]=reCast<int>(vertex_pairing[2*i+0]);
     80                        penpair_ids[1]=reCast<int>(vertex_pairing[2*i+1]);
    8181
    8282                        /*Create Load*/
    83                         loads->AddObject(new Penpair(
    84                                                         iomodel->loadcounter+count+1,
    85                                                         &penpair_ids[0],
    86                                                         MasstransportAnalysisEnum));
     83                        loads->AddObject(new Penpair(count+1,&penpair_ids[0],MasstransportAnalysisEnum));
    8784                        count++;
    8885                }
  • TabularUnified issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp

    r21915 r23532  
    2121                if(iomodel->my_vertices[i]){
    2222                        if (reCast<int>(iomodel->Data("md.mesh.vertexonbase")[i])){
    23                                 loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,MeltingAnalysisEnum));
     23                                loads->AddObject(new Pengrid(i+1,i,iomodel,MeltingAnalysisEnum));
    2424                        }
    2525                }
  • TabularUnified issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp

    r23475 r23532  
    1515        /*Intermediary*/
    1616        int        i,j;
    17         int        count,finiteelement,p_fe,v_fe;
     17        int        finiteelement,p_fe,v_fe;
    1818        IssmDouble g;
    1919        IssmDouble rho_ice;
     
    122122
    123123                        /*Pressure spc*/
    124                         count = constraints->Size();
     124                        int count = constraints->Size();
    125125                        iomodel->FetchData(&vertices_type,NULL,NULL,"md.flowequation.vertex_equation");
    126126                        iomodel->FetchData(&surface,NULL,NULL,"md.geometry.surface");
     
    139139                                                        if(iomodel->my_vertices[i]){
    140140                                                                if(IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum){
    141                                                                         constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
     141                                                                        constraints->AddObject(new SpcStatic(count+1,iomodel->numberofvertices+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
    142142                                                                        count++;
    143143                                                                }
     
    149149                                                        if(iomodel->my_vertices[i]){
    150150                                                                if(IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum){
    151                                                                         constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
     151                                                                        constraints->AddObject(new SpcStatic(count+1,iomodel->numberofvertices+iomodel->numberofelements+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
    152152                                                                        count++;
    153153                                                                }
     
    159159                                                        if(iomodel->my_vertices[i]){
    160160                                                                if(IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum){
    161                                                                         constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
     161                                                                        constraints->AddObject(new SpcStatic(count+1,iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
    162162                                                                        count++;
    163163                                                                }
     
    197197
    198198        /*Initialize counter: */
    199         count=0;
     199        int count=0;
    200200
    201201        /*figure out times: */
     
    223223                                /*If grionSSA, spc HO dofs: 3 & 4*/
    224224                                        if (reCast<int,IssmDouble>(nodeonHO[i])){
    225                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     225                                                constraints->AddObject(new SpcStatic(count+1,i+1,0,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    226226                                                count++;
    227                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     227                                                constraints->AddObject(new SpcStatic(count+1,i+1,1,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    228228                                                count++;
    229229                                                if (!xIsNan<IssmDouble>(spcvx[i])){
    230                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     230                                                        constraints->AddObject(new SpcStatic(count+1,i+1,2,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    231231                                                        count++;
    232232                                                }
    233233                                                if (!xIsNan<IssmDouble>(spcvy[i])){
    234                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     234                                                        constraints->AddObject(new SpcStatic(count+1,i+1,3,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    235235                                                        count++;
    236236                                                }
     
    238238                                        }
    239239                                        else if (reCast<int,IssmDouble>(nodeonSSA[i])){
    240                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     240                                                constraints->AddObject(new SpcStatic(count+1,i+1,2,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    241241                                                count++;
    242                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     242                                                constraints->AddObject(new SpcStatic(count+1,i+1,3,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    243243                                                count++;
    244244                                                if (!xIsNan<IssmDouble>(spcvx[i])){
    245                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     245                                                        constraints->AddObject(new SpcStatic(count+1,i+1,0,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    246246                                                        count++;
    247247                                                }
    248248                                                if (!xIsNan<IssmDouble>(spcvy[i])){
    249                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     249                                                        constraints->AddObject(new SpcStatic(count+1,i+1,1,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    250250                                                        count++;
    251251                                                }
     
    258258                                /*If grion,HO spc FS dofs: 3 4 & 5*/
    259259                                        if (reCast<int,IssmDouble>(nodeonHO[i])){
    260                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     260                                                constraints->AddObject(new SpcStatic(count+1,i+1,2,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    261261                                                count++;
    262                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     262                                                constraints->AddObject(new SpcStatic(count+1,i+1,3,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    263263                                                count++;
    264                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     264                                                constraints->AddObject(new SpcStatic(count+1,i+1,4,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    265265                                                count++;
    266266                                                if (!xIsNan<IssmDouble>(spcvx[i])){
    267                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     267                                                        constraints->AddObject(new SpcStatic(count+1,i+1,0,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    268268                                                        count++;
    269269                                                }
    270270                                                if (!xIsNan<IssmDouble>(spcvy[i])){
    271                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     271                                                        constraints->AddObject(new SpcStatic(count+1,i+1,1,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    272272                                                        count++;
    273273                                                }
     
    275275                                        }
    276276                                        else if (reCast<int,IssmDouble>(nodeonFS[i])){ //spc HO nodes: 1 & 2
    277                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     277                                                constraints->AddObject(new SpcStatic(count+1,i+1,0,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    278278                                                count++;
    279                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     279                                                constraints->AddObject(new SpcStatic(count+1,i+1,1,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    280280                                                count++;
    281281                                                if (!xIsNan<IssmDouble>(spcvx[i])){
    282                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     282                                                        constraints->AddObject(new SpcStatic(count+1,i+1,2,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    283283                                                        count++;
    284284                                                }
    285285                                                if (!xIsNan<IssmDouble>(spcvy[i])){
    286                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     286                                                        constraints->AddObject(new SpcStatic(count+1,i+1,3,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    287287                                                        count++;
    288288                                                }
    289289                                                if (!xIsNan<IssmDouble>(spcvz[i])){
    290                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvz[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     290                                                        constraints->AddObject(new SpcStatic(count+1,i+1,4,spcvz[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    291291                                                        count++;
    292292                                                }
     
    298298                                /*If grion,HO spc FS dofs: 3 4 & 5*/
    299299                                        if (reCast<int,IssmDouble>(nodeonSSA[i])){
    300                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     300                                                constraints->AddObject(new SpcStatic(count+1,i+1,2,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    301301                                                count++;
    302                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     302                                                constraints->AddObject(new SpcStatic(count+1,i+1,3,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    303303                                                count++;
    304                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     304                                                constraints->AddObject(new SpcStatic(count+1,i+1,4,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    305305                                                count++;
    306306                                                if (!xIsNan<IssmDouble>(spcvx[i])){
    307                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     307                                                        constraints->AddObject(new SpcStatic(count+1,i+1,0,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    308308                                                        count++;
    309309                                                }
    310310                                                if (!xIsNan<IssmDouble>(spcvy[i])){
    311                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     311                                                        constraints->AddObject(new SpcStatic(count+1,i+1,1,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    312312                                                        count++;
    313313                                                }
     
    315315                                        }
    316316                                        else if (reCast<int,IssmDouble>(nodeonFS[i])){ //spc SSA nodes: 1 & 2
    317                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     317                                                constraints->AddObject(new SpcStatic(count+1,i+1,0,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    318318                                                count++;
    319                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     319                                                constraints->AddObject(new SpcStatic(count+1,i+1,1,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    320320                                                count++;
    321321                                                if (!xIsNan<IssmDouble>(spcvx[i])){
    322                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     322                                                        constraints->AddObject(new SpcStatic(count+1,i+1,2,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    323323                                                        count++;
    324324                                                }
    325325                                                if (!xIsNan<IssmDouble>(spcvy[i])){
    326                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     326                                                        constraints->AddObject(new SpcStatic(count+1,i+1,3,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    327327                                                        count++;
    328328                                                }
    329329                                                if (!xIsNan<IssmDouble>(spcvz[i])){
    330                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvz[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     330                                                        constraints->AddObject(new SpcStatic(count+1,i+1,4,spcvz[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    331331                                                        count++;
    332332                                                }
     
    337337                        else{
    338338                                if (Mx==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvx[i])){
    339                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     339                                        constraints->AddObject(new SpcStatic(count+1,i+1,0,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    340340                                        count++;
    341341
     
    351351
    352352                                        if(spcpresent){
    353                                                 constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,Nx,timesx,values,StressbalanceAnalysisEnum));
     353                                                constraints->AddObject(new SpcTransient(count+1,i+1,0,Nx,timesx,values,StressbalanceAnalysisEnum));
    354354                                                count++;
    355355                                        }
     
    357357                                }
    358358                                else if (IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==SIAApproximationEnum){
    359                                         constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,StressbalanceAnalysisEnum));
     359                                        constraints->AddObject(new SpcDynamic(count+1,i+1,0,StressbalanceAnalysisEnum));
    360360                                        count++;
    361361                                }
    362362
    363363                                if (My==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvy[i])){
    364                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vy.
     364                                        constraints->AddObject(new SpcStatic(count+1,i+1,1,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vy.
    365365                                        count++;
    366366                                }
     
    374374                                        }
    375375                                        if(spcpresent){
    376                                                 constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,Ny,timesy,values,StressbalanceAnalysisEnum));
     376                                                constraints->AddObject(new SpcTransient(count+1,i+1,1,Ny,timesy,values,StressbalanceAnalysisEnum));
    377377                                                count++;
    378378                                        }
     
    380380                                }
    381381                                else if (IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==SIAApproximationEnum){
    382                                         constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,StressbalanceAnalysisEnum));
     382                                        constraints->AddObject(new SpcDynamic(count+1,i+1,1,StressbalanceAnalysisEnum));
    383383                                        count++;
    384384                                }
     
    386386                                if (IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==FSApproximationEnum ||  (IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum)){
    387387                                        if (Mz==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvz[i])){
    388                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvz[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
     388                                                constraints->AddObject(new SpcStatic(count+1,i+1,2,spcvz[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
    389389                                                count++;
    390390                                        }
     
    398398                                                }
    399399                                                if(spcpresent){
    400                                                         constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,Nz,timesz,values,StressbalanceAnalysisEnum));
     400                                                        constraints->AddObject(new SpcTransient(count+1,i+1,2,Nz,timesz,values,StressbalanceAnalysisEnum));
    401401                                                        count++;
    402402                                                }
     
    406406                                }
    407407                                if (IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum){
    408                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
     408                                        constraints->AddObject(new SpcStatic(count+1,iomodel->numberofvertices+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
    409409                                        count++;
    410410                                }
     
    470470
    471471                        /*Get node ids*/
    472                         penpair_ids[0]=iomodel->nodecounter+reCast<int,IssmDouble>(penalties[2*i+0]);
    473                         penpair_ids[1]=iomodel->nodecounter+reCast<int,IssmDouble>(penalties[2*i+1]);
     472                        penpair_ids[0]=reCast<int,IssmDouble>(penalties[2*i+0]);
     473                        penpair_ids[1]=reCast<int,IssmDouble>(penalties[2*i+1]);
    474474
    475475                        /*Create Load*/
    476                         loads->AddObject(new Penpair(iomodel->loadcounter+count+1,&penpair_ids[0],StressbalanceAnalysisEnum));
     476                        loads->AddObject(new Penpair(count+1,&penpair_ids[0],StressbalanceAnalysisEnum));
    477477                        count++;
    478478                }
     
    488488                for(i=0;i<numriftsegments;i++){
    489489                        if(iomodel->my_elements[reCast<int,IssmDouble>(*(riftinfo+RIFTINFOSIZE*i+2))-1]){
    490                                 loads->AddObject(new Riftfront(iomodel->loadcounter+count+1,i,iomodel,StressbalanceAnalysisEnum));
     490                                loads->AddObject(new Riftfront(count+1,i,iomodel,StressbalanceAnalysisEnum));
    491491                                count++;
    492492                        }
     
    558558                                        approximation=IoCodeToEnumVertexEquation(reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i]));
    559559                                        if(approximation==FSApproximationEnum)  approximation=FSvelocityEnum;
    560                                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,approximation));
     560                                        nodes->AddObject(new Node(i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,approximation));
    561561                                }
    562562                        }
    563563                        for(int i=0;i<iomodel->numberofelements;i++){
    564564                                if(iomodel->my_elements[i]){
    565                                         node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,StressbalanceAnalysisEnum,FSvelocityEnum);
     565                                        node = new Node(iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,StressbalanceAnalysisEnum,FSvelocityEnum);
    566566                                        node->Deactivate();
    567567                                        nodes->AddObject(node);
     
    572572                                if(iomodel->my_vertices[i]){
    573573                                        approximation=IoCodeToEnumVertexEquation(reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i]));
    574                                         node = new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,StressbalanceAnalysisEnum,FSpressureEnum);
     574                                        node = new Node(iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,StressbalanceAnalysisEnum,FSpressureEnum);
    575575                                        if(approximation==HOApproximationEnum || approximation==SSAApproximationEnum){
    576576                                                node->Deactivate();
     
    583583                        for(int i=0;i<iomodel->numberofvertices;i++){
    584584                                if(iomodel->my_vertices[i]){
    585                                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,IoCodeToEnumVertexEquation(reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i]))));
     585                                        nodes->AddObject(new Node(i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,IoCodeToEnumVertexEquation(reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i]))));
    586586                                }
    587587                        }
  • TabularUnified issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp

    r23084 r23532  
    3838
    3939                /*Initialize conunter*/
    40                 int count=0;
     40                int count = 0;
    4141
    4242                /*vx and vy are spc'd if we are not on nodeonSIA: */
     
    4646                                if (IoCodeToEnumVertexEquation(reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i]))!=SIAApproximationEnum){
    4747
    48                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,0,StressbalanceSIAAnalysisEnum));
     48                                        constraints->AddObject(new SpcStatic(count+1,i+1,0,0,StressbalanceSIAAnalysisEnum));
    4949                                        count++;
    5050
    51                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceSIAAnalysisEnum));
     51                                        constraints->AddObject(new SpcStatic(count+1,i+1,1,0,StressbalanceSIAAnalysisEnum));
    5252                                        count++;
    5353                                }
    5454                                else{
    5555                                        if (!xIsNan<IssmDouble>(iomodel->Data("md.stressbalance.spcvx")[i])){
    56                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,iomodel->Data("md.stressbalance.spcvx")[i],StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     56                                                constraints->AddObject(new SpcStatic(count+1,i+1,0,iomodel->Data("md.stressbalance.spcvx")[i],StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    5757                                                count++;
    5858                                        }
    5959
    6060                                        if (!xIsNan<IssmDouble>(iomodel->Data("md.stressbalance.spcvy")[i])){
    61                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->Data("md.stressbalance.spcvy")[i],StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
     61                                                constraints->AddObject(new SpcStatic(count+1,i+1,1,iomodel->Data("md.stressbalance.spcvy")[i],StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
    6262                                                count++;
    6363                                        }
     
    9999
    100100                        /*Create new node if is in this processor's partition*/
    101                         node = new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceSIAAnalysisEnum,IoCodeToEnumVertexEquation(reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i])));
     101                        node = new Node(i+1,i,lid++,i,iomodel,StressbalanceSIAAnalysisEnum,IoCodeToEnumVertexEquation(reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i])));
    102102
    103103                        /*Deactivate node if not SIA*/
  • TabularUnified issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp

    r23341 r23532  
    5151
    5252                                if (reCast<int,IssmDouble>(iomodel->Data("md.flowequation.borderFS")[i])){
    53                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,0,StressbalanceVerticalAnalysisEnum)); //spc to zero as vertical velocity is done in Horiz for FS
     53                                        constraints->AddObject(new SpcStatic(count+1,i+1,0,0,StressbalanceVerticalAnalysisEnum)); //spc to zero as vertical velocity is done in Horiz for FS
    5454                                        count++;
    5555                                }
    5656                                else if (!xIsNan<IssmDouble>(spcvz[i])){
    57                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,
     57                                        constraints->AddObject(new SpcStatic(count+1,i+1,0,
    5858                                                                        spcvz[i],StressbalanceVerticalAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    5959                                        count++;
  • TabularUnified issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp

    r23475 r23532  
    8484                if(iomodel->my_vertices[i]){
    8585                        if (xIsNan<IssmDouble>(iomodel->Data("md.thermal.spctemperature")[i])){ //No penalty applied on spc nodes!
    86                                 loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,ThermalAnalysisEnum));
     86                                loads->AddObject(new Pengrid(i+1,i,iomodel,ThermalAnalysisEnum));
    8787                        }
    8888                }
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/ElementHook.cpp

    r23066 r23532  
    4646
    4747        /*retrieve material_id: */
    48         matpar_id = iomodel->matparcounter;
     48        matpar_id = iomodel->numberofelements+1;
    4949
    5050        /*retrieve material_id*/
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r23169 r23532  
    28912891                        numnodes         = 6;
    28922892                        penta_node_ids   = xNew<int>(numnodes);
    2893                         penta_node_ids[0]=iomodel->nodecounter+iomodel->elements[6*index+0];
    2894                         penta_node_ids[1]=iomodel->nodecounter+iomodel->elements[6*index+1];
    2895                         penta_node_ids[2]=iomodel->nodecounter+iomodel->elements[6*index+2];
    2896                         penta_node_ids[3]=iomodel->nodecounter+iomodel->elements[6*index+3];
    2897                         penta_node_ids[4]=iomodel->nodecounter+iomodel->elements[6*index+4];
    2898                         penta_node_ids[5]=iomodel->nodecounter+iomodel->elements[6*index+5];
     2893                        penta_node_ids[0]=iomodel->elements[6*index+0];
     2894                        penta_node_ids[1]=iomodel->elements[6*index+1];
     2895                        penta_node_ids[2]=iomodel->elements[6*index+2];
     2896                        penta_node_ids[3]=iomodel->elements[6*index+3];
     2897                        penta_node_ids[4]=iomodel->elements[6*index+4];
     2898                        penta_node_ids[5]=iomodel->elements[6*index+5];
    28992899                        break;
    29002900                case P1bubbleEnum: case P1bubblecondensedEnum:
    29012901                        numnodes         = 7;
    29022902                        penta_node_ids   = xNew<int>(numnodes);
    2903                         penta_node_ids[0]=iomodel->nodecounter+iomodel->elements[6*index+0];
    2904                         penta_node_ids[1]=iomodel->nodecounter+iomodel->elements[6*index+1];
    2905                         penta_node_ids[2]=iomodel->nodecounter+iomodel->elements[6*index+2];
    2906                         penta_node_ids[3]=iomodel->nodecounter+iomodel->elements[6*index+3];
    2907                         penta_node_ids[4]=iomodel->nodecounter+iomodel->elements[6*index+4];
    2908                         penta_node_ids[5]=iomodel->nodecounter+iomodel->elements[6*index+5];
    2909                         penta_node_ids[6]=iomodel->nodecounter+iomodel->numberofvertices+index+1;
     2903                        penta_node_ids[0]=iomodel->elements[6*index+0];
     2904                        penta_node_ids[1]=iomodel->elements[6*index+1];
     2905                        penta_node_ids[2]=iomodel->elements[6*index+2];
     2906                        penta_node_ids[3]=iomodel->elements[6*index+3];
     2907                        penta_node_ids[4]=iomodel->elements[6*index+4];
     2908                        penta_node_ids[5]=iomodel->elements[6*index+5];
     2909                        penta_node_ids[6]=iomodel->numberofvertices+index+1;
    29102910                        break;
    29112911                case P1xP2Enum:
    29122912                        numnodes         = 9;
    29132913                        penta_node_ids   = xNew<int>(numnodes);
    2914                         penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
    2915                         penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
    2916                         penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
    2917                         penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
    2918                         penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
    2919                         penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
    2920                         penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
    2921                         penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
    2922                         penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
     2914                        penta_node_ids[ 0]=iomodel->elements[6*index+0];
     2915                        penta_node_ids[ 1]=iomodel->elements[6*index+1];
     2916                        penta_node_ids[ 2]=iomodel->elements[6*index+2];
     2917                        penta_node_ids[ 3]=iomodel->elements[6*index+3];
     2918                        penta_node_ids[ 4]=iomodel->elements[6*index+4];
     2919                        penta_node_ids[ 5]=iomodel->elements[6*index+5];
     2920                        penta_node_ids[ 6]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
     2921                        penta_node_ids[ 7]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
     2922                        penta_node_ids[ 8]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
    29232923                        break;
    29242924                case P1xP3Enum:
    29252925                        numnodes         = 12;
    29262926                        penta_node_ids   = xNew<int>(numnodes);
    2927                         penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
    2928                         penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
    2929                         penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
    2930                         penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
    2931                         penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
    2932                         penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
    2933                         penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+0]+1;
    2934                         penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+1]+1;
    2935                         penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+2]+1;
    2936                         penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+0]+2;
    2937                         penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+1]+2;
    2938                         penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+2]+2;
     2927                        penta_node_ids[ 0]=iomodel->elements[6*index+0];
     2928                        penta_node_ids[ 1]=iomodel->elements[6*index+1];
     2929                        penta_node_ids[ 2]=iomodel->elements[6*index+2];
     2930                        penta_node_ids[ 3]=iomodel->elements[6*index+3];
     2931                        penta_node_ids[ 4]=iomodel->elements[6*index+4];
     2932                        penta_node_ids[ 5]=iomodel->elements[6*index+5];
     2933                        penta_node_ids[ 6]=iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+0]+1;
     2934                        penta_node_ids[ 7]=iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+1]+1;
     2935                        penta_node_ids[ 8]=iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+2]+1;
     2936                        penta_node_ids[ 9]=iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+0]+2;
     2937                        penta_node_ids[10]=iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+1]+2;
     2938                        penta_node_ids[11]=iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+2]+2;
    29392939                        break;
    29402940                case P2xP1Enum:
    29412941                        numnodes         = 12;
    29422942                        penta_node_ids   = xNew<int>(numnodes);
    2943                         penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
    2944                         penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
    2945                         penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
    2946                         penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
    2947                         penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
    2948                         penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
    2949                         penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
    2950                         penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
    2951                         penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
    2952                         penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
    2953                         penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
    2954                         penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
     2943                        penta_node_ids[ 0]=iomodel->elements[6*index+0];
     2944                        penta_node_ids[ 1]=iomodel->elements[6*index+1];
     2945                        penta_node_ids[ 2]=iomodel->elements[6*index+2];
     2946                        penta_node_ids[ 3]=iomodel->elements[6*index+3];
     2947                        penta_node_ids[ 4]=iomodel->elements[6*index+4];
     2948                        penta_node_ids[ 5]=iomodel->elements[6*index+5];
     2949                        penta_node_ids[ 6]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
     2950                        penta_node_ids[ 7]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
     2951                        penta_node_ids[ 8]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
     2952                        penta_node_ids[ 9]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
     2953                        penta_node_ids[10]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
     2954                        penta_node_ids[11]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
    29552955                        break;
    29562956                case P1xP4Enum:
    29572957                        numnodes         = 15;
    29582958                        penta_node_ids   = xNew<int>(numnodes);
    2959                         penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0]; /*Vertex 1*/
    2960                         penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1]; /*Vertex 2*/
    2961                         penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2]; /*Vertex 3*/
    2962                         penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3]; /*Vertex 4*/
    2963                         penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4]; /*Vertex 5*/
    2964                         penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5]; /*Vertex 6*/
    2965                         penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+1; /*mid vertical edge 1*/
    2966                         penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+1; /*mid vertical edge 2*/
    2967                         penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+1; /*mid vertical edge 3*/
    2968                         penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+2; /* 1/4 vertical edge 1*/
    2969                         penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+2; /* 1/4 vertical edge 2*/
    2970                         penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+2; /* 1/4 vertical edge 3*/
    2971                         penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+3; /* 3/4 vertical edge 1*/
    2972                         penta_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+3; /* 3/4 vertical edge 2*/
    2973                         penta_node_ids[14]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+3; /* 3/4 vertical edge 3*/
     2959                        penta_node_ids[ 0]=iomodel->elements[6*index+0]; /*Vertex 1*/
     2960                        penta_node_ids[ 1]=iomodel->elements[6*index+1]; /*Vertex 2*/
     2961                        penta_node_ids[ 2]=iomodel->elements[6*index+2]; /*Vertex 3*/
     2962                        penta_node_ids[ 3]=iomodel->elements[6*index+3]; /*Vertex 4*/
     2963                        penta_node_ids[ 4]=iomodel->elements[6*index+4]; /*Vertex 5*/
     2964                        penta_node_ids[ 5]=iomodel->elements[6*index+5]; /*Vertex 6*/
     2965                        penta_node_ids[ 6]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+1; /*mid vertical edge 1*/
     2966                        penta_node_ids[ 7]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+1; /*mid vertical edge 2*/
     2967                        penta_node_ids[ 8]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+1; /*mid vertical edge 3*/
     2968                        penta_node_ids[ 9]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+2; /* 1/4 vertical edge 1*/
     2969                        penta_node_ids[10]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+2; /* 1/4 vertical edge 2*/
     2970                        penta_node_ids[11]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+2; /* 1/4 vertical edge 3*/
     2971                        penta_node_ids[12]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+3; /* 3/4 vertical edge 1*/
     2972                        penta_node_ids[13]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+3; /* 3/4 vertical edge 2*/
     2973                        penta_node_ids[14]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+3; /* 3/4 vertical edge 3*/
    29742974                        break;
    29752975                case P2xP4Enum:
    29762976                        numnodes         = 30;
    29772977                        penta_node_ids   = xNew<int>(numnodes);
    2978                         penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0]; /*Vertex 1*/
    2979                         penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1]; /*Vertex 2*/
    2980                         penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2]; /*Vertex 3*/
    2981                         penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3]; /*Vertex 4*/
    2982                         penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4]; /*Vertex 5*/
    2983                         penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5]; /*Vertex 6*/
    2984                         penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+1; /*mid vertical edge 1*/
    2985                         penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+1; /*mid vertical edge 2*/
    2986                         penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+1; /*mid vertical edge 3*/
    2987                         penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+3]+1; /*mid basal edge 1*/
    2988                         penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+4]+1; /*mid basal edge 2*/
    2989                         penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+5]+1; /*mid basal edge 3*/
    2990                         penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+6]+1; /*mid top edge 1*/
    2991                         penta_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+7]+1; /*mid top edge 2*/
    2992                         penta_node_ids[14]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+8]+1; /*mid top edge 3*/
    2993                         penta_node_ids[15]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+2; /* 1/4 vertical edge 1*/
    2994                         penta_node_ids[16]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+2; /* 1/4 vertical edge 2*/
    2995                         penta_node_ids[17]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+2; /* 1/4 vertical edge 3*/
    2996                         penta_node_ids[18]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+3; /* 3/4 vertical edge 1*/
    2997                         penta_node_ids[19]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+3; /* 3/4 vertical edge 2*/
    2998                         penta_node_ids[20]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+3; /* 3/4 vertical edge 3*/
    2999                         penta_node_ids[21]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+2]+1; /* 1/4 vertical face 1*/
    3000                         penta_node_ids[22]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+3]+1; /* 1/4 vertical face 2*/
    3001                         penta_node_ids[23]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+4]+1; /* 1/4 vertical face 3*/
    3002                         penta_node_ids[24]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+2]+2; /* 2/4 vertical face 1*/
    3003                         penta_node_ids[25]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+3]+2; /* 2/4 vertical face 2*/
    3004                         penta_node_ids[26]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+4]+2; /* 2/4 vertical face 3*/
    3005                         penta_node_ids[27]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+2]+3; /* 3/4 vertical face 1*/
    3006                         penta_node_ids[28]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+3]+3; /* 3/4 vertical face 2*/
    3007                         penta_node_ids[29]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+4]+3; /* 3/4 vertical face 3*/
     2978                        penta_node_ids[ 0]=iomodel->elements[6*index+0]; /*Vertex 1*/
     2979                        penta_node_ids[ 1]=iomodel->elements[6*index+1]; /*Vertex 2*/
     2980                        penta_node_ids[ 2]=iomodel->elements[6*index+2]; /*Vertex 3*/
     2981                        penta_node_ids[ 3]=iomodel->elements[6*index+3]; /*Vertex 4*/
     2982                        penta_node_ids[ 4]=iomodel->elements[6*index+4]; /*Vertex 5*/
     2983                        penta_node_ids[ 5]=iomodel->elements[6*index+5]; /*Vertex 6*/
     2984                        penta_node_ids[ 6]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+1; /*mid vertical edge 1*/
     2985                        penta_node_ids[ 7]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+1; /*mid vertical edge 2*/
     2986                        penta_node_ids[ 8]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+1; /*mid vertical edge 3*/
     2987                        penta_node_ids[ 9]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+3]+1; /*mid basal edge 1*/
     2988                        penta_node_ids[10]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+4]+1; /*mid basal edge 2*/
     2989                        penta_node_ids[11]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+5]+1; /*mid basal edge 3*/
     2990                        penta_node_ids[12]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+6]+1; /*mid top edge 1*/
     2991                        penta_node_ids[13]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+7]+1; /*mid top edge 2*/
     2992                        penta_node_ids[14]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+8]+1; /*mid top edge 3*/
     2993                        penta_node_ids[15]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+2; /* 1/4 vertical edge 1*/
     2994                        penta_node_ids[16]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+2; /* 1/4 vertical edge 2*/
     2995                        penta_node_ids[17]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+2; /* 1/4 vertical edge 3*/
     2996                        penta_node_ids[18]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+3; /* 3/4 vertical edge 1*/
     2997                        penta_node_ids[19]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+3; /* 3/4 vertical edge 2*/
     2998                        penta_node_ids[20]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+3; /* 3/4 vertical edge 3*/
     2999                        penta_node_ids[21]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+2]+1; /* 1/4 vertical face 1*/
     3000                        penta_node_ids[22]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+3]+1; /* 1/4 vertical face 2*/
     3001                        penta_node_ids[23]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+4]+1; /* 1/4 vertical face 3*/
     3002                        penta_node_ids[24]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+2]+2; /* 2/4 vertical face 1*/
     3003                        penta_node_ids[25]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+3]+2; /* 2/4 vertical face 2*/
     3004                        penta_node_ids[26]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+4]+2; /* 2/4 vertical face 3*/
     3005                        penta_node_ids[27]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+2]+3; /* 3/4 vertical face 1*/
     3006                        penta_node_ids[28]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+3]+3; /* 3/4 vertical face 2*/
     3007                        penta_node_ids[29]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+4]+3; /* 3/4 vertical face 3*/
    30083008                        break;
    30093009                case P2Enum:
    30103010                        numnodes         = 18;
    30113011                        penta_node_ids   = xNew<int>(numnodes);
    3012                         penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
    3013                         penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
    3014                         penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
    3015                         penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
    3016                         penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
    3017                         penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
    3018                         penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
    3019                         penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
    3020                         penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
    3021                         penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
    3022                         penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
    3023                         penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
    3024                         penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
    3025                         penta_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
    3026                         penta_node_ids[14]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
    3027                         penta_node_ids[15]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+2]+1;
    3028                         penta_node_ids[16]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+3]+1;
    3029                         penta_node_ids[17]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+4]+1;
     3012                        penta_node_ids[ 0]=iomodel->elements[6*index+0];
     3013                        penta_node_ids[ 1]=iomodel->elements[6*index+1];
     3014                        penta_node_ids[ 2]=iomodel->elements[6*index+2];
     3015                        penta_node_ids[ 3]=iomodel->elements[6*index+3];
     3016                        penta_node_ids[ 4]=iomodel->elements[6*index+4];
     3017                        penta_node_ids[ 5]=iomodel->elements[6*index+5];
     3018                        penta_node_ids[ 6]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
     3019                        penta_node_ids[ 7]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
     3020                        penta_node_ids[ 8]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
     3021                        penta_node_ids[ 9]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
     3022                        penta_node_ids[10]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
     3023                        penta_node_ids[11]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
     3024                        penta_node_ids[12]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
     3025                        penta_node_ids[13]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
     3026                        penta_node_ids[14]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
     3027                        penta_node_ids[15]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+2]+1;
     3028                        penta_node_ids[16]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+3]+1;
     3029                        penta_node_ids[17]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+4]+1;
    30303030                        break;
    30313031                case P2bubbleEnum: case P2bubblecondensedEnum:
    30323032                        numnodes         = 19;
    30333033                        penta_node_ids   = xNew<int>(numnodes);
    3034                         penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
    3035                         penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
    3036                         penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
    3037                         penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
    3038                         penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
    3039                         penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
    3040                         penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
    3041                         penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
    3042                         penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
    3043                         penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
    3044                         penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
    3045                         penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
    3046                         penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
    3047                         penta_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
    3048                         penta_node_ids[14]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
    3049                         penta_node_ids[15]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+2]+1;
    3050                         penta_node_ids[16]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+3]+1;
    3051                         penta_node_ids[17]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+4]+1;
    3052                         penta_node_ids[18]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+index+1;
     3034                        penta_node_ids[ 0]=iomodel->elements[6*index+0];
     3035                        penta_node_ids[ 1]=iomodel->elements[6*index+1];
     3036                        penta_node_ids[ 2]=iomodel->elements[6*index+2];
     3037                        penta_node_ids[ 3]=iomodel->elements[6*index+3];
     3038                        penta_node_ids[ 4]=iomodel->elements[6*index+4];
     3039                        penta_node_ids[ 5]=iomodel->elements[6*index+5];
     3040                        penta_node_ids[ 6]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
     3041                        penta_node_ids[ 7]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
     3042                        penta_node_ids[ 8]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
     3043                        penta_node_ids[ 9]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
     3044                        penta_node_ids[10]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
     3045                        penta_node_ids[11]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
     3046                        penta_node_ids[12]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
     3047                        penta_node_ids[13]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
     3048                        penta_node_ids[14]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
     3049                        penta_node_ids[15]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+2]+1;
     3050                        penta_node_ids[16]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+3]+1;
     3051                        penta_node_ids[17]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+4]+1;
     3052                        penta_node_ids[18]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+index+1;
    30533053                        break;
    30543054                case P1P1Enum: case P1P1GLSEnum:
    30553055                        numnodes         = 12;
    30563056                        penta_node_ids   = xNew<int>(numnodes);
    3057                         penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
    3058                         penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
    3059                         penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
    3060                         penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
    3061                         penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
    3062                         penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
    3063 
    3064                         penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[6*index+0];
    3065                         penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[6*index+1];
    3066                         penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[6*index+2];
    3067                         penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[6*index+3];
    3068                         penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[6*index+4];
    3069                         penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[6*index+5];
     3057                        penta_node_ids[ 0]=iomodel->elements[6*index+0];
     3058                        penta_node_ids[ 1]=iomodel->elements[6*index+1];
     3059                        penta_node_ids[ 2]=iomodel->elements[6*index+2];
     3060                        penta_node_ids[ 3]=iomodel->elements[6*index+3];
     3061                        penta_node_ids[ 4]=iomodel->elements[6*index+4];
     3062                        penta_node_ids[ 5]=iomodel->elements[6*index+5];
     3063
     3064                        penta_node_ids[ 6]=iomodel->numberofvertices+iomodel->elements[6*index+0];
     3065                        penta_node_ids[ 7]=iomodel->numberofvertices+iomodel->elements[6*index+1];
     3066                        penta_node_ids[ 8]=iomodel->numberofvertices+iomodel->elements[6*index+2];
     3067                        penta_node_ids[ 9]=iomodel->numberofvertices+iomodel->elements[6*index+3];
     3068                        penta_node_ids[10]=iomodel->numberofvertices+iomodel->elements[6*index+4];
     3069                        penta_node_ids[11]=iomodel->numberofvertices+iomodel->elements[6*index+5];
    30703070                        break;
    30713071                case MINIEnum: case MINIcondensedEnum:
    30723072                        numnodes         = 13;
    30733073                        penta_node_ids   = xNew<int>(numnodes);
    3074                         penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
    3075                         penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
    3076                         penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
    3077                         penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
    3078                         penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
    3079                         penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
    3080                         penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+index+1;
    3081 
    3082                         penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+0];
    3083                         penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+1];
    3084                         penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+2];
    3085                         penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+3];
    3086                         penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+4];
    3087                         penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+5];
     3074                        penta_node_ids[ 0]=iomodel->elements[6*index+0];
     3075                        penta_node_ids[ 1]=iomodel->elements[6*index+1];
     3076                        penta_node_ids[ 2]=iomodel->elements[6*index+2];
     3077                        penta_node_ids[ 3]=iomodel->elements[6*index+3];
     3078                        penta_node_ids[ 4]=iomodel->elements[6*index+4];
     3079                        penta_node_ids[ 5]=iomodel->elements[6*index+5];
     3080                        penta_node_ids[ 6]=iomodel->numberofvertices+index+1;
     3081
     3082                        penta_node_ids[ 7]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+0];
     3083                        penta_node_ids[ 8]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+1];
     3084                        penta_node_ids[ 9]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+2];
     3085                        penta_node_ids[10]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+3];
     3086                        penta_node_ids[11]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+4];
     3087                        penta_node_ids[12]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+5];
    30883088                        break;
    30893089                case TaylorHoodEnum:
    30903090                        numnodes         = 24;
    30913091                        penta_node_ids   = xNew<int>(numnodes);
    3092                         penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
    3093                         penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
    3094                         penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
    3095                         penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
    3096                         penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
    3097                         penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
    3098                         penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
    3099                         penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
    3100                         penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
    3101                         penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
    3102                         penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
    3103                         penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
    3104                         penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
    3105                         penta_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
    3106                         penta_node_ids[14]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
    3107                         penta_node_ids[15]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+2]+1;
    3108                         penta_node_ids[16]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+3]+1;
    3109                         penta_node_ids[17]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+4]+1;
    3110 
    3111                         penta_node_ids[18]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->elements[6*index+0];
    3112                         penta_node_ids[19]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->elements[6*index+1];
    3113                         penta_node_ids[20]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->elements[6*index+2];
    3114                         penta_node_ids[21]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->elements[6*index+3];
    3115                         penta_node_ids[22]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->elements[6*index+4];
    3116                         penta_node_ids[23]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->elements[6*index+5];
     3092                        penta_node_ids[ 0]=iomodel->elements[6*index+0];
     3093                        penta_node_ids[ 1]=iomodel->elements[6*index+1];
     3094                        penta_node_ids[ 2]=iomodel->elements[6*index+2];
     3095                        penta_node_ids[ 3]=iomodel->elements[6*index+3];
     3096                        penta_node_ids[ 4]=iomodel->elements[6*index+4];
     3097                        penta_node_ids[ 5]=iomodel->elements[6*index+5];
     3098                        penta_node_ids[ 6]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
     3099                        penta_node_ids[ 7]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
     3100                        penta_node_ids[ 8]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
     3101                        penta_node_ids[ 9]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
     3102                        penta_node_ids[10]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
     3103                        penta_node_ids[11]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
     3104                        penta_node_ids[12]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
     3105                        penta_node_ids[13]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
     3106                        penta_node_ids[14]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
     3107                        penta_node_ids[15]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+2]+1;
     3108                        penta_node_ids[16]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+3]+1;
     3109                        penta_node_ids[17]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+4]+1;
     3110
     3111                        penta_node_ids[18]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->elements[6*index+0];
     3112                        penta_node_ids[19]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->elements[6*index+1];
     3113                        penta_node_ids[20]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->elements[6*index+2];
     3114                        penta_node_ids[21]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->elements[6*index+3];
     3115                        penta_node_ids[22]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->elements[6*index+4];
     3116                        penta_node_ids[23]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->elements[6*index+5];
    31173117                        break;
    31183118                case LATaylorHoodEnum:
    31193119                        numnodes         = 18;
    31203120                        penta_node_ids   = xNew<int>(numnodes);
    3121                         penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
    3122                         penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
    3123                         penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
    3124                         penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
    3125                         penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
    3126                         penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
    3127                         penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
    3128                         penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
    3129                         penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
    3130                         penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
    3131                         penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
    3132                         penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
    3133                         penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
    3134                         penta_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
    3135                         penta_node_ids[14]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
    3136                         penta_node_ids[15]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+2]+1;
    3137                         penta_node_ids[16]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+3]+1;
    3138                         penta_node_ids[17]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+4]+1;
     3121                        penta_node_ids[ 0]=iomodel->elements[6*index+0];
     3122                        penta_node_ids[ 1]=iomodel->elements[6*index+1];
     3123                        penta_node_ids[ 2]=iomodel->elements[6*index+2];
     3124                        penta_node_ids[ 3]=iomodel->elements[6*index+3];
     3125                        penta_node_ids[ 4]=iomodel->elements[6*index+4];
     3126                        penta_node_ids[ 5]=iomodel->elements[6*index+5];
     3127                        penta_node_ids[ 6]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
     3128                        penta_node_ids[ 7]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
     3129                        penta_node_ids[ 8]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
     3130                        penta_node_ids[ 9]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
     3131                        penta_node_ids[10]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
     3132                        penta_node_ids[11]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
     3133                        penta_node_ids[12]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
     3134                        penta_node_ids[13]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
     3135                        penta_node_ids[14]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
     3136                        penta_node_ids[15]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+2]+1;
     3137                        penta_node_ids[16]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+3]+1;
     3138                        penta_node_ids[17]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+4]+1;
    31393139                        break;
    31403140                case OneLayerP4zEnum:
    31413141                        numnodes         = 30+6;
    31423142                        penta_node_ids   = xNew<int>(numnodes);
    3143                         penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0]; /*Vertex 1*/
    3144                         penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1]; /*Vertex 2*/
    3145                         penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2]; /*Vertex 3*/
    3146                         penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3]; /*Vertex 4*/
    3147                         penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4]; /*Vertex 5*/
    3148                         penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5]; /*Vertex 6*/
    3149                         penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+1; /*mid vertical edge 1*/
    3150                         penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+1; /*mid vertical edge 2*/
    3151                         penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+1; /*mid vertical edge 3*/
    3152                         penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+3]+1; /*mid basal edge 1*/
    3153                         penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+4]+1; /*mid basal edge 2*/
    3154                         penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+5]+1; /*mid basal edge 3*/
    3155                         penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+6]+1; /*mid top edge 1*/
    3156                         penta_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+7]+1; /*mid top edge 2*/
    3157                         penta_node_ids[14]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+8]+1; /*mid top edge 3*/
    3158                         penta_node_ids[15]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+2; /* 1/4 vertical edge 1*/
    3159                         penta_node_ids[16]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+2; /* 1/4 vertical edge 2*/
    3160                         penta_node_ids[17]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+2; /* 1/4 vertical edge 3*/
    3161                         penta_node_ids[18]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+3; /* 2/4 vertical edge 1*/
    3162                         penta_node_ids[19]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+3; /* 2/4 vertical edge 2*/
    3163                         penta_node_ids[20]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+3; /* 2/4 vertical edge 3*/
    3164                         penta_node_ids[21]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+2]+1; /* 1/4 vertical face 1*/
    3165                         penta_node_ids[22]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+3]+1; /* 1/4 vertical face 2*/
    3166                         penta_node_ids[23]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+4]+1; /* 1/4 vertical face 3*/
    3167                         penta_node_ids[24]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+2]+2; /* 2/4 vertical face 1*/
    3168                         penta_node_ids[25]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+3]+2; /* 2/4 vertical face 2*/
    3169                         penta_node_ids[26]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+4]+2; /* 2/4 vertical face 3*/
    3170                         penta_node_ids[27]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+2]+3; /* 3/4 vertical face 1*/
    3171                         penta_node_ids[28]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+3]+3; /* 3/4 vertical face 2*/
    3172                         penta_node_ids[29]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+4]+3; /* 3/4 vertical face 3*/
    3173 
    3174                         penta_node_ids[30]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->numberoffaces+iomodel->elements[6*index+0];
    3175                         penta_node_ids[31]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->numberoffaces+iomodel->elements[6*index+1];
    3176                         penta_node_ids[32]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->numberoffaces+iomodel->elements[6*index+2];
    3177                         penta_node_ids[33]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->numberoffaces+iomodel->elements[6*index+3];
    3178                         penta_node_ids[34]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->numberoffaces+iomodel->elements[6*index+4];
    3179                         penta_node_ids[35]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->numberoffaces+iomodel->elements[6*index+5];
     3143                        penta_node_ids[ 0]=iomodel->elements[6*index+0]; /*Vertex 1*/
     3144                        penta_node_ids[ 1]=iomodel->elements[6*index+1]; /*Vertex 2*/
     3145                        penta_node_ids[ 2]=iomodel->elements[6*index+2]; /*Vertex 3*/
     3146                        penta_node_ids[ 3]=iomodel->elements[6*index+3]; /*Vertex 4*/
     3147                        penta_node_ids[ 4]=iomodel->elements[6*index+4]; /*Vertex 5*/
     3148                        penta_node_ids[ 5]=iomodel->elements[6*index+5]; /*Vertex 6*/
     3149                        penta_node_ids[ 6]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+1; /*mid vertical edge 1*/
     3150                        penta_node_ids[ 7]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+1; /*mid vertical edge 2*/
     3151                        penta_node_ids[ 8]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+1; /*mid vertical edge 3*/
     3152                        penta_node_ids[ 9]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+3]+1; /*mid basal edge 1*/
     3153                        penta_node_ids[10]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+4]+1; /*mid basal edge 2*/
     3154                        penta_node_ids[11]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+5]+1; /*mid basal edge 3*/
     3155                        penta_node_ids[12]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+6]+1; /*mid top edge 1*/
     3156                        penta_node_ids[13]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+7]+1; /*mid top edge 2*/
     3157                        penta_node_ids[14]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+8]+1; /*mid top edge 3*/
     3158                        penta_node_ids[15]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+2; /* 1/4 vertical edge 1*/
     3159                        penta_node_ids[16]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+2; /* 1/4 vertical edge 2*/
     3160                        penta_node_ids[17]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+2; /* 1/4 vertical edge 3*/
     3161                        penta_node_ids[18]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+3; /* 2/4 vertical edge 1*/
     3162                        penta_node_ids[19]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+3; /* 2/4 vertical edge 2*/
     3163                        penta_node_ids[20]=iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+3; /* 2/4 vertical edge 3*/
     3164                        penta_node_ids[21]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+2]+1; /* 1/4 vertical face 1*/
     3165                        penta_node_ids[22]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+3]+1; /* 1/4 vertical face 2*/
     3166                        penta_node_ids[23]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+4]+1; /* 1/4 vertical face 3*/
     3167                        penta_node_ids[24]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+2]+2; /* 2/4 vertical face 1*/
     3168                        penta_node_ids[25]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+3]+2; /* 2/4 vertical face 2*/
     3169                        penta_node_ids[26]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+4]+2; /* 2/4 vertical face 3*/
     3170                        penta_node_ids[27]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+2]+3; /* 3/4 vertical face 1*/
     3171                        penta_node_ids[28]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+3]+3; /* 3/4 vertical face 2*/
     3172                        penta_node_ids[29]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+4]+3; /* 3/4 vertical face 3*/
     3173
     3174                        penta_node_ids[30]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->numberoffaces+iomodel->elements[6*index+0];
     3175                        penta_node_ids[31]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->numberoffaces+iomodel->elements[6*index+1];
     3176                        penta_node_ids[32]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->numberoffaces+iomodel->elements[6*index+2];
     3177                        penta_node_ids[33]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->numberoffaces+iomodel->elements[6*index+3];
     3178                        penta_node_ids[34]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->numberoffaces+iomodel->elements[6*index+4];
     3179                        penta_node_ids[35]=iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->numberoffaces+iomodel->elements[6*index+5];
    31803180                        break;
    31813181                case CrouzeixRaviartEnum:
    31823182                        numnodes         = 25;
    31833183                        penta_node_ids   = xNew<int>(numnodes);
    3184                         penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
    3185                         penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
    3186                         penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
    3187                         penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
    3188                         penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
    3189                         penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
    3190                         penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
    3191                         penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
    3192                         penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
    3193                         penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
    3194                         penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
    3195                         penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
    3196                         penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
    3197                         penta_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
    3198                         penta_node_ids[14]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
    3199                         penta_node_ids[15]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+2]+1;
    3200                         penta_node_ids[16]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+3]+1;
    3201                         penta_node_ids[17]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+4]+1;
    3202                         penta_node_ids[18]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+index+1;
    3203 
    3204                         penta_node_ids[19]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->numberofelements+6*index+1;
    3205                         penta_node_ids[20]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->numberofelements+6*index+2;
    3206                         penta_node_ids[21]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->numberofelements+6*index+3;
    3207                         penta_node_ids[22]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->numberofelements+6*index+4;
    3208                         penta_node_ids[23]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->numberofelements+6*index+5;
    3209                         penta_node_ids[24]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->numberofelements+6*index+6;
     3184                        penta_node_ids[ 0]=iomodel->elements[6*index+0];
     3185                        penta_node_ids[ 1]=iomodel->elements[6*index+1];
     3186                        penta_node_ids[ 2]=iomodel->elements[6*index+2];
     3187                        penta_node_ids[ 3]=iomodel->elements[6*index+3];
     3188                        penta_node_ids[ 4]=iomodel->elements[6*index+4];
     3189                        penta_node_ids[ 5]=iomodel->elements[6*index+5];
     3190                        penta_node_ids[ 6]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
     3191                        penta_node_ids[ 7]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
     3192                        penta_node_ids[ 8]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
     3193                        penta_node_ids[ 9]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
     3194                        penta_node_ids[10]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
     3195                        penta_node_ids[11]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
     3196                        penta_node_ids[12]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
     3197                        penta_node_ids[13]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
     3198                        penta_node_ids[14]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
     3199                        penta_node_ids[15]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+2]+1;
     3200                        penta_node_ids[16]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+3]+1;
     3201                        penta_node_ids[17]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+4]+1;
     3202                        penta_node_ids[18]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+index+1;
     3203
     3204                        penta_node_ids[19]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->numberofelements+6*index+1;
     3205                        penta_node_ids[20]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->numberofelements+6*index+2;
     3206                        penta_node_ids[21]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->numberofelements+6*index+3;
     3207                        penta_node_ids[22]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->numberofelements+6*index+4;
     3208                        penta_node_ids[23]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->numberofelements+6*index+5;
     3209                        penta_node_ids[24]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+iomodel->numberofelements+6*index+6;
    32103210                        break;
    32113211                case LACrouzeixRaviartEnum:
    32123212                        numnodes         = 19;
    32133213                        penta_node_ids   = xNew<int>(numnodes);
    3214                         penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
    3215                         penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
    3216                         penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
    3217                         penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
    3218                         penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
    3219                         penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
    3220                         penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
    3221                         penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
    3222                         penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
    3223                         penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
    3224                         penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
    3225                         penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
    3226                         penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
    3227                         penta_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
    3228                         penta_node_ids[14]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
    3229                         penta_node_ids[15]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+2]+1;
    3230                         penta_node_ids[16]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+3]+1;
    3231                         penta_node_ids[17]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+4]+1;
    3232                         penta_node_ids[18]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+index+1;
     3214                        penta_node_ids[ 0]=iomodel->elements[6*index+0];
     3215                        penta_node_ids[ 1]=iomodel->elements[6*index+1];
     3216                        penta_node_ids[ 2]=iomodel->elements[6*index+2];
     3217                        penta_node_ids[ 3]=iomodel->elements[6*index+3];
     3218                        penta_node_ids[ 4]=iomodel->elements[6*index+4];
     3219                        penta_node_ids[ 5]=iomodel->elements[6*index+5];
     3220                        penta_node_ids[ 6]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
     3221                        penta_node_ids[ 7]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
     3222                        penta_node_ids[ 8]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
     3223                        penta_node_ids[ 9]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
     3224                        penta_node_ids[10]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
     3225                        penta_node_ids[11]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
     3226                        penta_node_ids[12]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
     3227                        penta_node_ids[13]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
     3228                        penta_node_ids[14]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
     3229                        penta_node_ids[15]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+2]+1;
     3230                        penta_node_ids[16]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+3]+1;
     3231                        penta_node_ids[17]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elementtofaceconnectivity[5*index+4]+1;
     3232                        penta_node_ids[18]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+index+1;
    32333233                        break;
    32343234                default:
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp

    r23169 r23532  
    917917                        numnodes         = 4;
    918918                        tetra_node_ids   = xNew<int>(numnodes);
    919                         tetra_node_ids[0]=iomodel->nodecounter+iomodel->elements[4*index+0];
    920                         tetra_node_ids[1]=iomodel->nodecounter+iomodel->elements[4*index+1];
    921                         tetra_node_ids[2]=iomodel->nodecounter+iomodel->elements[4*index+2];
    922                         tetra_node_ids[3]=iomodel->nodecounter+iomodel->elements[4*index+3];
     919                        tetra_node_ids[0]=iomodel->elements[4*index+0];
     920                        tetra_node_ids[1]=iomodel->elements[4*index+1];
     921                        tetra_node_ids[2]=iomodel->elements[4*index+2];
     922                        tetra_node_ids[3]=iomodel->elements[4*index+3];
    923923                        break;
    924924                case P1bubbleEnum: case P1bubblecondensedEnum:
    925925                        numnodes         = 5;
    926926                        tetra_node_ids   = xNew<int>(numnodes);
    927                         tetra_node_ids[0]=iomodel->nodecounter+iomodel->elements[4*index+0];
    928                         tetra_node_ids[1]=iomodel->nodecounter+iomodel->elements[4*index+1];
    929                         tetra_node_ids[2]=iomodel->nodecounter+iomodel->elements[4*index+2];
    930                         tetra_node_ids[3]=iomodel->nodecounter+iomodel->elements[4*index+3];
    931                         tetra_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+index+1;
     927                        tetra_node_ids[0]=iomodel->elements[4*index+0];
     928                        tetra_node_ids[1]=iomodel->elements[4*index+1];
     929                        tetra_node_ids[2]=iomodel->elements[4*index+2];
     930                        tetra_node_ids[3]=iomodel->elements[4*index+3];
     931                        tetra_node_ids[4]=iomodel->numberofvertices+index+1;
    932932                        break;
    933933                case P2Enum:
    934934                        numnodes        = 10;
    935935                        tetra_node_ids   = xNew<int>(numnodes);
    936                         tetra_node_ids[0]=iomodel->nodecounter+iomodel->elements[4*index+0];
    937                         tetra_node_ids[1]=iomodel->nodecounter+iomodel->elements[4*index+1];
    938                         tetra_node_ids[2]=iomodel->nodecounter+iomodel->elements[4*index+2];
    939                         tetra_node_ids[3]=iomodel->nodecounter+iomodel->elements[4*index+3];
    940                         tetra_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+0]+1;
    941                         tetra_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+1]+1;
    942                         tetra_node_ids[6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+2]+1;
    943                         tetra_node_ids[7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+3]+1;
    944                         tetra_node_ids[8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+4]+1;
    945                         tetra_node_ids[9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+5]+1;
     936                        tetra_node_ids[0]=iomodel->elements[4*index+0];
     937                        tetra_node_ids[1]=iomodel->elements[4*index+1];
     938                        tetra_node_ids[2]=iomodel->elements[4*index+2];
     939                        tetra_node_ids[3]=iomodel->elements[4*index+3];
     940                        tetra_node_ids[4]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+0]+1;
     941                        tetra_node_ids[5]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+1]+1;
     942                        tetra_node_ids[6]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+2]+1;
     943                        tetra_node_ids[7]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+3]+1;
     944                        tetra_node_ids[8]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+4]+1;
     945                        tetra_node_ids[9]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+5]+1;
    946946                        break;
    947947                case MINIEnum: case MINIcondensedEnum:
    948948                        numnodes         = 9;
    949949                        tetra_node_ids   = xNew<int>(numnodes);
    950                         tetra_node_ids[0]=iomodel->nodecounter+iomodel->elements[4*index+0];
    951                         tetra_node_ids[1]=iomodel->nodecounter+iomodel->elements[4*index+1];
    952                         tetra_node_ids[2]=iomodel->nodecounter+iomodel->elements[4*index+2];
    953                         tetra_node_ids[3]=iomodel->nodecounter+iomodel->elements[4*index+3];
    954                         tetra_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+index+1;
    955 
    956                         tetra_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[4*index+0];
    957                         tetra_node_ids[6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[4*index+1];
    958                         tetra_node_ids[7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[4*index+2];
    959                         tetra_node_ids[8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[4*index+3];
     950                        tetra_node_ids[0]=iomodel->elements[4*index+0];
     951                        tetra_node_ids[1]=iomodel->elements[4*index+1];
     952                        tetra_node_ids[2]=iomodel->elements[4*index+2];
     953                        tetra_node_ids[3]=iomodel->elements[4*index+3];
     954                        tetra_node_ids[4]=iomodel->numberofvertices+index+1;
     955
     956                        tetra_node_ids[5]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[4*index+0];
     957                        tetra_node_ids[6]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[4*index+1];
     958                        tetra_node_ids[7]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[4*index+2];
     959                        tetra_node_ids[8]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[4*index+3];
    960960                        break;
    961961                case TaylorHoodEnum:
     
    963963                        numnodes        = 14;
    964964                        tetra_node_ids  = xNew<int>(numnodes);
    965                         tetra_node_ids[0]=iomodel->nodecounter+iomodel->elements[4*index+0];
    966                         tetra_node_ids[1]=iomodel->nodecounter+iomodel->elements[4*index+1];
    967                         tetra_node_ids[2]=iomodel->nodecounter+iomodel->elements[4*index+2];
    968                         tetra_node_ids[3]=iomodel->nodecounter+iomodel->elements[4*index+3];
    969                         tetra_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+0]+1;
    970                         tetra_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+1]+1;
    971                         tetra_node_ids[6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+2]+1;
    972                         tetra_node_ids[7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+3]+1;
    973                         tetra_node_ids[8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+4]+1;
    974                         tetra_node_ids[9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+5]+1;
    975 
    976                         tetra_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[4*index+0];
    977                         tetra_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[4*index+1];
    978                         tetra_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[4*index+2];
    979                         tetra_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[4*index+3];
     965                        tetra_node_ids[0]=iomodel->elements[4*index+0];
     966                        tetra_node_ids[1]=iomodel->elements[4*index+1];
     967                        tetra_node_ids[2]=iomodel->elements[4*index+2];
     968                        tetra_node_ids[3]=iomodel->elements[4*index+3];
     969                        tetra_node_ids[4]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+0]+1;
     970                        tetra_node_ids[5]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+1]+1;
     971                        tetra_node_ids[6]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+2]+1;
     972                        tetra_node_ids[7]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+3]+1;
     973                        tetra_node_ids[8]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+4]+1;
     974                        tetra_node_ids[9]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+5]+1;
     975
     976                        tetra_node_ids[10]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[4*index+0];
     977                        tetra_node_ids[11]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[4*index+1];
     978                        tetra_node_ids[12]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[4*index+2];
     979                        tetra_node_ids[13]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[4*index+3];
    980980                        break;
    981981                case LATaylorHoodEnum:
    982982                        numnodes        = 10;
    983983                        tetra_node_ids  = xNew<int>(numnodes);
    984                         tetra_node_ids[0]=iomodel->nodecounter+iomodel->elements[4*index+0];
    985                         tetra_node_ids[1]=iomodel->nodecounter+iomodel->elements[4*index+1];
    986                         tetra_node_ids[2]=iomodel->nodecounter+iomodel->elements[4*index+2];
    987                         tetra_node_ids[3]=iomodel->nodecounter+iomodel->elements[4*index+3];
    988                         tetra_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+0]+1;
    989                         tetra_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+1]+1;
    990                         tetra_node_ids[6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+2]+1;
    991                         tetra_node_ids[7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+3]+1;
    992                         tetra_node_ids[8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+4]+1;
    993                         tetra_node_ids[9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+5]+1;
     984                        tetra_node_ids[0]=iomodel->elements[4*index+0];
     985                        tetra_node_ids[1]=iomodel->elements[4*index+1];
     986                        tetra_node_ids[2]=iomodel->elements[4*index+2];
     987                        tetra_node_ids[3]=iomodel->elements[4*index+3];
     988                        tetra_node_ids[4]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+0]+1;
     989                        tetra_node_ids[5]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+1]+1;
     990                        tetra_node_ids[6]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+2]+1;
     991                        tetra_node_ids[7]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+3]+1;
     992                        tetra_node_ids[8]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+4]+1;
     993                        tetra_node_ids[9]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+5]+1;
    994994                        break;
    995995                default:
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r23173 r23532  
    37473747                        numnodes        = 3;
    37483748                        tria_node_ids   = xNew<int>(numnodes);
    3749                         tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
    3750                         tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
    3751                         tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
     3749                        tria_node_ids[0]=iomodel->elements[3*index+0];
     3750                        tria_node_ids[1]=iomodel->elements[3*index+1];
     3751                        tria_node_ids[2]=iomodel->elements[3*index+2];
    37523752                        break;
    37533753                case P1DGEnum:
    37543754                        numnodes        = 3;
    37553755                        tria_node_ids   = xNew<int>(numnodes);
    3756                         tria_node_ids[0]=iomodel->nodecounter+3*index+1;
    3757                         tria_node_ids[1]=iomodel->nodecounter+3*index+2;
    3758                         tria_node_ids[2]=iomodel->nodecounter+3*index+3;
     3756                        tria_node_ids[0]=3*index+1;
     3757                        tria_node_ids[1]=3*index+2;
     3758                        tria_node_ids[2]=3*index+3;
    37593759                        break;
    37603760                case P1bubbleEnum: case P1bubblecondensedEnum:
    37613761                        numnodes        = 4;
    37623762                        tria_node_ids   = xNew<int>(numnodes);
    3763                         tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
    3764                         tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
    3765                         tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
    3766                         tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+index+1;
     3763                        tria_node_ids[0]=iomodel->elements[3*index+0];
     3764                        tria_node_ids[1]=iomodel->elements[3*index+1];
     3765                        tria_node_ids[2]=iomodel->elements[3*index+2];
     3766                        tria_node_ids[3]=iomodel->numberofvertices+index+1;
    37673767                        break;
    37683768                case P2Enum:
    37693769                        numnodes        = 6;
    37703770                        tria_node_ids   = xNew<int>(numnodes);
    3771                         tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
    3772                         tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
    3773                         tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
    3774                         tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]+1;
    3775                         tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1;
    3776                         tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
     3771                        tria_node_ids[0]=iomodel->elements[3*index+0];
     3772                        tria_node_ids[1]=iomodel->elements[3*index+1];
     3773                        tria_node_ids[2]=iomodel->elements[3*index+2];
     3774                        tria_node_ids[3]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]+1;
     3775                        tria_node_ids[4]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1;
     3776                        tria_node_ids[5]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
    37773777                        break;
    37783778                case P2bubbleEnum: case P2bubblecondensedEnum:
    37793779                        numnodes        = 7;
    37803780                        tria_node_ids   = xNew<int>(numnodes);
    3781                         tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
    3782                         tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
    3783                         tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
    3784                         tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]+1;
    3785                         tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1;
    3786                         tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
    3787                         tria_node_ids[6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+index+1;
     3781                        tria_node_ids[0]=iomodel->elements[3*index+0];
     3782                        tria_node_ids[1]=iomodel->elements[3*index+1];
     3783                        tria_node_ids[2]=iomodel->elements[3*index+2];
     3784                        tria_node_ids[3]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]+1;
     3785                        tria_node_ids[4]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1;
     3786                        tria_node_ids[5]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
     3787                        tria_node_ids[6]=iomodel->numberofvertices+iomodel->numberofedges+index+1;
    37883788                        break;
    37893789                case P1P1Enum: case P1P1GLSEnum:
    37903790                        numnodes        = 6;
    37913791                        tria_node_ids   = xNew<int>(numnodes);
    3792                         tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
    3793                         tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
    3794                         tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
    3795 
    3796                         tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[3*index+0];
    3797                         tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[3*index+1];
    3798                         tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[3*index+2];
     3792                        tria_node_ids[0]=iomodel->elements[3*index+0];
     3793                        tria_node_ids[1]=iomodel->elements[3*index+1];
     3794                        tria_node_ids[2]=iomodel->elements[3*index+2];
     3795
     3796                        tria_node_ids[3]=iomodel->numberofvertices+iomodel->elements[3*index+0];
     3797                        tria_node_ids[4]=iomodel->numberofvertices+iomodel->elements[3*index+1];
     3798                        tria_node_ids[5]=iomodel->numberofvertices+iomodel->elements[3*index+2];
    37993799                        break;
    38003800                case MINIEnum: case MINIcondensedEnum:
    38013801                        numnodes       = 7;
    38023802                        tria_node_ids  = xNew<int>(numnodes);
    3803                         tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
    3804                         tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
    3805                         tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
    3806                         tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+index+1;
    3807 
    3808                         tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[3*index+0];
    3809                         tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[3*index+1];
    3810                         tria_node_ids[6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[3*index+2];
     3803                        tria_node_ids[0]=iomodel->elements[3*index+0];
     3804                        tria_node_ids[1]=iomodel->elements[3*index+1];
     3805                        tria_node_ids[2]=iomodel->elements[3*index+2];
     3806                        tria_node_ids[3]=iomodel->numberofvertices+index+1;
     3807
     3808                        tria_node_ids[4]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[3*index+0];
     3809                        tria_node_ids[5]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[3*index+1];
     3810                        tria_node_ids[6]=iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[3*index+2];
    38113811                        break;
    38123812                case TaylorHoodEnum:
     
    38143814                        numnodes        = 9;
    38153815                        tria_node_ids   = xNew<int>(numnodes);
    3816                         tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
    3817                         tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
    3818                         tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
    3819                         tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]+1;
    3820                         tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1;
    3821                         tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
    3822 
    3823                         tria_node_ids[6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[3*index+0];
    3824                         tria_node_ids[7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[3*index+1];
    3825                         tria_node_ids[8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[3*index+2];
     3816                        tria_node_ids[0]=iomodel->elements[3*index+0];
     3817                        tria_node_ids[1]=iomodel->elements[3*index+1];
     3818                        tria_node_ids[2]=iomodel->elements[3*index+2];
     3819                        tria_node_ids[3]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]+1;
     3820                        tria_node_ids[4]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1;
     3821                        tria_node_ids[5]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
     3822
     3823                        tria_node_ids[6]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[3*index+0];
     3824                        tria_node_ids[7]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[3*index+1];
     3825                        tria_node_ids[8]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[3*index+2];
    38263826                        break;
    38273827                case LATaylorHoodEnum:
    38283828                        numnodes        = 6;
    38293829                        tria_node_ids   = xNew<int>(numnodes);
    3830                         tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
    3831                         tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
    3832                         tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
    3833                         tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]+1;
    3834                         tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1;
    3835                         tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
     3830                        tria_node_ids[0]=iomodel->elements[3*index+0];
     3831                        tria_node_ids[1]=iomodel->elements[3*index+1];
     3832                        tria_node_ids[2]=iomodel->elements[3*index+2];
     3833                        tria_node_ids[3]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]+1;
     3834                        tria_node_ids[4]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1;
     3835                        tria_node_ids[5]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
    38363836                        break;
    38373837                case CrouzeixRaviartEnum:
    38383838                        numnodes        = 10;
    38393839                        tria_node_ids   = xNew<int>(numnodes);
    3840                         tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
    3841                         tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
    3842                         tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
    3843                         tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]+1;
    3844                         tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1;
    3845                         tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
    3846                         tria_node_ids[6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+index+1;
    3847 
    3848                         tria_node_ids[7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberofelements+3*index+1;
    3849                         tria_node_ids[8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberofelements+3*index+2;
    3850                         tria_node_ids[9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberofelements+3*index+3;
     3840                        tria_node_ids[0]=iomodel->elements[3*index+0];
     3841                        tria_node_ids[1]=iomodel->elements[3*index+1];
     3842                        tria_node_ids[2]=iomodel->elements[3*index+2];
     3843                        tria_node_ids[3]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]+1;
     3844                        tria_node_ids[4]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1;
     3845                        tria_node_ids[5]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
     3846                        tria_node_ids[6]=iomodel->numberofvertices+iomodel->numberofedges+index+1;
     3847
     3848                        tria_node_ids[7]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberofelements+3*index+1;
     3849                        tria_node_ids[8]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberofelements+3*index+2;
     3850                        tria_node_ids[9]=iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberofelements+3*index+3;
    38513851                        break;
    38523852                case LACrouzeixRaviartEnum:
    38533853                        numnodes        = 7;
    38543854                        tria_node_ids   = xNew<int>(numnodes);
    3855                         tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
    3856                         tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
    3857                         tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
    3858                         tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]+1;
    3859                         tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1;
    3860                         tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
    3861                         tria_node_ids[6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+index+1;
     3855                        tria_node_ids[0]=iomodel->elements[3*index+0];
     3856                        tria_node_ids[1]=iomodel->elements[3*index+1];
     3857                        tria_node_ids[2]=iomodel->elements[3*index+2];
     3858                        tria_node_ids[3]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]+1;
     3859                        tria_node_ids[4]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1;
     3860                        tria_node_ids[5]=iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
     3861                        tria_node_ids[6]=iomodel->numberofvertices+iomodel->numberofedges+index+1;
    38623862                        break;
    38633863                default:
  • TabularUnified issm/trunk-jpl/src/c/classes/FemModel.cpp

    r23528 r23532  
    26502650        Nodes** new_nodes_list = xNew<Nodes*>(this->nummodels);
    26512651
    2652         int nodecounter         =0;
    2653         int constraintcounter=0;
    26542652        this->analysis_counter=-1;
    26552653        for(int i=0;i<this->nummodels;i++){//create nodes for each analysis in analysis_type_list
     
    26642662                if(analysis_enum==StressbalanceVerticalAnalysisEnum) continue;
    26652663
    2666                 this->CreateNodes(newnumberofvertices,my_vertices,nodecounter,analysis_enum,new_nodes_list[i]);
    2667                 this->CreateConstraints(new_vertices,nodecounter,constraintcounter,analysis_enum,new_constraints_list[i]);
    2668                 this->UpdateElements(newnumberofelements,newelementslist,my_elements,nodecounter,i,new_elements);
    2669 
    2670                 if(new_nodes_list[i]->Size()) nodecounter=new_nodes_list[i]->MaximumId();
    2671                 constraintcounter = new_constraints_list[i]->NumberOfConstraints();
    2672                 /*Make sure nodecounter is at least 0 (if no node exists, maxid will be -1*/
    2673                 _assert_(nodecounter>=0);
     2664                this->CreateNodes(newnumberofvertices,my_vertices,analysis_enum,new_nodes_list[i]);
     2665                this->CreateConstraints(new_vertices,analysis_enum,new_constraints_list[i]);
     2666                this->UpdateElements(newnumberofelements,newelementslist,my_elements,i,new_elements);
    26742667
    26752668                new_constraints_list[i]->Presort();
     
    32673260}
    32683261/*}}}*/
    3269 void FemModel::CreateNodes(int newnumberofvertices,int* my_vertices,int nodecounter,int analysis_enum,Nodes* nodes){/*{{{*/
     3262void FemModel::CreateNodes(int newnumberofvertices,int* my_vertices,int analysis_enum,Nodes* nodes){/*{{{*/
    32703263
    32713264        int lid=0;
     
    32763269
    32773270                        /*id: */
    3278                         newnode->id=nodecounter+j+1;
     3271                        newnode->id=j+1;
    32793272                        newnode->sid=j;
    32803273                        newnode->lid=lid++;
     
    34753468}
    34763469/*}}}*/
    3477 void FemModel::CreateConstraints(Vertices* newfemmodel_vertices,int nodecounter,int constraintcounter,int analysis_enum,Constraints* newfemmodel_constraints){/*{{{*/
     3470void FemModel::CreateConstraints(Vertices* newfemmodel_vertices,int analysis_enum,Constraints* newfemmodel_constraints){/*{{{*/
    34783471
    34793472        /*ATTENTION: JUST SPCVX AND SPCVY*/
     
    35513544                /*spcvx*/
    35523545                if(!xIsNan<IssmDouble>(newspc[i*numberofcols]) && newspc[i*numberofcols+dofpernode]>(1-eps)){
    3553                         newfemmodel_constraints->AddObject(new SpcStatic(constraintcounter+count+1,nodecounter+vertex->Sid()+1,0,newspc[i*numberofcols],analysis_enum));
     3546                        newfemmodel_constraints->AddObject(new SpcStatic(count+1,vertex->Sid()+1,0,newspc[i*numberofcols],analysis_enum));
    35543547                        //add count'th spc, on node i+1, setting dof 1 to vx.
    35553548                        count++;
     
    35613554                /*spcvy*/
    35623555                if(!xIsNan<IssmDouble>(newspc[i*numberofcols+1]) && newspc[i*numberofcols+dofpernode+1]>(1-eps) ){
    3563                         newfemmodel_constraints->AddObject(new SpcStatic(constraintcounter+count+1,nodecounter+vertex->Sid()+1,1,newspc[i*numberofcols+1],analysis_enum));
     3556                        newfemmodel_constraints->AddObject(new SpcStatic(count+1,vertex->Sid()+1,1,newspc[i*numberofcols+1],analysis_enum));
    35643557                        //add count'th spc, on node i+1, setting dof 1 to vx.
    35653558                        count++;
     
    35753568}
    35763569/*}}}*/
    3577 void FemModel::UpdateElements(int newnumberofelements,int* newelementslist,bool* my_elements,int nodecounter,int analysis_counter,Elements* newelements){/*{{{*/
     3570void FemModel::UpdateElements(int newnumberofelements,int* newelementslist,bool* my_elements,int analysis_counter,Elements* newelements){/*{{{*/
    35783571
    35793572        /*newelementslist is in Matlab indexing*/
     
    35893582                        int numnodes=3;
    35903583         int* tria_node_ids=xNew<int>(numnodes);
    3591          tria_node_ids[0]=nodecounter+newelementslist[3*iel+0]; //matlab indexing
    3592          tria_node_ids[1]=nodecounter+newelementslist[3*iel+1]; //matlab indexing
    3593          tria_node_ids[2]=nodecounter+newelementslist[3*iel+2]; //matlab indexing
     3584         tria_node_ids[0]=newelementslist[3*iel+0]; //matlab indexing
     3585         tria_node_ids[1]=newelementslist[3*iel+1]; //matlab indexing
     3586         tria_node_ids[2]=newelementslist[3*iel+2]; //matlab indexing
    35943587                        tria->SetHookNodes(tria_node_ids,numnodes,analysis_counter); tria->nodes=NULL;
    35953588                xDelete<int>(tria_node_ids);
  • TabularUnified issm/trunk-jpl/src/c/classes/FemModel.h

    r23501 r23532  
    182182                void CreateElements(int newnumberofelements,int elementswidth,int* newelementslist,bool* my_elements,Elements* elements);
    183183                void CreateMaterials(int newnumberofelements,bool* my_elements,Materials* materials);
    184                 void CreateNodes(int newnumberofvertices,int* my_vertices,int nodecounter,int analysis_enum,Nodes* nodes);
    185                 void CreateConstraints(Vertices* newfemmodel_vertices,int nodecounter,int constraintcounter,int analysis_enum,Constraints* newfemmodel_constraints);
     184                void CreateNodes(int newnumberofvertices,int* my_vertices,int analysis_enum,Nodes* nodes);
     185                void CreateConstraints(Vertices* newfemmodel_vertices,int analysis_enum,Constraints* newfemmodel_constraints);
    186186                void GetInputs(int* pnumP0inputs,IssmDouble** pP0inputs,int** pP0input_enums,int** pP0input_interp,int* pnumP1inputs,IssmDouble** pP1inputs,int** pP1input_enums,int** pP1input_interp);
    187187                void InterpolateInputs(Vertices* newfemmodel_vertices,Elements* newfemmodel_elements);
    188                 void UpdateElements(int newnumberofelements,int* newelementslist,bool* my_elements,int nodecounter,int analysis_counter,Elements* newelements);
     188                void UpdateElements(int newnumberofelements,int* newelementslist,bool* my_elements,int analysis_counter,Elements* newelements);
    189189                void ElementsAndVerticesPartitioning(int& newnumberofvertices,int& newnumberofelements,int& elementswidth,int* newelementslist,bool** pmy_elements,int** pmy_vertices);
    190190                void WriteMeshInResults(void);
  • TabularUnified issm/trunk-jpl/src/c/classes/IoModel.cpp

    r23513 r23532  
    155155        this->singlenodetoelementconnectivity=NULL;
    156156        this->numbernodetoelementconnectivity=NULL;
    157 
    158         this->nodecounter=0;
    159         this->loadcounter=0;
    160         this->constraintcounter=0;
    161 }
    162 /*}}}*/
     157}/*}}}*/
    163158IoModel::IoModel(FILE* iomodel_handle,int solution_enum_in,bool trace,IssmPDouble* X){/*{{{*/
    164159
     
    219214        this->singlenodetoelementconnectivity = NULL;
    220215        this->numbernodetoelementconnectivity = NULL;
    221 
    222         this->nodecounter=0;
    223         this->loadcounter=0;
    224         this->constraintcounter=0;
    225 }
    226 /*}}}*/
     216}/*}}}*/
    227217IoModel::~IoModel(){/*{{{*/
    228218
  • TabularUnified issm/trunk-jpl/src/c/classes/IoModel.h

    r23513 r23532  
    8686                int *singlenodetoelementconnectivity;
    8787
    88                 /*Data to synchronize through low level object drivers: */
    89                 int constraintcounter;   //keep track of how many constraints are being created in each analysis
    90                 int loadcounter;         //keep track of how many loads are being created in each analysis
    91                 int nodecounter;         //keep track of how many nodes are being created in each analysis
    92                 int matparcounter;       //keep track of where we end up putting this object accessed by every element.
    93 
    9488                /*Methods*/
    9589                ~IoModel();
  • TabularUnified issm/trunk-jpl/src/c/classes/Loads/Moulin.cpp

    r23066 r23532  
    4646
    4747        /*hooks: */
    48         pengrid_node_id=iomodel->nodecounter+index+1;
     48        pengrid_node_id=index+1;
    4949        pengrid_element_id=iomodel->singlenodetoelementconnectivity[index];
    5050        _assert_(pengrid_element_id);
  • TabularUnified issm/trunk-jpl/src/c/classes/Loads/Neumannflux.cpp

    r23066 r23532  
    4444
    4545        /*2: Get the ids of the nodes*/
    46         neumannflux_node_ids[0]=iomodel->nodecounter+neumannflux_vertex_ids[0];
    47         neumannflux_node_ids[1]=iomodel->nodecounter+neumannflux_vertex_ids[1];
     46        neumannflux_node_ids[0]=neumannflux_vertex_ids[0];
     47        neumannflux_node_ids[1]=neumannflux_vertex_ids[1];
    4848
    4949        /*Get element id*/
  • TabularUnified issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp

    r20827 r23532  
    8585                /*3: We have the id of the elements and the position of the vertices in the index
    8686                 * we can compute their dofs!*/
    87                 numericalflux_node_ids[0]=iomodel->nodecounter+3*(e1-1)+pos1;
    88                 numericalflux_node_ids[1]=iomodel->nodecounter+3*(e1-1)+pos2;
    89                 numericalflux_node_ids[2]=iomodel->nodecounter+3*(e2-1)+pos3;
    90                 numericalflux_node_ids[3]=iomodel->nodecounter+3*(e2-1)+pos4;
     87                numericalflux_node_ids[0]=3*(e1-1)+pos1;
     88                numericalflux_node_ids[1]=3*(e1-1)+pos2;
     89                numericalflux_node_ids[2]=3*(e2-1)+pos3;
     90                numericalflux_node_ids[3]=3*(e2-1)+pos4;
    9191        }
    9292        else{
     
    102102                /*3: We have the id of the elements and the position of the vertices in the index
    103103                 * we can compute their dofs!*/
    104                 numericalflux_node_ids[0]=iomodel->nodecounter+3*(e1-1)+pos1;
    105                 numericalflux_node_ids[1]=iomodel->nodecounter+3*(e1-1)+pos2;
     104                numericalflux_node_ids[0]=3*(e1-1)+pos1;
     105                numericalflux_node_ids[1]=3*(e1-1)+pos2;
    106106        }
    107107
  • TabularUnified issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp

    r23524 r23532  
    5151
    5252        /*hooks: */
    53         pengrid_node_id=iomodel->nodecounter+index+1;
     53        pengrid_node_id=index+1;
    5454        pengrid_element_id=iomodel->singlenodetoelementconnectivity[index];
    5555        _assert_(pengrid_element_id);
  • TabularUnified issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp

    r21049 r23532  
    6060
    6161        /*hooks: */
    62         riftfront_node_ids[0]=iomodel->nodecounter+node1;
    63         riftfront_node_ids[1]=iomodel->nodecounter+node2;
     62        riftfront_node_ids[0]=node1;
     63        riftfront_node_ids[1]=node2;
    6464        riftfront_elem_ids[0]=el1;
    6565        riftfront_elem_ids[1]=el2;
  • TabularUnified issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp

    r23524 r23532  
    7171        iomodel->FindConstant(&materials_type,"md.materials.type");
    7272
    73         this->mid = iomodel->matparcounter;
     73        this->mid = iomodel->numberofelements+1;
    7474
    7575        switch(materials_type){
  • TabularUnified issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp

    r23184 r23532  
    5454
    5555        /*intermediary: */
    56         int         i,j,count,elementnbv,numfacevertices;
     56        int         i,j,elementnbv,numfacevertices;
    5757        IssmDouble  value;
    58         IssmDouble *times            = NULL;
    59         IssmDouble *values           = NULL;
    60         bool        spcpresent       = false;
     58        IssmDouble *times      = NULL;
     59        IssmDouble *values     = NULL;
     60        bool        spcpresent = false;
    6161
    6262        /*Higher-order finite elements*/
     
    113113        }
    114114
    115         count=0;
     115        int count=0;
    116116        if(M==iomodel->numberofvertices){
    117117                switch(finite_element){
     
    120120                                        if((iomodel->my_vertices[i])){
    121121                                                if (!xIsNan<IssmDouble>(spcdata[i])){
    122                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
     122                                                        constraints->AddObject(new SpcStatic(count+1,i+1,dof,spcdata[i],analysis_type));
    123123                                                        count++;
    124124                                                }
     
    130130                                        if((iomodel->my_vertices[i])){
    131131                                                if (!xIsNan<IssmDouble>(spcdata[i])){
    132                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
     132                                                        constraints->AddObject(new SpcStatic(count+1,i+1,dof,spcdata[i],analysis_type));
    133133                                                        count++;
    134134                                                }
     
    140140                                                v2 = iomodel->edges[3*i+1]-1;
    141141                                                if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
    142                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
     142                                                        constraints->AddObject(new SpcStatic(count+1,iomodel->numberofvertices+i+1,
    143143                                                                                        dof,(spcdata[v1]+spcdata[v2])/2.,analysis_type));
    144144                                                        count++;
     
    157157                                                                value = value/reCast<IssmDouble>(numfacevertices);
    158158                                                                if(!xIsNan<IssmDouble>(value)){
    159                                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,
    160                                                                                                         iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,
     159                                                                        constraints->AddObject(new SpcStatic(count+1,
     160                                                                                                        iomodel->numberofvertices+iomodel->numberofedges+i+1,
    161161                                                                                                        dof,value,analysis_type));
    162162                                                                        count++;
     
    171171                                        if((iomodel->my_vertices[i])){
    172172                                                if (!xIsNan<IssmDouble>(spcdata[i])){
    173                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
     173                                                        constraints->AddObject(new SpcStatic(count+1,i+1,dof,spcdata[i],analysis_type));
    174174                                                        count++;
    175175                                                }
     
    181181                                                v2 = iomodel->edges[3*i+1]-1;
    182182                                                if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
    183                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
     183                                                        constraints->AddObject(new SpcStatic(count+1,iomodel->numberofvertices+i+1,
    184184                                                                                        dof,(spcdata[v1]+spcdata[v2])/2.,analysis_type));
    185185                                                        count++;
     
    198198                                                                value = value/reCast<IssmDouble>(numfacevertices);
    199199                                                                if(!xIsNan<IssmDouble>(value)){
    200                                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,
    201                                                                                                         iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,
     200                                                                        constraints->AddObject(new SpcStatic(count+1,
     201                                                                                                        iomodel->numberofvertices+iomodel->numberofedges+i+1,
    202202                                                                                                        dof,value,analysis_type));
    203203                                                                        count++;
     
    213213                                                value = value/reCast<IssmDouble,int>(elementnbv+0);
    214214                                                if(!xIsNan<IssmDouble>(value)){
    215                                                         int nodeid = iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1;
     215                                                        int nodeid = iomodel->numberofvertices+iomodel->numberofedges+i+1;
    216216                                                        if(iomodel->meshelementtype==PentaEnum){
    217217                                                                nodeid += iomodel->numberoffaces;
    218218                                                        }
    219                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,nodeid,dof,value,analysis_type));
     219                                                        constraints->AddObject(new SpcStatic(count+1,nodeid,dof,value,analysis_type));
    220220                                                        count++;
    221221                                                }
     
    227227                                        if((iomodel->my_vertices[i])){
    228228                                                if (!xIsNan<IssmDouble>(spcdata[i])){
    229                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
     229                                                        constraints->AddObject(new SpcStatic(count+1,i+1,dof,spcdata[i],analysis_type));
    230230                                                        count++;
    231231                                                }
     
    238238                                                        v2 = iomodel->edges[3*i+1]-1;
    239239                                                        if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
    240                                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+3*i+1,
     240                                                                constraints->AddObject(new SpcStatic(count+1,iomodel->numberofvertices+3*i+1,
    241241                                                                                                dof,1./2.*spcdata[v1]+1./2.*spcdata[v2],analysis_type));
    242                                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+2,iomodel->nodecounter+iomodel->numberofvertices+3*i+2,
     242                                                                constraints->AddObject(new SpcStatic(count+2,iomodel->numberofvertices+3*i+2,
    243243                                                                                                dof,1./2.*spcdata[v1]+1./2.*spcdata[v2],analysis_type));
    244                                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+3,iomodel->nodecounter+iomodel->numberofvertices+3*i+3,
     244                                                                constraints->AddObject(new SpcStatic(count+3,iomodel->numberofvertices+3*i+3,
    245245                                                                                                dof,1./2.*spcdata[v1]+1./2.*spcdata[v2],analysis_type));
    246246                                                                count=count+3;
     
    253253                                                        v2 = iomodel->edges[3*i+1]-1;
    254254                                                        if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
    255                                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+3*i+1,
     255                                                                constraints->AddObject(new SpcStatic(count+1,iomodel->numberofvertices+3*i+1,
    256256                                                                                                dof,1./2.*spcdata[v1]+1./2.*spcdata[v2],analysis_type));
    257257                                                                count=count+1;
     
    270270                                                        value = value/reCast<IssmDouble>(numfacevertices);
    271271                                                        if(!xIsNan<IssmDouble>(value)){
    272                                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,
    273                                                                                                 iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*i+1,
     272                                                                constraints->AddObject(new SpcStatic(count+1,
     273                                                                                                iomodel->numberofvertices+3*iomodel->numberofedges+3*i+1,
    274274                                                                                                dof,value,analysis_type));
    275                                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+2,
    276                                                                                                 iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*i+2,
     275                                                                constraints->AddObject(new SpcStatic(count+2,
     276                                                                                                iomodel->numberofvertices+3*iomodel->numberofedges+3*i+2,
    277277                                                                                                dof,value,analysis_type));
    278                                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+3,
    279                                                                                                 iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*i+3,
     278                                                                constraints->AddObject(new SpcStatic(count+3,
     279                                                                                                iomodel->numberofvertices+3*iomodel->numberofedges+3*i+3,
    280280                                                                                                dof,value,analysis_type));
    281281                                                                count=count+3;
     
    289289                                        if((iomodel->my_vertices[i])){
    290290                                                if (!xIsNan<IssmDouble>(spcdata[i])){
    291                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
     291                                                        constraints->AddObject(new SpcStatic(count+1,i+1,dof,spcdata[i],analysis_type));
    292292                                                        count++;
    293293                                                }
     
    300300                                                value = value/reCast<IssmDouble,int>(elementnbv+0);
    301301                                                if(!xIsNan<IssmDouble>(value)){
    302                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
     302                                                        constraints->AddObject(new SpcStatic(count+1,iomodel->numberofvertices+i+1,
    303303                                                                                        dof,value,analysis_type));
    304304                                                        count++;
     
    311311                                        if((iomodel->my_vertices[i])){
    312312                                                if (!xIsNan<IssmDouble>(spcdata[i])){
    313                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
     313                                                        constraints->AddObject(new SpcStatic(count+1,i+1,dof,spcdata[i],analysis_type));
    314314                                                        count++;
    315315                                                }
     
    321321                                        if((iomodel->my_vertices[i])){
    322322                                                if (!xIsNan<IssmDouble>(spcdata[i])){
    323                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
     323                                                        constraints->AddObject(new SpcStatic(count+1,i+1,dof,spcdata[i],analysis_type));
    324324                                                        count++;
    325325                                                }
     
    332332                                                        v2 = iomodel->edges[3*i+1]-1;
    333333                                                        if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
    334                                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
     334                                                                constraints->AddObject(new SpcStatic(count+1,iomodel->numberofvertices+i+1,
    335335                                                                                                dof,(spcdata[v1]+spcdata[v2])/2.,analysis_type));
    336336                                                                count++;
     
    344344                                        if((iomodel->my_vertices[i])){
    345345                                                if (!xIsNan<IssmDouble>(spcdata[i])){
    346                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
     346                                                        constraints->AddObject(new SpcStatic(count+1,i+1,dof,spcdata[i],analysis_type));
    347347                                                        count++;
    348348                                                }
     
    355355                                                        v2 = iomodel->edges[3*i+1]-1;
    356356                                                        if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
    357                                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+2*i+1,
     357                                                                constraints->AddObject(new SpcStatic(count+1,iomodel->numberofvertices+2*i+1,
    358358                                                                                                dof,2./3.*spcdata[v1]+1./3.*spcdata[v2],analysis_type));
    359                                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+2,iomodel->nodecounter+iomodel->numberofvertices+2*i+2,
     359                                                                constraints->AddObject(new SpcStatic(count+2,iomodel->numberofvertices+2*i+2,
    360360                                                                                                dof,1./3.*spcdata[v1]+2./3.*spcdata[v2],analysis_type));
    361361                                                                count=count+2;
     
    369369                                        if((iomodel->my_vertices[i])){
    370370                                                if (!xIsNan<IssmDouble>(spcdata[i])){
    371                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
     371                                                        constraints->AddObject(new SpcStatic(count+1,i+1,dof,spcdata[i],analysis_type));
    372372                                                        count++;
    373373                                                }
     
    380380                                                        v2 = iomodel->edges[3*i+1]-1;
    381381                                                        if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
    382                                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+3*i+1,
     382                                                                constraints->AddObject(new SpcStatic(count+1,iomodel->numberofvertices+3*i+1,
    383383                                                                                                dof,1./2.*spcdata[v1]+1./2.*spcdata[v2],analysis_type));
    384                                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+2,iomodel->nodecounter+iomodel->numberofvertices+3*i+2,
     384                                                                constraints->AddObject(new SpcStatic(count+2,iomodel->numberofvertices+3*i+2,
    385385                                                                                                dof,1./2.*spcdata[v1]+1./2.*spcdata[v2],analysis_type));
    386                                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+3,iomodel->nodecounter+iomodel->numberofvertices+3*i+3,
     386                                                                constraints->AddObject(new SpcStatic(count+3,iomodel->numberofvertices+3*i+3,
    387387                                                                                                dof,1./2.*spcdata[v1]+1./2.*spcdata[v2],analysis_type));
    388388                                                                count=count+3;
     
    396396                                        if((iomodel->my_vertices[i])){
    397397                                                if (!xIsNan<IssmDouble>(spcdata[i])){
    398                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
     398                                                        constraints->AddObject(new SpcStatic(count+1,i+1,dof,spcdata[i],analysis_type));
    399399                                                        count++;
    400400                                                }
     
    407407                                                        v2 = iomodel->edges[3*i+1]-1;
    408408                                                        if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
    409                                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
     409                                                                constraints->AddObject(new SpcStatic(count+1,iomodel->numberofvertices+i+1,
    410410                                                                                                dof,(spcdata[v1]+spcdata[v2])/2.,analysis_type));
    411411                                                                count++;
     
    441441
    442442                                                if(spcpresent){
    443                                                         constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,N,times,values,analysis_type));
     443                                                        constraints->AddObject(new SpcTransient(count+1,i+1,dof,N,times,values,analysis_type));
    444444                                                        count++;
    445445                                                }
     
    462462
    463463                                                if(spcpresent){
    464                                                         constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,N,times,values,analysis_type));
     464                                                        constraints->AddObject(new SpcTransient(count+1,i+1,dof,N,times,values,analysis_type));
    465465                                                        count++;
    466466                                                }
     
    479479                                                }
    480480                                                if(spcpresent){
    481                                                         constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,dof,
    482                                                                                         N,times,values,analysis_type));
     481                                                        constraints->AddObject(new SpcTransient(count+1,iomodel->numberofvertices+i+1,dof,N,times,values,analysis_type));
    483482                                                        count++;
    484483                                                }
     
    500499
    501500                                                if(spcpresent){
    502                                                         constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,N,times,values,analysis_type));
     501                                                        constraints->AddObject(new SpcTransient(count+1,i+1,dof,N,times,values,analysis_type));
    503502                                                        count++;
    504503                                                }
     
    518517                                                        }
    519518                                                        if(spcpresent){
    520                                                                 constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,dof,
    521                                                                                                 N,times,values,analysis_type));
     519                                                                constraints->AddObject(new SpcTransient(count+1,iomodel->numberofvertices+i+1,dof,N,times,values,analysis_type));
    522520                                                                count++;
    523521                                                        }
     
    540538
    541539                                                if(spcpresent){
    542                                                         constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,N,times,values,analysis_type));
     540                                                        constraints->AddObject(new SpcTransient(count+1,i+1,dof,N,times,values,analysis_type));
    543541                                                        count++;
    544542                                                }
     
    558556                                                        }
    559557                                                        if(spcpresent){
    560                                                                 constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+2*i+1,dof,
    561                                                                                                 N,times,values,analysis_type));
     558                                                                constraints->AddObject(new SpcTransient(count+1,iomodel->numberofvertices+2*i+1,dof,N,times,values,analysis_type));
    562559                                                                count++;
    563560                                                        }
     
    568565                                                        }
    569566                                                        if(spcpresent){
    570                                                                 constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+2*i+2,dof,
    571                                                                                                 N,times,values,analysis_type));
     567                                                                constraints->AddObject(new SpcTransient(count+1,iomodel->numberofvertices+2*i+2,dof,N,times,values,analysis_type));
    572568                                                                count++;
    573569                                                        }
     
    590586
    591587                                                if(spcpresent){
    592                                                         constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,N,times,values,analysis_type));
     588                                                        constraints->AddObject(new SpcTransient(count+1,i+1,dof,N,times,values,analysis_type));
    593589                                                        count++;
    594590                                                }
     
    608604                                                        }
    609605                                                        if(spcpresent){
    610                                                                 constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,dof,
    611                                                                                                 N,times,values,analysis_type));
     606                                                                constraints->AddObject(new SpcTransient(count+1,iomodel->numberofvertices+i+1,dof,N,times,values,analysis_type));
    612607                                                                count++;
    613608                                                        }
     
    625620        }
    626621
    627         /*Update counter now since we have added some constraints*/
    628         iomodel->constraintcounter = constraints->NumberOfConstraints();
    629 
    630622        /*Free ressources:*/
    631623        xDelete<IssmDouble>(times);
     
    636628
    637629        /*intermediary: */
    638         int         i,j,count,elementnbv,numfacevertices;
     630        int         i,j,elementnbv,numfacevertices;
    639631        IssmDouble  value;
    640632        IssmDouble *times            = NULL;
     
    698690        }
    699691
    700         count=0;
     692        int count=0;
    701693        if(M==iomodel->numberofvertices){
    702694                switch(finite_element){
     
    705697                                        if((iomodel->my_vertices[i])){
    706698                                                if (!xIsNan<IssmDouble>(spcdata[i])){
    707                                                         constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,analysis_type));
     699                                                        constraints->AddObject(new SpcDynamic(count+1,i+1,dof,analysis_type));
    708700                                                        count++;
    709701                                                }
     
    715707                                        if((iomodel->my_vertices[i])){
    716708                                                if (!xIsNan<IssmDouble>(spcdata[i])){
    717                                                         constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,analysis_type));
     709                                                        constraints->AddObject(new SpcDynamic(count+1,i+1,dof,analysis_type));
    718710                                                        count++;
    719711                                                }
     
    726718                                                        v2 = iomodel->edges[3*i+1]-1;
    727719                                                        if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
    728                                                                 constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
     720                                                                constraints->AddObject(new SpcDynamic(count+1,iomodel->numberofvertices+i+1,
    729721                                                                                                dof,analysis_type));
    730722                                                                count++;
     
    738730                                        if((iomodel->my_vertices[i])){
    739731                                                if (!xIsNan<IssmDouble>(spcdata[i])){
    740                                                         constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,analysis_type));
     732                                                        constraints->AddObject(new SpcDynamic(count+1,i+1,dof,analysis_type));
    741733                                                        count++;
    742734                                                }
     
    749741                                                        v2 = iomodel->edges[3*i+1]-1;
    750742                                                        if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
    751                                                                 constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+2*i+1,
    752                                                                                                 dof,analysis_type));
    753                                                                 constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+2,iomodel->nodecounter+iomodel->numberofvertices+2*i+2,
    754                                                                                                 dof,analysis_type));
     743                                                                constraints->AddObject(new SpcDynamic(count+1,iomodel->numberofvertices+2*i+1,dof,analysis_type));
     744                                                                constraints->AddObject(new SpcDynamic(count+2,iomodel->numberofvertices+2*i+2,dof,analysis_type));
    755745                                                                count=count+2;
    756746                                                        }
     
    767757        }
    768758
    769         /*Update counter now since we have added some constraints*/
    770         iomodel->constraintcounter = constraints->NumberOfConstraints();
    771 
    772759        /*Free ressources:*/
    773760        xDelete<IssmDouble>(times);
  • TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp

    r23522 r23532  
    2020        /*Did we already create the elements? : */
    2121        _assert_(elements->Size()==0);
    22 
    23         /*Setup matpar counter in iomodel before we call on element constructors: */
    24         iomodel->matparcounter=iomodel->numberofelements+1;
    2522
    2623        /*Create elements*/
  • TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp

    r23505 r23532  
    1414        int   i,j,counter,vnodes,lid=0;
    1515        int   numberoffaces,elementnbv;
    16         int   id0 = iomodel->nodecounter;
    1716        bool *my_nodes = NULL;
    1817        Node *node     = NULL;
    1918
     19        int id0 = 0;
    2020        switch(finite_element){
    2121                case P1Enum:
     
    215215                        for(i=0;i<iomodel->numberofelements;i++){
    216216                                if(iomodel->my_elements[i]){
    217                                         nodes->AddObject(new Node(id0+i+1,id0-iomodel->nodecounter+i,lid++,0,iomodel,analysis,approximation));
     217                                        nodes->AddObject(new Node(id0+i+1,id0-i,lid++,0,iomodel,analysis,approximation));
    218218                                }
    219219                        }
     
    532532                        for(i=0;i<iomodel->numberofelements;i++){
    533533                                if(iomodel->my_elements[i]){
    534                                         nodes->AddObject(new Node(id0+i+1,id0-iomodel->nodecounter+i,lid++,0,iomodel,analysis,FSvelocityEnum));
     534                                        nodes->AddObject(new Node(id0+i+1,id0-i,lid++,0,iomodel,analysis,FSvelocityEnum));
    535535                                }
    536536                        }
     
    547547                                if(iomodel->my_elements[i]){
    548548                                        for(j=0;j<elementnbv;j++){
    549                                                 nodes->AddObject(new Node(vnodes+elementnbv*i+j+1,vnodes-iomodel->nodecounter+elementnbv*i+j,lid++,iomodel->elements[+elementnbv*i+j]-1,iomodel,analysis,FSpressureEnum));
     549                                                nodes->AddObject(new Node(vnodes+elementnbv*i+j+1,vnodes-elementnbv*i+j,lid++,iomodel->elements[+elementnbv*i+j]-1,iomodel,analysis,FSpressureEnum));
    550550
    551551                                        }
     
    588588                        for(i=0;i<iomodel->numberofelements;i++){
    589589                                if(iomodel->my_elements[i]){
    590                                         nodes->AddObject(new Node(id0+i+1,id0-iomodel->nodecounter+i,lid++,0,iomodel,analysis,FSvelocityEnum));
     590                                        nodes->AddObject(new Node(id0+i+1,id0-i,lid++,0,iomodel,analysis,FSvelocityEnum));
    591591                                }
    592592                        }
  • TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp

    r23514 r23532  
    6262                delete analysis;
    6363
    64                 /* Update counters, because we have created more nodes, loads and
    65                  * constraints, and ids for objects created in next call to CreateDataSets
    66                  * will need to start at the end of the updated counters: */
    67                 if(nodes[i]->Size()) iomodel->nodecounter = nodes[i]->MaximumId();
    68                 iomodel->loadcounter       = loads[i]->NumberOfLoads();
    69                 iomodel->constraintcounter = constraints[i]->NumberOfConstraints();
    70 
    71                 /*Make sure nodecounter is at least 0 (if no node exists, maxid will be -1*/
    72                 _assert_(iomodel->nodecounter>=0);
    73 
    7464                /*Tell datasets that Ids are already sorted*/
    7565                constraints[i]->Presort();
  • TabularUnified issm/trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h

    r23294 r23532  
    150150                void Assemble(){/*{{{*/
    151151
    152                         int           i,j;
    153 
    154                         int         *RowRank            = NULL;
    155                         int           num_procs;
    156 
    157                         int        *row_indices_forcpu = NULL;
    158                         int        *col_indices_forcpu = NULL;
    159                         int        *modes_forcpu       = NULL;
    160                         doubletype *values_forcpu      = NULL;
    161                         int         *numvalues_forcpu   = NULL;
    162                         DataSet     **bucketsforcpu       = NULL;
    163 
     152                        int         *RowRank = NULL;
     153                        int         *row_indices_forcpu  = NULL;
     154                        int         *col_indices_forcpu  = NULL;
     155                        int         *modes_forcpu        = NULL;
     156                        doubletype  *values_forcpu       = NULL;
     157                        int         *numvalues_forcpu    = NULL;
     158                        DataSet    **bucketsforcpu       = NULL;
    164159                        int        **row_indices_fromcpu = NULL;
    165160                        int        **col_indices_fromcpu = NULL;
     
    167162                        doubletype **values_fromcpu      = NULL;
    168163                        int         *numvalues_fromcpu   = NULL;
    169 
    170                         int           lower_row;
    171                         int           upper_row;
    172                         int*          sendcnts            = NULL;
    173                         int*          displs              = NULL;
    174                         int           count               = 0;
    175 
    176                         int           this_row_numvalues;
    177                         int*          this_row_cols       = NULL;
    178                         int*          this_row_mods       = NULL;
    179                         int*          numvalues_perrow    = NULL;
    180                         int           row;
    181                        
    182                         doubletype**  values_perrow       = NULL;
    183                         int**         cols_perrow         = NULL;
    184                         int**         mods_perrow         = NULL;
    185                         int*          counters_perrow     = NULL;
    186                         int           counter;
     164                        int          lower_row;
     165                        int          upper_row;
     166                        int         *sendcnts = NULL;
     167                        int         *displs   = NULL;
     168                        int          this_row_numvalues;
     169                        int         *this_row_cols       = NULL;
     170                        int         *this_row_mods       = NULL;
     171                        int         *numvalues_perrow    = NULL;
     172
     173                        doubletype **values_perrow       = NULL;
     174                        int        **cols_perrow         = NULL;
     175                        int        **mods_perrow         = NULL;
     176                        int         *counters_perrow     = NULL;
    187177
    188178                        /*Early exit: */
    189                         if(this->M*this->N==0)return; //no need to assemble.
     179                        if(this->M*this->N==0) return;
    190180
    191181                        /*some communicator info: */
    192                         num_procs=IssmComm::GetSize();
     182                        int num_procs=IssmComm::GetSize();
    193183                        ISSM_MPI_Comm comm=IssmComm::GetComm();
    194184
     
    196186                        RowRank=DetermineRowRankFromLocalSize(M,m,comm);
    197187
    198                         /*Now, sort out our dataset of buckets according to cpu ownership of rows: {{{*/
     188                        /*Now, sort out our dataset of buckets according to cpu ownership of rows*/
    199189                        bucketsforcpu=xNew<DataSet*>(num_procs);
    200 
    201                         for(i=0;i<num_procs;i++){
     190                        for(int i=0;i<num_procs;i++){
    202191                                DataSet* bucketsofcpu_i=new DataSet();
    203                                 for (j=0;j<buckets->Size();j++){
     192                                for(int j=0;j<buckets->Size();j++){
    204193                                        Bucket<doubletype>* bucket=(Bucket<doubletype>*)buckets->GetObjectByOffset(j);
    205194                                        bucket->SpawnBucketsPerCpu(bucketsofcpu_i,i,RowRank);
     
    207196                                bucketsforcpu[i]=bucketsofcpu_i;
    208197                        }
    209                         /*}}}*/
    210 
    211                         /*Recap, each cpu has num_procs datasets of buckets. For a certain cpu j, for a given dataset i, the buckets this  {{{
     198
     199                        /*Recap, each cpu has num_procs datasets of buckets. For a certain cpu j, for a given dataset i, the buckets this
    212200                         * dataset owns correspond to rows that are owned by cpu i, not j!. Out of all the buckets we own, make row,col,value,insert_mode
    213201                         * vectors that will be shipped around the cluster: */
    214202                        this->BucketsBuildScatterBuffers(&numvalues_forcpu,&row_indices_forcpu,&col_indices_forcpu,&values_forcpu,&modes_forcpu,bucketsforcpu,num_procs);
    215                         /*}}}*/
    216 
    217                         /*Now, we need to allocate on each cpu arrays to receive data from all the other cpus. To know what we need to allocate, we need  {{{
     203
     204                        /*Now, we need to allocate on each cpu arrays to receive data from all the other cpus. To know what we need to allocate, we need
    218205                         *some scatter calls: */
    219206                        numvalues_fromcpu   = xNew<int>(num_procs);
    220                         for(i=0;i<num_procs;i++){
    221                                 ISSM_MPI_Scatter(numvalues_forcpu,1,ISSM_MPI_INT,numvalues_fromcpu+i,1,ISSM_MPI_INT,i,comm);
    222                         }
     207                        for(int i=0;i<num_procs;i++) ISSM_MPI_Scatter(numvalues_forcpu,1,ISSM_MPI_INT,numvalues_fromcpu+i,1,ISSM_MPI_INT,i,comm);
    223208
    224209                        row_indices_fromcpu=xNew<int*>(num_procs);
     
    226211                        values_fromcpu=xNew<doubletype*>(num_procs);
    227212                        modes_fromcpu=xNew<int*>(num_procs);
    228                         for(i=0;i<num_procs;i++){
     213                        for(int i=0;i<num_procs;i++){
    229214                                int size=numvalues_fromcpu[i];
    230215                                if(size){
     
    238223                                        values_fromcpu[i]=xNew<doubletype>(size);
    239224#endif
    240 
    241225                                        modes_fromcpu[i]=xNew<int>(size);
    242226                                }
    243227                                else{
    244                                         row_indices_fromcpu[i]=NULL;
    245                                         col_indices_fromcpu[i]=NULL;
    246                                         values_fromcpu[i]=NULL;
    247                                         modes_fromcpu[i]=NULL;
    248                                 }
    249                         }
    250                         /*}}}*/
    251 
    252                         /*Scatter values around: {{{*/
     228                                        row_indices_fromcpu[i] = NULL;
     229                                        col_indices_fromcpu[i] = NULL;
     230                                        values_fromcpu[i]      = NULL;
     231                                        modes_fromcpu[i]       = NULL;
     232                                }
     233                        }
     234
     235                        /*Scatter values around*/
    253236                        /*Now, to scatter values across the cluster, we need sendcnts and displs. Our sendbufs have been built by BucketsBuildScatterBuffers, with a stride given
    254237                         * by numvalues_forcpu. Get this ready to go before starting the scatter itslef. For reference, here is the ISSM_MPI_Scatterv prototype:
     
    256239                        sendcnts=xNew<int>(num_procs);
    257240                        displs=xNew<int>(num_procs);
    258                         count=0;
    259                         for(i=0;i<num_procs;i++){
     241                        int count=0;
     242                        for(int i=0;i<num_procs;i++){
    260243                                sendcnts[i]=numvalues_forcpu[i];
    261244                                displs[i]=count;
     
    263246                        }
    264247
    265                         for(i=0;i<num_procs;i++){
     248                        for(int i=0;i<num_procs;i++){
    266249                                ISSM_MPI_Scatterv( row_indices_forcpu, sendcnts, displs, ISSM_MPI_INT, row_indices_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
    267250                                ISSM_MPI_Scatterv( col_indices_forcpu, sendcnts, displs, ISSM_MPI_INT, col_indices_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
     
    269252                                ISSM_MPI_Scatterv( modes_forcpu, sendcnts, displs, ISSM_MPI_INT, modes_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
    270253                        }
    271                         /*}}}*/
    272 
    273                         /*Plug values into global matrix. To do so, we are going to first figure out how many overall values each sparse row is going to get, then we fill up these values, and give it to each sparse row: {{{*/
     254
     255                        /*Plug values into global matrix. To do so, we are going to first figure out how many overall values each sparse row is going to get, then we fill up these values, and give it to each sparse row*/
    274256                        GetOwnershipBoundariesFromRange(&lower_row,&upper_row,m,comm);
    275257
    276258                        /*Figure out how many values each row is going to get: */
    277259                        numvalues_perrow=xNewZeroInit<int>(this->m);
    278                         for(i=0;i<num_procs;i++){
     260                        for(int i=0;i<num_procs;i++){
    279261                                int  numvalues=numvalues_fromcpu[i];
    280262                                int* rows=row_indices_fromcpu[i];
    281                                 for(j=0;j<numvalues;j++)numvalues_perrow[rows[j]-lower_row]++;
     263                                for(int j=0;j<numvalues;j++)numvalues_perrow[rows[j]-lower_row]++;
    282264                        }
    283265
     
    288270                        counters_perrow=xNewZeroInit<int>(this->m);
    289271
    290                         for(i=0;i<this->m;i++){
     272                        for(int i=0;i<this->m;i++){
    291273                                values_perrow[i]=xNewZeroInit<doubletype>(numvalues_perrow[i]);
    292274                                cols_perrow[i]=xNewZeroInit<int>(numvalues_perrow[i]);
     
    295277
    296278                        /*collect:*/
    297                         for(i=0;i<num_procs;i++){
     279                        for(int i=0;i<num_procs;i++){
    298280                                int  numvalues=numvalues_fromcpu[i];
    299281                                int* rows=row_indices_fromcpu[i];
     
    301283                                doubletype* values=values_fromcpu[i];
    302284                                int* mods=modes_fromcpu[i];
    303 
    304                                 for(j=0;j<numvalues;j++){
    305                                         row=rows[j]-lower_row;
    306                                         counter=counters_perrow[row];
     285                                for(int j=0;j<numvalues;j++){
     286                                        int row=rows[j]-lower_row;
     287                                        int counter=counters_perrow[row];
    307288                                        values_perrow[row][counter]=values[j];
    308289                                        cols_perrow[row][counter]=cols[j];
     
    313294                                       
    314295                        /*Plug into matrix: */
    315                         for(i=0;i<this->m;i++){
    316                                 this->matrix[i]->SetValues(numvalues_perrow[i],cols_perrow[i],values_perrow[i],mods_perrow[i]);
    317                         }
    318                         /*}}}*/
    319 
    320                         /*Free ressources:{{{*/
     296                        for(int i=0;i<this->m;i++) this->matrix[i]->SetValues(numvalues_perrow[i],cols_perrow[i],values_perrow[i],mods_perrow[i]);
     297
     298                        /*Free ressources*/
    321299                        xDelete<int>(numvalues_perrow);
    322300                        xDelete<int>(RowRank);
     
    326304                        xDelete<doubletype>(values_forcpu);
    327305                        xDelete<int>(numvalues_forcpu);
    328 
    329                         for(i=0;i<num_procs;i++){
     306                        for(int i=0;i<num_procs;i++){
    330307                                DataSet* buckets=bucketsforcpu[i];
    331308                                delete buckets;
    332309                        }
    333310                        xDelete<DataSet*>(bucketsforcpu);
    334 
    335                         for(i=0;i<num_procs;i++){
     311                        for(int i=0;i<num_procs;i++){
    336312                                int* rows=row_indices_fromcpu[i];
    337313                                int* cols=col_indices_fromcpu[i];
    338314                                int* modes=modes_fromcpu[i];
    339315                                doubletype* values=values_fromcpu[i];
    340 
    341316                                xDelete<int>(rows);
    342317                                xDelete<int>(cols);
     
    349324                        xDelete<doubletype*>(values_fromcpu);
    350325                        xDelete<int>(numvalues_fromcpu);
    351 
    352326                        xDelete<int>(sendcnts);
    353327                        xDelete<int>(displs);
    354                        
    355                         for(i=0;i<this->m;i++){
     328                        for(int i=0;i<this->m;i++){
    356329                                doubletype* values=values_perrow[i]; xDelete<doubletype>(values);
    357330                                int* cols=cols_perrow[i]; xDelete<int>(cols);
     
    362335                        xDelete<int*>(cols_perrow);
    363336                        xDelete<int*>(mods_perrow);
    364                         /*}}}*/
    365 
    366                 }
    367                 /*}}}*/
     337                }/*}}}*/
    368338                doubletype Norm(NormMode mode){/*{{{*/
    369339
     
    458428
    459429                        /*intermediary: */
    460                         int         i,j;
    461                         int         count                   = 0;
    462                         int         total_size              = 0;
     430                        int         count;
    463431                        int        *temp_row_indices_forcpu = NULL;
    464432                        int        *temp_col_indices_forcpu = NULL;
     
    476444
    477445                        numvalues_forcpu=xNew<int>(num_procs);
    478                         for(i=0;i<num_procs;i++){
    479                                 DataSet    *buckets            = bucketsforcpu[i];
    480 
     446                        for(int i=0;i<num_procs;i++){
     447                                DataSet    *buckets = bucketsforcpu[i];
    481448                                count=0;
    482                                 for(j=0;j<buckets->Size();j++){
     449                                for(int j=0;j<buckets->Size();j++){
    483450                                        Bucket<doubletype>* bucket =(Bucket<doubletype>*)buckets->GetObjectByOffset(j);
    484451                                        count+=bucket->MarshallSize();
    485452                                }
    486 
    487453                                numvalues_forcpu[i]=count;
    488454                        }
     
    490456                        /*now, figure out size of  total buffers (for all cpus!): */
    491457                        count=0;
    492                         for(i=0;i<num_procs;i++){
    493                                 count+=numvalues_forcpu[i];
    494                         }
    495                         total_size=count;
     458                        for(int i=0;i<num_procs;i++) count+=numvalues_forcpu[i];
     459                        int total_size=count;
    496460
    497461                        /*Allocate buffers: */
     
    505469                        values_forcpu = xNew<doubletype>(total_size);
    506470#endif
    507 
    508471                        modes_forcpu = xNew<int>(total_size);
    509472
     
    511474                         *lose track of where these buffers are located in memory, we are going to work using copies
    512475                         of them: */
    513                         temp_row_indices_forcpu=row_indices_forcpu;
    514                         temp_col_indices_forcpu=col_indices_forcpu;
    515                         temp_values_forcpu=values_forcpu;
    516                         temp_modes_forcpu=modes_forcpu;
     476                        temp_row_indices_forcpu = row_indices_forcpu;
     477                        temp_col_indices_forcpu = col_indices_forcpu;
     478                        temp_values_forcpu      = values_forcpu;
     479                        temp_modes_forcpu       = modes_forcpu;
    517480
    518481                        /*Fill buffers: */
    519                         for(i=0;i<num_procs;i++){
    520                                 DataSet    *buckets            = bucketsforcpu[i];
    521                                 for(j=0;j<buckets->Size();j++){
     482                        for(int i=0;i<num_procs;i++){
     483                                DataSet *buckets = bucketsforcpu[i];
     484                                for(int j=0;j<buckets->Size();j++){
    522485                                        Bucket<doubletype>* bucket =(Bucket<doubletype>*)buckets->GetObjectByOffset(j);
    523486                                        bucket->Marshall(&temp_row_indices_forcpu,&temp_col_indices_forcpu,&temp_values_forcpu,&temp_modes_forcpu); //pass in the address of the buffers, so as to have the Marshall routine increment them.
     
    526489
    527490                        /*sanity check: */
    528                         if (temp_row_indices_forcpu!=row_indices_forcpu+total_size)_error_("problem with marshalling of buckets");
    529                         if (temp_col_indices_forcpu!=col_indices_forcpu+total_size)_error_("problem with marshalling of buckets");
    530                         if (temp_values_forcpu!=values_forcpu+total_size)_error_("problem with marshalling of buckets");
    531                         if (temp_modes_forcpu!=modes_forcpu+total_size)_error_("problem with marshalling of buckets");
     491                        if(temp_row_indices_forcpu!=row_indices_forcpu+total_size)_error_("problem with marshalling of buckets");
     492                        if(temp_col_indices_forcpu!=col_indices_forcpu+total_size)_error_("problem with marshalling of buckets");
     493                        if(temp_values_forcpu!=values_forcpu+total_size)_error_("problem with marshalling of buckets");
     494                        if(temp_modes_forcpu!=modes_forcpu+total_size)_error_("problem with marshalling of buckets");
    532495
    533496                        /*output buffers: */
Note: See TracChangeset for help on using the changeset viewer.