Changeset 23184


Ignore:
Timestamp:
08/27/18 10:12:39 (7 years ago)
Author:
Mathieu Morlighem
Message:

CHG: fixing numbering for pressure constraint

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

Legend:

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

    r23183 r23184  
    1515        /*Intermediary*/
    1616        int        i,j;
    17         int        count,finiteelement,pfiniteelement;
     17        int        count,finiteelement,p_fe,v_fe;
    1818        IssmDouble g;
    1919        IssmDouble rho_ice;
     
    6969                        /*Deduce velocity interpolation from finite element*/
    7070                        switch(finiteelement){
    71                                 case P1P1Enum              : finiteelement = P1Enum;       pfiniteelement = P1Enum;   break;
    72                                 case P1P1GLSEnum           : finiteelement = P1Enum;       pfiniteelement = P1Enum;   break;
    73                                 case MINIcondensedEnum     : finiteelement = P1bubbleEnum; pfiniteelement = P1Enum;   break;
    74                                 case MINIEnum              : finiteelement = P1bubbleEnum; pfiniteelement = P1Enum;   break;
    75                                 case TaylorHoodEnum        : finiteelement = P2Enum;       pfiniteelement = P1Enum;   break;
    76                                 case XTaylorHoodEnum       : finiteelement = P2Enum;       pfiniteelement = P1Enum;   break;
    77                                 case LATaylorHoodEnum      : finiteelement = P2Enum;       pfiniteelement = NoneEnum; break;
    78                                 case LACrouzeixRaviartEnum : finiteelement = P2bubbleEnum; pfiniteelement = NoneEnum; break;
    79                                 case OneLayerP4zEnum       : finiteelement = P2xP4Enum;    pfiniteelement = P1Enum;   break;
    80                                 case CrouzeixRaviartEnum   : finiteelement = P2bubbleEnum; pfiniteelement = P1DGEnum; break;
     71                                case P1P1Enum              : v_fe = P1Enum;       p_fe = P1Enum;   break;
     72                                case P1P1GLSEnum           : v_fe = P1Enum;       p_fe = P1Enum;   break;
     73                                case MINIcondensedEnum     : v_fe = P1bubbleEnum; p_fe = P1Enum;   break;
     74                                case MINIEnum              : v_fe = P1bubbleEnum; p_fe = P1Enum;   break;
     75                                case TaylorHoodEnum        : v_fe = P2Enum;       p_fe = P1Enum;   break;
     76                                case XTaylorHoodEnum       : v_fe = P2Enum;       p_fe = P1Enum;   break;
     77                                case LATaylorHoodEnum      : v_fe = P2Enum;       p_fe = NoneEnum; break;
     78                                case LACrouzeixRaviartEnum : v_fe = P2bubbleEnum; p_fe = NoneEnum; break;
     79                                case OneLayerP4zEnum       : v_fe = P2xP4Enum;    p_fe = P1Enum;   break;
     80                                case CrouzeixRaviartEnum   : v_fe = P2bubbleEnum; p_fe = P1DGEnum; break;
    8181                                default: _error_("finite element "<<EnumToStringx(finiteelement)<<" not supported");
    8282                        }
     
    103103                        }
    104104                        if(iomodel->domaintype==Domain3DEnum){
    105                                 IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceAnalysisEnum,finiteelement,0);
    106                                 IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvy",StressbalanceAnalysisEnum,finiteelement,1);
    107                                 IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,finiteelement,2);
     105                                IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceAnalysisEnum,v_fe,0);
     106                                IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvy",StressbalanceAnalysisEnum,v_fe,1);
     107                                IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,v_fe,2);
    108108                                iomodel->DeleteData(spcvz,"md.stressbalance.spcvz");
    109109                        }
    110110                        else if (iomodel->domaintype==Domain2DverticalEnum){
    111                                 IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceAnalysisEnum,finiteelement,0);
    112                                 IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,finiteelement,1);
     111                                IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceAnalysisEnum,v_fe,0);
     112                                IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,v_fe,1);
    113113                                iomodel->DeleteData(spcvz,"md.stressbalance.spcvy");
    114114                        }
     
    134134                        }
    135135                        if(addpressurespc){
    136                                 switch(pfiniteelement){
    137                                         case P1Enum:
     136                                switch(finiteelement){
     137                                        case P1P1Enum: case P1P1GLSEnum:
     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+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
     142                                                                        count++;
     143                                                                }
     144                                                        }
     145                                                }
     146                                                break;
     147                                        case MINIEnum: case MINIcondensedEnum:
    138148                                                for(i=0;i<iomodel->numberofvertices;i++){
    139149                                                        if(iomodel->my_vertices[i]){
     
    145155                                                }
    146156                                                break;
    147                                         case P1bubbleEnum:
     157                                        case TaylorHoodEnum:
    148158                                                for(i=0;i<iomodel->numberofvertices;i++){
    149159                                                        if(iomodel->my_vertices[i]){
    150160                                                                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));
     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));
    152162                                                                        count++;
    153163                                                                }
    154164                                                        }
    155165                                                }
    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                                                                 }
    164                                                         }
    165                                                 }
    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                                                                 }
    174                                                         }
    175                                                 }
    176                                                 break;
    177                                         case P2xP4Enum:
    178                                                 //Nothing yet
    179166                                                break;
    180167                                        default:
  • issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp

    r23167 r23184  
    459459                                                        if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
    460460                                                }
     461                                                if(iomodel->meshelementtype==PentaEnum){ _error_("need to add nodes on faces! (See Spcstatic above)");}
    461462
    462463                                                if(spcpresent){
Note: See TracChangeset for help on using the changeset viewer.