Changeset 24139
- Timestamp:
- 09/11/19 06:18:57 (6 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
r24120 r24139 157 157 /*Initialize cumdeltalthickness input*/ 158 158 InputUpdateFromConstantx(elements,0.,SealevelriseCumDeltathicknessEnum); 159 /*Initialize ThicknessResidual input*/ 160 InputUpdateFromConstantx(elements,0.,ThicknessResidualEnum); 159 161 160 162 /*Get what we need for ocean-induced basal melting*/ … … 851 853 int numnodes = element->GetNumberOfNodes(); 852 854 IssmDouble* newthickness = xNew<IssmDouble>(numnodes); 855 IssmDouble* thicknessresidual = xNew<IssmDouble>(numnodes); 853 856 854 857 /*Use the dof list to index into the solution vector: */ 855 858 IssmDouble minthickness = element->FindParam(MasstransportMinThicknessEnum); 856 859 for(int i=0;i<numnodes;i++){ 857 860 newthickness[i]=solution[doflist[i]]; 861 thicknessresidual[i]=0.; 858 862 /*Check solution*/ 859 863 if(xIsNan<IssmDouble>(newthickness[i])) _error_("NaN found in solution vector"); 860 864 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 } 862 869 } 863 870 element->AddBasalInput(ThicknessEnum,newthickness,element->GetElementType()); 871 element->AddBasalInput(ThicknessResidualEnum,thicknessresidual,element->GetElementType()); 872 864 873 xDelete<int>(doflist); 865 874 xDelete<IssmDouble>(newthickness); 875 xDelete<IssmDouble>(thicknessresidual); 866 876 867 877 /*Update bed and surface accordingly*/ … … 869 879 /*Get basal element*/ 870 880 int domaintype; element->FindParam(&domaintype,DomainTypeEnum); 871 881 Element* basalelement=element; 872 882 if(domaintype!=Domain2DhorizontalEnum) basalelement = element->SpawnBasalElement(); 873 883 874 884 /*Fetch number of nodes and dof for this finite element*/ 875 885 int numvertices = basalelement->GetNumberOfVertices(); 876 886 877 887 /*Now, we need to do some "processing"*/ 878 888 newthickness = xNew<IssmDouble>(numvertices); 879 889 IssmDouble* oldthickness = xNew<IssmDouble>(numvertices); 880 890 IssmDouble* cumdeltathickness = xNew<IssmDouble>(numvertices); … … 889 899 890 900 /*Get previous base, thickness, surfac and current sealevel and bed:*/ 891 901 basalelement->GetInputListOnVertices(&newthickness[0],ThicknessEnum); 892 902 basalelement->GetInputListOnVertices(&oldthickness[0],ThicknessOldEnum); 893 903 basalelement->GetInputListOnVertices(&oldbase[0],BaseEnum); … … 897 907 basalelement->GetInputListOnVertices(&cumdeltathickness[0],SealevelriseCumDeltathicknessEnum); 898 908 899 909 /*Do we do grounding line migration?*/ 900 910 bool isgroundingline; 901 911 element->FindParam(&isgroundingline,TransientIsgroundinglineEnum); … … 909 919 910 920 /*Find MasstransportHydrostaticAdjustment to figure out how to update the geometry:*/ 911 921 int hydroadjustment; 912 922 basalelement->FindParam(&hydroadjustment,MasstransportHydrostaticAdjustmentEnum); 913 923 IssmDouble rho_ice = basalelement->FindParam(MaterialsRhoIceEnum); -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r24097 r24139 779 779 ThicknessOldEnum, 780 780 ThicknessPositiveEnum, 781 ThicknessResidualEnum, 781 782 VelEnum, 782 783 VxAverageEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r24097 r24139 785 785 case ThicknessOldEnum : return "ThicknessOld"; 786 786 case ThicknessPositiveEnum : return "ThicknessPositive"; 787 case ThicknessResidualEnum : return "ThicknessResidual"; 787 788 case VelEnum : return "Vel"; 788 789 case VxAverageEnum : return "VxAverage"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r24097 r24139 803 803 else if (strcmp(name,"ThicknessOld")==0) return ThicknessOldEnum; 804 804 else if (strcmp(name,"ThicknessPositive")==0) return ThicknessPositiveEnum; 805 else if (strcmp(name,"ThicknessResidual")==0) return ThicknessResidualEnum; 805 806 else if (strcmp(name,"Vel")==0) return VelEnum; 806 807 else if (strcmp(name,"VxAverage")==0) return VxAverageEnum; … … 874 875 else if (strcmp(name,"Outputdefinition54")==0) return Outputdefinition54Enum; 875 876 else if (strcmp(name,"Outputdefinition55")==0) return Outputdefinition55Enum; 876 else if (strcmp(name,"Outputdefinition56")==0) return Outputdefinition56Enum;877 877 else stage=8; 878 878 } 879 879 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; 881 882 else if (strcmp(name,"Outputdefinition58")==0) return Outputdefinition58Enum; 882 883 else if (strcmp(name,"Outputdefinition59")==0) return Outputdefinition59Enum; … … 997 998 else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum; 998 999 else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum; 999 else if (strcmp(name,"DoubleMatArrayParam")==0) return DoubleMatArrayParamEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 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; 1004 1005 else if (strcmp(name,"DoubleMatParam")==0) return DoubleMatParamEnum; 1005 1006 else if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum; … … 1120 1121 else if (strcmp(name,"Materials")==0) return MaterialsEnum; 1121 1122 else if (strcmp(name,"Matestar")==0) return MatestarEnum; 1122 else if (strcmp(name,"Matice")==0) return MaticeEnum;1123 1123 else stage=10; 1124 1124 } 1125 1125 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; 1127 1128 else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum; 1128 1129 else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum; … … 1243 1244 else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum; 1244 1245 else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum; 1245 else if (strcmp(name,"StringParam")==0) return StringParamEnum;1246 1246 else stage=11; 1247 1247 } 1248 1248 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; 1250 1251 else if (strcmp(name,"SubelementFriction2")==0) return SubelementFriction2Enum; 1251 1252 else if (strcmp(name,"SubelementMelt1")==0) return SubelementMelt1Enum;
Note:
See TracChangeset
for help on using the changeset viewer.