Changeset 21469
- Timestamp:
- 01/09/17 10:17:06 (8 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 6 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
r21232 r21469 105 105 iomodel->FetchDataToInput(elements,"md.smb.b_neg",SmbBNegEnum); 106 106 break; 107 case SMBgradientselaEnum: 108 iomodel->FetchDataToInput(elements,"md.smb.ela",SmbElaEnum); 109 iomodel->FetchDataToInput(elements,"md.smb.b_pos",SmbBPosEnum); 110 iomodel->FetchDataToInput(elements,"md.smb.b_neg",SmbBNegEnum); 111 iomodel->FetchDataToInput(elements,"md.smb.b_max",SmbBMaxEnum); 112 iomodel->FetchDataToInput(elements,"md.smb.b_min",SmbBMinEnum); 113 break; 107 114 case SMBhenningEnum: 108 115 iomodel->FetchDataToInput(elements,"md.smb.smbref",SmbSmbrefEnum,0.); … … 217 224 /*Nothing to add to parameters*/ 218 225 break; 226 case SMBgradientselaEnum: 227 /*Nothing to add to parameters*/ 228 break; 219 229 case SMBhenningEnum: 220 230 /*Nothing to add to parameters*/ … … 282 292 SmbGradientsx(femmodel); 283 293 break; 294 case SMBgradientselaEnum: 295 if(VerboseSolution())_printf0_(" call smb gradients ela module\n"); 296 SmbGradientsElax(femmodel); 297 break; 284 298 case SMBhenningEnum: 285 299 if(VerboseSolution())_printf0_(" call smb Henning module\n"); -
issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp
r20690 r21469 17 17 IssmDouble rho_water; // density of fresh water 18 18 IssmDouble rho_ice; // density of ice 19 IssmDouble yts; // conversion factor year to second 19 20 20 21 /*Loop over all the elements of this partition*/ … … 44 45 rho_water=element->matpar->GetMaterialParameter(MaterialsRhoFreshwaterEnum); 45 46 47 /* Get constants */ 48 femmodel->parameters->FindParam(&yts,ConstantsYtsEnum); 49 46 50 // loop over all vertices 47 51 for(v=0;v<numvertices;v++){ … … 52 56 smb[v]=Smbref[v]+b_neg[v]*(s[v]-Href[v]); 53 57 } 58 54 59 smb[v]=smb[v]/1000*rho_water/rho_ice; // SMB in m/y ice 55 60 } //end of the loop over the vertices … … 63 68 xDelete<IssmDouble>(s); 64 69 xDelete<IssmDouble>(smb); 70 } 71 72 }/*}}}*/ 73 void SmbGradientsElax(FemModel* femmodel){/*{{{*/ 74 75 // void SurfaceMassBalancex(hd,agd,ni){ 76 // INPUT parameters: ni: working size of arrays 77 // INPUT: surface elevation (m): hd(NA) 78 // OUTPUT: surface mass-balance (m/yr ice): agd(NA) 79 int v; 80 81 /*Loop over all the elements of this partition*/ 82 for(int i=0;i<femmodel->elements->Size();i++){ 83 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i)); 84 85 /*Allocate all arrays*/ 86 int numvertices = element->GetNumberOfVertices(); 87 IssmDouble* ela = xNew<IssmDouble>(numvertices); // Equilibrium Line Altitude (m a.s.l) to which deviations are used to calculate the SMB 88 IssmDouble* b_pos = xNew<IssmDouble>(numvertices); // SMB gradient above ELA (m ice eq. per m elevation change) 89 IssmDouble* b_neg = xNew<IssmDouble>(numvertices); // SMB gradient below ELA (m ice eq. per m elevation change) 90 IssmDouble* b_max = xNew<IssmDouble>(numvertices); // Upper cap on SMB rate (m/y ice eq.) 91 IssmDouble* b_min = xNew<IssmDouble>(numvertices); // Lower cap on SMB rate (m/y ice eq.) 92 IssmDouble* s = xNew<IssmDouble>(numvertices); // Surface elevation (m a.s.l.) 93 IssmDouble* smb = xNew<IssmDouble>(numvertices); // SMB (m/y ice eq.) 94 95 /*Recover ELA, SMB gradients, and caps*/ 96 element->GetInputListOnVertices(ela,SmbElaEnum); 97 element->GetInputListOnVertices(b_pos,SmbBPosEnum); 98 element->GetInputListOnVertices(b_neg,SmbBNegEnum); 99 element->GetInputListOnVertices(b_max,SmbBMaxEnum); 100 element->GetInputListOnVertices(b_min,SmbBMinEnum); 101 102 /*Recover surface elevation at vertices: */ 103 element->GetInputListOnVertices(s,SurfaceEnum); 104 105 /*Loop over all vertices, calculate SMB*/ 106 for(v=0;v<numvertices;v++){ 107 // if surface is above the ELA 108 if(s[v]>ela[v]){ 109 smb[v]=b_pos[v]*(s[v]-ela[v]); 110 } 111 // if surface is below or equal to the ELA 112 else{ 113 smb[v]=b_neg[v]*(s[v]-ela[v]); 114 } 115 116 // if SMB is larger than upper cap, set SMB to upper cap 117 if(smb[v]>b_max[v]){ 118 smb[v]=b_max[v]; 119 } 120 // if SMB is smaller than lower cap, set SMB to lower cap 121 if(smb[v]<b_min[v]){ 122 smb[v]=b_min[v]; 123 } 124 } //end of the loop over the vertices 125 126 /*Add input to element and Free memory*/ 127 element->AddInput(SmbMassBalanceEnum,smb,P1Enum); 128 xDelete<IssmDouble>(ela); 129 xDelete<IssmDouble>(b_pos); 130 xDelete<IssmDouble>(b_neg); 131 xDelete<IssmDouble>(b_max); 132 xDelete<IssmDouble>(b_min); 133 xDelete<IssmDouble>(s); 134 xDelete<IssmDouble>(smb); 135 65 136 } 66 137 -
issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h
r21216 r21469 11 11 void SurfaceMassBalancex(FemModel* femmodel); 12 12 void SmbGradientsx(FemModel* femmodel); 13 void SmbGradientsElax(FemModel* femmodel); 13 14 void Delta18oParameterizationx(FemModel* femmodel); 14 15 void MungsmtpParameterizationx(FemModel* femmodel); -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r21463 r21469 464 464 SmbRefreezeEnum, 465 465 SMBgcmEnum, 466 /*SMBgradientsela*/ 467 SMBgradientselaEnum, 468 SmbElaEnum, 469 SmbBMaxEnum, 470 SmbBMinEnum, 466 471 /*}}}*/ 467 472 /*Inputs {{{*/ -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r21464 r21469 465 465 case SmbRefreezeEnum : return "SmbRefreeze"; 466 466 case SMBgcmEnum : return "SMBgcm"; 467 case SMBgradientselaEnum : return "SMBgradientsela"; 468 case SmbElaEnum : return "SmbEla"; 469 case SmbBMaxEnum : return "SmbBMax"; 470 case SmbBMinEnum : return "SmbBMin"; 467 471 case AdjointpEnum : return "Adjointp"; 468 472 case AdjointxEnum : return "Adjointx"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r21464 r21469 474 474 else if (strcmp(name,"SmbRefreeze")==0) return SmbRefreezeEnum; 475 475 else if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum; 476 else if (strcmp(name,"SMBgradientsela")==0) return SMBgradientselaEnum; 477 else if (strcmp(name,"SmbEla")==0) return SmbElaEnum; 478 else if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum; 479 else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum; 476 480 else if (strcmp(name,"Adjointp")==0) return AdjointpEnum; 477 481 else if (strcmp(name,"Adjointx")==0) return AdjointxEnum; … … 502 506 else if (strcmp(name,"TemperaturePicard")==0) return TemperaturePicardEnum; 503 507 else if (strcmp(name,"TemperaturePDD")==0) return TemperaturePDDEnum; 504 else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum; 505 512 else if (strcmp(name,"SurfaceAbsMisfit")==0) return SurfaceAbsMisfitEnum; 506 513 else if (strcmp(name,"Vel")==0) return VelEnum; 507 514 else if (strcmp(name,"Velocity")==0) return VelocityEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"VxAverage")==0) return VxAverageEnum; 515 else if (strcmp(name,"VxAverage")==0) return VxAverageEnum; 512 516 else if (strcmp(name,"Vx")==0) return VxEnum; 513 517 else if (strcmp(name,"VxPicard")==0) return VxPicardEnum; … … 625 629 else if (strcmp(name,"Outputdefinition40")==0) return Outputdefinition40Enum; 626 630 else if (strcmp(name,"Outputdefinition41")==0) return Outputdefinition41Enum; 627 else if (strcmp(name,"Outputdefinition42")==0) return Outputdefinition42Enum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"Outputdefinition42")==0) return Outputdefinition42Enum; 628 635 else if (strcmp(name,"Outputdefinition43")==0) return Outputdefinition43Enum; 629 636 else if (strcmp(name,"Outputdefinition44")==0) return Outputdefinition44Enum; 630 637 else if (strcmp(name,"Outputdefinition45")==0) return Outputdefinition45Enum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"Outputdefinition46")==0) return Outputdefinition46Enum; 638 else if (strcmp(name,"Outputdefinition46")==0) return Outputdefinition46Enum; 635 639 else if (strcmp(name,"Outputdefinition47")==0) return Outputdefinition47Enum; 636 640 else if (strcmp(name,"Outputdefinition48")==0) return Outputdefinition48Enum; … … 748 752 else if (strcmp(name,"Gsl")==0) return GslEnum; 749 753 else if (strcmp(name,"Cuffey")==0) return CuffeyEnum; 750 else if (strcmp(name,"BuddJacka")==0) return BuddJackaEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"BuddJacka")==0) return BuddJackaEnum; 751 758 else if (strcmp(name,"CuffeyTemperate")==0) return CuffeyTemperateEnum; 752 759 else if (strcmp(name,"Paterson")==0) return PatersonEnum; 753 760 else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum; 761 else if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum; 758 762 else if (strcmp(name,"ExtrapolationVariable")==0) return ExtrapolationVariableEnum; 759 763 else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum; … … 871 875 else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum; 872 876 else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum; 873 else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum; 874 881 else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum; 875 882 else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum; 876 883 else if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum; 884 else if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum; 881 885 else if (strcmp(name,"L2ProjectionEPLAnalysis")==0) return L2ProjectionEPLAnalysisEnum; 882 886 else if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum; … … 994 998 else if (strcmp(name,"Parameters")==0) return ParametersEnum; 995 999 else if (strcmp(name,"Vertices")==0) return VerticesEnum; 996 else if (strcmp(name,"Results")==0) return ResultsEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"Results")==0) return ResultsEnum; 997 1004 else if (strcmp(name,"MaximumNumberOfDefinitions")==0) return MaximumNumberOfDefinitionsEnum; 998 else stage= 9;1005 else stage=10; 999 1006 } 1000 1007 /*If we reach this point, the string provided has not been found*/
Note:
See TracChangeset
for help on using the changeset viewer.