Changeset 23183


Ignore:
Timestamp:
08/27/18 09:03:24 (7 years ago)
Author:
Mathieu Morlighem
Message:

CHG: fixing NR: no need to add pressure spc if no vertex is NoneApproximation

File:
1 edited

Legend:

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

    r23182 r23183  
    126126                        iomodel->FetchData(&surface,NULL,NULL,"md.geometry.surface");
    127127                        iomodel->FetchData(&z,NULL,NULL,"md.mesh.z");
    128                         switch(pfiniteelement){
    129                                 case P1Enum:
    130                                         for(i=0;i<iomodel->numberofvertices;i++){
    131                                                 if(iomodel->my_vertices[i]){
    132                                                         if(IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum){
    133                                                                 constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
    134                                                                 count++;
     128                        bool addpressurespc = false;
     129                        for(i=0;i<iomodel->numberofvertices;i++){
     130                                if(IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum && iomodel->my_vertices[i]){
     131                                        addpressurespc = true;
     132                                        break;
     133                                }
     134                        }
     135                        if(addpressurespc){
     136                                switch(pfiniteelement){
     137                                        case P1Enum:
     138                                                for(i=0;i<iomodel->numberofvertices;i++){
     139                                                        if(iomodel->my_vertices[i]){
     140                                                                if(IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum){
     141                                                                        constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
     142                                                                        count++;
     143                                                                }
    135144                                                        }
    136145                                                }
    137                                         }
    138                                         break;
    139                                 case P1bubbleEnum:
    140                                         for(i=0;i<iomodel->numberofvertices;i++){
    141                                                 if(iomodel->my_vertices[i]){
    142                                                         if(IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum){
    143                                                                 constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
    144                                                                 count++;
     146                                                break;
     147                                        case P1bubbleEnum:
     148                                                for(i=0;i<iomodel->numberofvertices;i++){
     149                                                        if(iomodel->my_vertices[i]){
     150                                                                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));
     152                                                                        count++;
     153                                                                }
    145154                                                        }
    146155                                                }
    147                                         }
    148                                         break;
    149                                 case P2Enum:
    150                                         for(i=0;i<iomodel->numberofvertices;i++){
    151                                                 if(iomodel->my_vertices[i]){
    152                                                         if(IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum){
    153                                                                 constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
    154                                                                 count++;
     156                                                break;
     157                                        case P2Enum:
     158                                                for(i=0;i<iomodel->numberofvertices;i++){
     159                                                        if(iomodel->my_vertices[i]){
     160                                                                if(IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum){
     161                                                                        constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
     162                                                                        count++;
     163                                                                }
    155164                                                        }
    156165                                                }
    157                                         }
    158                                         break;
    159                                 case P2bubbleEnum:
    160                                         for(i=0;i<iomodel->numberofvertices;i++){
    161                                                 if(iomodel->my_vertices[i]){
    162                                                         if(IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum){
    163                                                                 constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberofelements+iomodel->numberoffaces+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
    164                                                                 count++;
     166                                                break;
     167                                        case P2bubbleEnum:
     168                                                for(i=0;i<iomodel->numberofvertices;i++){
     169                                                        if(iomodel->my_vertices[i]){
     170                                                                if(IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum){
     171                                                                        constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberofelements+iomodel->numberoffaces+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
     172                                                                        count++;
     173                                                                }
    165174                                                        }
    166175                                                }
    167                                         }
    168                                         break;
    169                                 case P2xP4Enum:
    170                                         //Nothing yet
    171                                         break;
    172                                 default:
    173                                         _error_("not implemented yet");
     176                                                break;
     177                                        case P2xP4Enum:
     178                                                //Nothing yet
     179                                                break;
     180                                        default:
     181                                                _error_("not implemented yet");
     182                                }
    174183                        }
    175184                        iomodel->DeleteData(vertices_type,"md.flowequation.vertex_equation");
Note: See TracChangeset for help on using the changeset viewer.