Changeset 24139


Ignore:
Timestamp:
09/11/19 06:18:57 (6 years ago)
Author:
rueckamp
Message:

CHG: added ThicknessResidual as possible output to MasstransportAnalysis

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

Legend:

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

    r24120 r24139  
    157157        /*Initialize cumdeltalthickness input*/
    158158        InputUpdateFromConstantx(elements,0.,SealevelriseCumDeltathicknessEnum);
     159        /*Initialize ThicknessResidual input*/
     160        InputUpdateFromConstantx(elements,0.,ThicknessResidualEnum);
    159161
    160162        /*Get what we need for ocean-induced basal melting*/
     
    851853        int numnodes = element->GetNumberOfNodes();
    852854        IssmDouble* newthickness = xNew<IssmDouble>(numnodes);
     855        IssmDouble* thicknessresidual = xNew<IssmDouble>(numnodes);
    853856
    854857        /*Use the dof list to index into the solution vector: */
    855    IssmDouble minthickness = element->FindParam(MasstransportMinThicknessEnum);
     858        IssmDouble minthickness = element->FindParam(MasstransportMinThicknessEnum);
    856859        for(int i=0;i<numnodes;i++){
    857860                newthickness[i]=solution[doflist[i]];
     861                thicknessresidual[i]=0.;       
    858862                /*Check solution*/
    859863                if(xIsNan<IssmDouble>(newthickness[i])) _error_("NaN found in solution vector");
    860864                if(xIsInf<IssmDouble>(newthickness[i])) _error_("Inf found in solution vector");
    861       if(newthickness[i]<minthickness) newthickness[i]=minthickness;
     865                if(newthickness[i]<minthickness){
     866                        thicknessresidual[i]=minthickness-newthickness[i];
     867                        newthickness[i]=minthickness;
     868                }
    862869        }
    863870        element->AddBasalInput(ThicknessEnum,newthickness,element->GetElementType());
     871        element->AddBasalInput(ThicknessResidualEnum,thicknessresidual,element->GetElementType());
     872       
    864873        xDelete<int>(doflist);
    865874        xDelete<IssmDouble>(newthickness);
     875        xDelete<IssmDouble>(thicknessresidual);
    866876
    867877        /*Update bed and surface accordingly*/
     
    869879        /*Get basal element*/
    870880        int domaintype; element->FindParam(&domaintype,DomainTypeEnum);
    871    Element* basalelement=element;
     881        Element* basalelement=element;
    872882        if(domaintype!=Domain2DhorizontalEnum) basalelement = element->SpawnBasalElement();
    873883
    874884        /*Fetch number of nodes and dof for this finite element*/
    875    int numvertices = basalelement->GetNumberOfVertices();
     885        int numvertices = basalelement->GetNumberOfVertices();
    876886
    877887        /*Now, we need to do some "processing"*/
    878    newthickness  = xNew<IssmDouble>(numvertices);
     888        newthickness  = xNew<IssmDouble>(numvertices);
    879889        IssmDouble* oldthickness      = xNew<IssmDouble>(numvertices);
    880890        IssmDouble* cumdeltathickness = xNew<IssmDouble>(numvertices);
     
    889899
    890900        /*Get previous base, thickness, surfac and current sealevel and bed:*/
    891    basalelement->GetInputListOnVertices(&newthickness[0],ThicknessEnum);
     901        basalelement->GetInputListOnVertices(&newthickness[0],ThicknessEnum);
    892902        basalelement->GetInputListOnVertices(&oldthickness[0],ThicknessOldEnum);
    893903        basalelement->GetInputListOnVertices(&oldbase[0],BaseEnum);
     
    897907        basalelement->GetInputListOnVertices(&cumdeltathickness[0],SealevelriseCumDeltathicknessEnum);
    898908
    899    /*Do we do grounding line migration?*/
     909        /*Do we do grounding line migration?*/
    900910        bool isgroundingline;
    901911        element->FindParam(&isgroundingline,TransientIsgroundinglineEnum);
     
    909919
    910920        /*Find MasstransportHydrostaticAdjustment to figure out how to update the geometry:*/
    911    int hydroadjustment;
     921        int hydroadjustment;
    912922        basalelement->FindParam(&hydroadjustment,MasstransportHydrostaticAdjustmentEnum);
    913923        IssmDouble rho_ice   = basalelement->FindParam(MaterialsRhoIceEnum);
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r24097 r24139  
    779779        ThicknessOldEnum,
    780780        ThicknessPositiveEnum,
     781        ThicknessResidualEnum,
    781782        VelEnum,
    782783        VxAverageEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r24097 r24139  
    785785                case ThicknessOldEnum : return "ThicknessOld";
    786786                case ThicknessPositiveEnum : return "ThicknessPositive";
     787                case ThicknessResidualEnum : return "ThicknessResidual";
    787788                case VelEnum : return "Vel";
    788789                case VxAverageEnum : return "VxAverage";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r24097 r24139  
    803803              else if (strcmp(name,"ThicknessOld")==0) return ThicknessOldEnum;
    804804              else if (strcmp(name,"ThicknessPositive")==0) return ThicknessPositiveEnum;
     805              else if (strcmp(name,"ThicknessResidual")==0) return ThicknessResidualEnum;
    805806              else if (strcmp(name,"Vel")==0) return VelEnum;
    806807              else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
     
    874875              else if (strcmp(name,"Outputdefinition54")==0) return Outputdefinition54Enum;
    875876              else if (strcmp(name,"Outputdefinition55")==0) return Outputdefinition55Enum;
    876               else if (strcmp(name,"Outputdefinition56")==0) return Outputdefinition56Enum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"Outputdefinition57")==0) return Outputdefinition57Enum;
     880              if (strcmp(name,"Outputdefinition56")==0) return Outputdefinition56Enum;
     881              else if (strcmp(name,"Outputdefinition57")==0) return Outputdefinition57Enum;
    881882              else if (strcmp(name,"Outputdefinition58")==0) return Outputdefinition58Enum;
    882883              else if (strcmp(name,"Outputdefinition59")==0) return Outputdefinition59Enum;
     
    997998              else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
    998999              else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum;
    999               else if (strcmp(name,"DoubleMatArrayParam")==0) return DoubleMatArrayParamEnum;
    10001000         else stage=9;
    10011001   }
    10021002   if(stage==9){
    1003               if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
     1003              if (strcmp(name,"DoubleMatArrayParam")==0) return DoubleMatArrayParamEnum;
     1004              else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
    10041005              else if (strcmp(name,"DoubleMatParam")==0) return DoubleMatParamEnum;
    10051006              else if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum;
     
    11201121              else if (strcmp(name,"Materials")==0) return MaterialsEnum;
    11211122              else if (strcmp(name,"Matestar")==0) return MatestarEnum;
    1122               else if (strcmp(name,"Matice")==0) return MaticeEnum;
    11231123         else stage=10;
    11241124   }
    11251125   if(stage==10){
    1126               if (strcmp(name,"Matlitho")==0) return MatlithoEnum;
     1126              if (strcmp(name,"Matice")==0) return MaticeEnum;
     1127              else if (strcmp(name,"Matlitho")==0) return MatlithoEnum;
    11271128              else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
    11281129              else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
     
    12431244              else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
    12441245              else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
    1245               else if (strcmp(name,"StringParam")==0) return StringParamEnum;
    12461246         else stage=11;
    12471247   }
    12481248   if(stage==11){
    1249               if (strcmp(name,"SubelementFriction1")==0) return SubelementFriction1Enum;
     1249              if (strcmp(name,"StringParam")==0) return StringParamEnum;
     1250              else if (strcmp(name,"SubelementFriction1")==0) return SubelementFriction1Enum;
    12501251              else if (strcmp(name,"SubelementFriction2")==0) return SubelementFriction2Enum;
    12511252              else if (strcmp(name,"SubelementMelt1")==0) return SubelementMelt1Enum;
Note: See TracChangeset for help on using the changeset viewer.