source:
issm/oecreview/Archive/18296-19100/ISSM-18757-18758.diff@
19102
Last change on this file since 19102 was 19102, checked in by , 10 years ago | |
---|---|
File size: 28.4 KB |
-
../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
19 19 } 20 20 /*}}}*/ 21 21 void LevelsetAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 22 int finiteelement;23 22 24 23 /*Finite element type*/ 25 finiteelement = P1Enum;24 int finiteelement = P1Enum; 26 25 27 26 /*Update elements: */ 28 27 int counter=0; … … 37 36 iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum); 38 37 iomodel->FetchDataToInput(elements,VxEnum); 39 38 iomodel->FetchDataToInput(elements,VyEnum); 40 iomodel->FetchDataToInput(elements,MasstransportCalvingrateEnum); 39 40 /*Get calving parameters*/ 41 int calvinglaw; 42 iomodel->Constant(&calvinglaw,CalvingLawEnum); 43 switch(calvinglaw){ 44 case DefaultCalvingEnum: 45 iomodel->FetchDataToInput(elements,CalvingCalvingrateEnum); 46 break; 47 case CalvingLevermannEnum: 48 iomodel->FetchDataToInput(elements,CalvinglevermannCoeffEnum); 49 break; 50 default: 51 _error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet"); 52 } 41 53 } 42 54 /*}}}*/ 43 55 void LevelsetAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/ … … 99 111 Element* basalelement = element->SpawnBasalElement(); 100 112 101 113 /*Intermediaries */ 102 int dim, domaintype; 103 bool iscalvingrate; 114 int stabilization=2; 115 int dim, domaintype, calvinglaw; 116 bool iscalving; 104 117 int i, row, col; 105 118 IssmDouble kappa; 106 119 IssmDouble Jdet, dt, D_scalar; 107 120 IssmDouble h,hx,hy,hz; 108 121 IssmDouble vel; 109 // IssmDouble norm_dlsf;122 IssmDouble norm_dlsf, calvingrate; 110 123 IssmDouble* xyz_list = NULL; 111 124 112 125 /*Get problem dimension and whether there is calving or not*/ 113 basalelement->FindParam(&iscalving rate,MasstransportIscalvingrateEnum);126 basalelement->FindParam(&iscalving,TransientIscalvingEnum); 114 127 basalelement->FindParam(&domaintype,DomainTypeEnum); 128 basalelement->FindParam(&calvinglaw,CalvingLawEnum); 115 129 switch(domaintype){ 116 130 case Domain2DverticalEnum: dim = 1; break; 117 131 case Domain2DhorizontalEnum: dim = 2; break; … … 130 144 IssmDouble* D = xNew<IssmDouble>(dim*dim); 131 145 IssmDouble* v = xNew<IssmDouble>(dim); 132 146 IssmDouble* w = xNew<IssmDouble>(dim); 133 IssmDouble* c = xNew <IssmDouble>(dim);134 //IssmDouble* dlsf = xNew<IssmDouble>(dim);147 IssmDouble* c = xNewZeroInit<IssmDouble>(dim); 148 IssmDouble* dlsf = xNew<IssmDouble>(dim); 135 149 136 150 /*Retrieve all inputs and parameters*/ 137 151 basalelement->GetVerticesCoordinates(&xyz_list); 138 152 basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 139 Input* vx_input=NULL; 140 Input* vy_input=NULL; 141 Input* calvingratex_input=NULL; 142 Input* calvingratey_input=NULL; 153 Input* vx_input = NULL; 154 Input* vy_input = NULL; 155 Input* calvingratex_input = NULL; 156 Input* calvingratey_input = NULL; 157 Input* lsf_slopex_input = NULL; 158 Input* lsf_slopey_input = NULL; 159 Input* calvingrate_input = NULL; 160 161 /*Load velocities*/ 143 162 if(domaintype==Domain2DhorizontalEnum){ 144 163 vx_input=basalelement->GetInput(VxEnum); _assert_(vx_input); 145 164 vy_input=basalelement->GetInput(VyEnum); _assert_(vy_input); 146 if(iscalvingrate){147 calvingratex_input=basalelement->GetInput(CalvingratexEnum); _assert_(calvingratex_input);148 calvingratey_input=basalelement->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);149 }150 165 } 151 166 else{ 152 167 if(dim==1){ 153 168 vx_input=basalelement->GetInput(VxEnum); _assert_(vx_input); 154 if(iscalvingrate){155 calvingratex_input=basalelement->GetInput(CalvingratexEnum); _assert_(calvingratex_input);156 }157 169 } 158 170 if(dim==2){ 159 171 vx_input=basalelement->GetInput(VxAverageEnum); _assert_(vx_input); 160 172 vy_input=basalelement->GetInput(VyAverageEnum); _assert_(vy_input); 161 if(iscalvingrate){162 calvingratex_input=basalelement->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);163 calvingratey_input=basalelement->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);164 }165 173 } 166 174 } 167 175 168 // Input* lsf_slopex_input = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 169 // Input* lsf_slopey_input = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 170 //Input* calvingrate_input = basalelement->GetInput(MasstransportCalvingrateEnum); _assert_(calvingrate_input); 171 176 /*Load calving inputs*/ 177 if(iscalving){ 178 switch(calvinglaw){ 179 case DefaultCalvingEnum: 180 lsf_slopex_input = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 181 if(dim==2) lsf_slopey_input = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 182 calvingrate_input = basalelement->GetInput(CalvingCalvingrateEnum); _assert_(calvingrate_input); 183 break; 184 case CalvingLevermannEnum: 185 if(domaintype==Domain2DhorizontalEnum){ 186 calvingratex_input=basalelement->GetInput(CalvingratexEnum); _assert_(calvingratex_input); 187 calvingratey_input=basalelement->GetInput(CalvingrateyEnum); _assert_(calvingratey_input); 188 } 189 else{ 190 if(dim==1){ 191 calvingratex_input=basalelement->GetInput(CalvingratexEnum); _assert_(calvingratex_input); 192 } 193 if(dim==2){ 194 calvingratex_input=basalelement->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input); 195 calvingratey_input=basalelement->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input); 196 } 197 } 198 break; 199 default: 200 _error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet"); 201 } 202 } 203 172 204 /* Start looping on the number of gaussian points: */ 173 205 Gauss* gauss=basalelement->NewGauss(2); 174 206 for(int ig=gauss->begin();ig<gauss->end();ig++){ … … 192 224 GetBprime(Bprime,basalelement,xyz_list,gauss); 193 225 vx_input->GetInputValue(&v[0],gauss); // in 3D case, add mesh velocity 194 226 vy_input->GetInputValue(&v[1],gauss); 195 if(iscalvingrate){ 196 calvingratex_input->GetInputValue(&c[0],gauss); // in 3D case, add mesh velocity 197 calvingratey_input->GetInputValue(&c[1],gauss); 198 for(i=0;i<dim;i++) w[i]=v[i]-c[i]; 227 228 /*Get calving speed*/ 229 if(iscalving){ 230 switch(calvinglaw){ 231 case DefaultCalvingEnum: 232 lsf_slopex_input->GetInputValue(&dlsf[0],gauss); 233 if(dim==2) lsf_slopey_input->GetInputValue(&dlsf[1],gauss); 234 calvingrate_input->GetInputValue(&calvingrate,gauss); 235 236 norm_dlsf=0.; 237 for(i=0;i<dim;i++) norm_dlsf+=pow(dlsf[i],2); 238 norm_dlsf=sqrt(norm_dlsf); 239 240 if(norm_dlsf>1.e-10) 241 for(i=0;i<dim;i++) c[i]=calvingrate*dlsf[i]/norm_dlsf; 242 else 243 for(i=0;i<dim;i++) c[i]=0.; 244 break; 245 case CalvingLevermannEnum: 246 calvingratex_input->GetInputValue(&c[0],gauss); // in 3D case, add mesh velocity 247 if(dim==2) calvingratey_input->GetInputValue(&c[1],gauss); 248 break; 249 default: 250 _error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet"); 251 } 199 252 } 200 else{201 for(i=0;i<dim;i++) w[i]=v[i];202 }203 //lsf_slopex_input->GetInputValue(&dlsf[0],gauss);204 //lsf_slopey_input->GetInputValue(&dlsf[1],gauss);205 //calvingrate_input->GetInputValue(&calvingrate,gauss);206 253 207 //norm_dlsf=0.; 208 //for(i=0;i<dim;i++) norm_dlsf+=pow(dlsf[i],2); 209 //norm_dlsf=sqrt(norm_dlsf); 254 /*Levelset speed is ice velocity - calving rate*/ 255 for(i=0;i<dim;i++) w[i]=v[i]-c[i]; 210 256 211 //if(norm_dlsf>1.e-10) 212 // for(i=0;i<dim;i++) c[i]=calvingrate*dlsf[i]/norm_dlsf; 213 //else 214 //for(i=0;i<dim;i++) c[i]=0.; 215 216 217 for(row=0;row<dim;row++) 218 for(col=0;col<dim;col++) 257 /*Compute D*/ 258 for(row=0;row<dim;row++){ 259 for(col=0;col<dim;col++){ 219 260 if(row==col) 220 261 D[row*dim+col]=D_scalar*w[row]; 221 262 else 222 D[row*dim+col]=0.; 263 D[row*dim+col]=0.; 264 } 265 } 223 266 224 267 TripleMultiply(B,dim,numnodes,1, 225 268 D,dim,dim,0, … … 227 270 &Ke->values[0],1); 228 271 229 272 /* Stabilization */ 230 int stabilization=2;231 273 vel=0.; 232 for(i=0;i<dim;i++) vel+= w[i]*w[i];274 for(i=0;i<dim;i++) vel+=v[i]*v[i]; 233 275 vel=sqrt(vel)+1.e-14; 234 276 switch(stabilization){ 235 277 case 0: … … 255 297 case 2: 256 298 /* Streamline Upwinding */ 257 299 basalelement->ElementSizes(&hx,&hy,&hz); 258 h=sqrt( pow(hx* w[0]/vel,2) + pow(hy*w[1]/vel,2) );300 h=sqrt( pow(hx*v[0]/vel,2) + pow(hy*v[1]/vel,2) ); 259 301 for(row=0;row<dim;row++) 260 302 for(col=0;col<dim;col++) 261 D[row*dim+col] = D_scalar*h/(2.*vel)* w[row]*w[col];303 D[row*dim+col] = D_scalar*h/(2.*vel)*v[row]*v[col]; 262 304 263 305 TripleMultiply(Bprime,dim,numnodes,1, 264 306 D,dim,dim,0, … … 279 321 xDelete<IssmDouble>(v); 280 322 xDelete<IssmDouble>(w); 281 323 xDelete<IssmDouble>(c); 282 //xDelete<IssmDouble>(dlsf);324 xDelete<IssmDouble>(dlsf); 283 325 delete gauss; 284 326 if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; 285 327 return Ke; -
../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
208 208 DamageEnum, 209 209 NewDamageEnum, 210 210 StressIntensityFactorEnum, 211 CalvingLawEnum, 212 CalvingCalvingrateEnum, 213 CalvingLevermannEnum, 214 DefaultCalvingEnum, 215 CalvingRequestedOutputsEnum, 216 CalvinglevermannCoeffEnum, 211 217 CalvingratexEnum, 212 218 CalvingrateyEnum, 213 219 CalvingratexAverageEnum, … … 249 255 Domain3DEnum, 250 256 MiscellaneousNameEnum, //FIXME: only used by qmu, should not be marshalled (already in queueing script) 251 257 MasstransportHydrostaticAdjustmentEnum, 252 MasstransportIscalvingrateEnum,253 MasstransportLevermannCalvingCoeffEnum,254 258 MasstransportIsfreesurfaceEnum, 255 259 MasstransportMinThicknessEnum, 256 260 MasstransportPenaltyFactorEnum, 257 261 MasstransportSpcthicknessEnum, 258 MasstransportCalvingrateEnum,259 262 MasstransportStabilizationEnum, 260 263 MasstransportVertexPairingEnum, 261 264 MasstransportNumRequestedOutputsEnum, … … 313 316 TransientIsgiaEnum, 314 317 TransientIsdamageevolutionEnum, 315 318 TransientIshydrologyEnum, 319 TransientIscalvingEnum, 316 320 TransientNumRequestedOutputsEnum, 317 321 TransientRequestedOutputsEnum, 318 322 PotentialEnum, -
../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
216 216 case DamageEnum : return "Damage"; 217 217 case NewDamageEnum : return "NewDamage"; 218 218 case StressIntensityFactorEnum : return "StressIntensityFactor"; 219 case CalvingLawEnum : return "CalvingLaw"; 220 case CalvingCalvingrateEnum : return "CalvingCalvingrate"; 221 case CalvingLevermannEnum : return "CalvingLevermann"; 222 case DefaultCalvingEnum : return "DefaultCalving"; 223 case CalvingRequestedOutputsEnum : return "CalvingRequestedOutputs"; 224 case CalvinglevermannCoeffEnum : return "CalvinglevermannCoeff"; 219 225 case CalvingratexEnum : return "Calvingratex"; 220 226 case CalvingrateyEnum : return "Calvingratey"; 221 227 case CalvingratexAverageEnum : return "CalvingratexAverage"; … … 257 263 case Domain3DEnum : return "Domain3D"; 258 264 case MiscellaneousNameEnum : return "MiscellaneousName"; 259 265 case MasstransportHydrostaticAdjustmentEnum : return "MasstransportHydrostaticAdjustment"; 260 case MasstransportIscalvingrateEnum : return "MasstransportIscalvingrate";261 case MasstransportLevermannCalvingCoeffEnum : return "MasstransportLevermannCalvingCoeff";262 266 case MasstransportIsfreesurfaceEnum : return "MasstransportIsfreesurface"; 263 267 case MasstransportMinThicknessEnum : return "MasstransportMinThickness"; 264 268 case MasstransportPenaltyFactorEnum : return "MasstransportPenaltyFactor"; 265 269 case MasstransportSpcthicknessEnum : return "MasstransportSpcthickness"; 266 case MasstransportCalvingrateEnum : return "MasstransportCalvingrate";267 270 case MasstransportStabilizationEnum : return "MasstransportStabilization"; 268 271 case MasstransportVertexPairingEnum : return "MasstransportVertexPairing"; 269 272 case MasstransportNumRequestedOutputsEnum : return "MasstransportNumRequestedOutputs"; … … 321 324 case TransientIsgiaEnum : return "TransientIsgia"; 322 325 case TransientIsdamageevolutionEnum : return "TransientIsdamageevolution"; 323 326 case TransientIshydrologyEnum : return "TransientIshydrology"; 327 case TransientIscalvingEnum : return "TransientIscalving"; 324 328 case TransientNumRequestedOutputsEnum : return "TransientNumRequestedOutputs"; 325 329 case TransientRequestedOutputsEnum : return "TransientRequestedOutputs"; 326 330 case PotentialEnum : return "Potential"; -
../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
219 219 else if (strcmp(name,"Damage")==0) return DamageEnum; 220 220 else if (strcmp(name,"NewDamage")==0) return NewDamageEnum; 221 221 else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum; 222 else if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum; 223 else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum; 224 else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum; 225 else if (strcmp(name,"DefaultCalving")==0) return DefaultCalvingEnum; 226 else if (strcmp(name,"CalvingRequestedOutputs")==0) return CalvingRequestedOutputsEnum; 227 else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum; 222 228 else if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum; 223 229 else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum; 224 230 else if (strcmp(name,"CalvingratexAverage")==0) return CalvingratexAverageEnum; … … 253 259 else if (strcmp(name,"MeshY")==0) return MeshYEnum; 254 260 else if (strcmp(name,"MeshZ")==0) return MeshZEnum; 255 261 else if (strcmp(name,"MeshElementtype")==0) return MeshElementtypeEnum; 256 else if (strcmp(name,"DomainType")==0) return DomainTypeEnum; 262 else stage=3; 263 } 264 if(stage==3){ 265 if (strcmp(name,"DomainType")==0) return DomainTypeEnum; 257 266 else if (strcmp(name,"DomainDimension")==0) return DomainDimensionEnum; 258 267 else if (strcmp(name,"Domain2Dhorizontal")==0) return Domain2DhorizontalEnum; 259 268 else if (strcmp(name,"Domain2Dvertical")==0) return Domain2DverticalEnum; 260 269 else if (strcmp(name,"Domain3D")==0) return Domain3DEnum; 261 270 else if (strcmp(name,"MiscellaneousName")==0) return MiscellaneousNameEnum; 262 else stage=3; 263 } 264 if(stage==3){ 265 if (strcmp(name,"MasstransportHydrostaticAdjustment")==0) return MasstransportHydrostaticAdjustmentEnum; 266 else if (strcmp(name,"MasstransportIscalvingrate")==0) return MasstransportIscalvingrateEnum; 267 else if (strcmp(name,"MasstransportLevermannCalvingCoeff")==0) return MasstransportLevermannCalvingCoeffEnum; 271 else if (strcmp(name,"MasstransportHydrostaticAdjustment")==0) return MasstransportHydrostaticAdjustmentEnum; 268 272 else if (strcmp(name,"MasstransportIsfreesurface")==0) return MasstransportIsfreesurfaceEnum; 269 273 else if (strcmp(name,"MasstransportMinThickness")==0) return MasstransportMinThicknessEnum; 270 274 else if (strcmp(name,"MasstransportPenaltyFactor")==0) return MasstransportPenaltyFactorEnum; 271 275 else if (strcmp(name,"MasstransportSpcthickness")==0) return MasstransportSpcthicknessEnum; 272 else if (strcmp(name,"MasstransportCalvingrate")==0) return MasstransportCalvingrateEnum;273 276 else if (strcmp(name,"MasstransportStabilization")==0) return MasstransportStabilizationEnum; 274 277 else if (strcmp(name,"MasstransportVertexPairing")==0) return MasstransportVertexPairingEnum; 275 278 else if (strcmp(name,"MasstransportNumRequestedOutputs")==0) return MasstransportNumRequestedOutputsEnum; … … 327 330 else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum; 328 331 else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum; 329 332 else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum; 333 else if (strcmp(name,"TransientIscalving")==0) return TransientIscalvingEnum; 330 334 else if (strcmp(name,"TransientNumRequestedOutputs")==0) return TransientNumRequestedOutputsEnum; 331 335 else if (strcmp(name,"TransientRequestedOutputs")==0) return TransientRequestedOutputsEnum; 332 336 else if (strcmp(name,"Potential")==0) return PotentialEnum; … … 378 382 else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum; 379 383 else if (strcmp(name,"AdjointBalancethickness2Analysis")==0) return AdjointBalancethickness2AnalysisEnum; 380 384 else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum; 381 else if (strcmp(name,"AnalysisCounter")==0) return AnalysisCounterEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"AnalysisCounter")==0) return AnalysisCounterEnum; 382 389 else if (strcmp(name,"DefaultAnalysis")==0) return DefaultAnalysisEnum; 383 390 else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum; 384 391 else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum; 392 else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum; 389 393 else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum; 390 394 else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum; 391 395 else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum; … … 501 505 else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum; 502 506 else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum; 503 507 else if (strcmp(name,"StringParam")==0) return StringParamEnum; 504 else if (strcmp(name,"Seg")==0) return SegEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"Seg")==0) return SegEnum; 505 512 else if (strcmp(name,"SegInput")==0) return SegInputEnum; 506 513 else if (strcmp(name,"Tria")==0) return TriaEnum; 507 514 else if (strcmp(name,"TriaInput")==0) return TriaInputEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"Tetra")==0) return TetraEnum; 515 else if (strcmp(name,"Tetra")==0) return TetraEnum; 512 516 else if (strcmp(name,"TetraInput")==0) return TetraInputEnum; 513 517 else if (strcmp(name,"Penta")==0) return PentaEnum; 514 518 else if (strcmp(name,"PentaInput")==0) return PentaInputEnum; … … 624 628 else if (strcmp(name,"P2")==0) return P2Enum; 625 629 else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum; 626 630 else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum; 627 else if (strcmp(name,"P2xP1")==0) return P2xP1Enum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"P2xP1")==0) return P2xP1Enum; 628 635 else if (strcmp(name,"P1xP2")==0) return P1xP2Enum; 629 636 else if (strcmp(name,"P1xP3")==0) return P1xP3Enum; 630 637 else if (strcmp(name,"P2xP4")==0) return P2xP4Enum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"P1P1")==0) return P1P1Enum; 638 else if (strcmp(name,"P1P1")==0) return P1P1Enum; 635 639 else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum; 636 640 else if (strcmp(name,"MINI")==0) return MINIEnum; 637 641 else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum; … … 747 751 else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum; 748 752 else if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum; 749 753 else if (strcmp(name,"TransientIslevelset")==0) return TransientIslevelsetEnum; 750 else if (strcmp(name,"ExtrapolationVariable")==0) return ExtrapolationVariableEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"ExtrapolationVariable")==0) return ExtrapolationVariableEnum; 751 758 else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum; 752 759 else if (strcmp(name,"LevelsetfunctionSlopeX")==0) return LevelsetfunctionSlopeXEnum; 753 760 else if (strcmp(name,"LevelsetfunctionSlopeY")==0) return LevelsetfunctionSlopeYEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"LevelsetfunctionPicard")==0) return LevelsetfunctionPicardEnum; 761 else if (strcmp(name,"LevelsetfunctionPicard")==0) return LevelsetfunctionPicardEnum; 758 762 else if (strcmp(name,"Seaiceatm")==0) return SeaiceatmEnum; 759 763 else if (strcmp(name,"Seaiceocean")==0) return SeaiceoceanEnum; 760 764 else if (strcmp(name,"SeaiceThickness")==0) return SeaiceThicknessEnum; -
../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
66 66 parameters->AddObject(iomodel->CopyConstantObject(QmuIsdakotaEnum)); 67 67 parameters->AddObject(iomodel->CopyConstantObject(InversionIscontrolEnum)); 68 68 parameters->AddObject(iomodel->CopyConstantObject(InversionTypeEnum)); 69 parameters->AddObject(iomodel->CopyConstantObject(CalvingLawEnum)); 69 70 if(solution_type==SeaiceSolutionEnum){ 70 71 } 71 72 else{ … … 82 83 parameters->AddObject(iomodel->CopyConstantObject(TransientIslevelsetEnum)); 83 84 parameters->AddObject(iomodel->CopyConstantObject(TransientIsdamageevolutionEnum)); 84 85 parameters->AddObject(iomodel->CopyConstantObject(TransientIshydrologyEnum)); 85 parameters->AddObject(iomodel->CopyConstantObject(MasstransportIscalvingrateEnum)); 86 parameters->AddObject(iomodel->CopyConstantObject(MasstransportLevermannCalvingCoeffEnum)); 86 parameters->AddObject(iomodel->CopyConstantObject(TransientIscalvingEnum)); 87 87 parameters->AddObject(iomodel->CopyConstantObject(MaterialsRheologyLawEnum)); 88 88 parameters->AddObject(iomodel->CopyConstantObject(GiaCrossSectionShapeEnum)); 89 89 -
../trunk-jpl/src/c/cores/transient_core.cpp
20 20 21 21 /*parameters: */ 22 22 IssmDouble starttime,finaltime,dt,yts; 23 bool isstressbalance,ismasstransport,isFS,isthermal,isgroundingline,isgia,islevelset,isdamageevolution,ishydrology,iscalving rate;23 bool isstressbalance,ismasstransport,isFS,isthermal,isgroundingline,isgia,islevelset,isdamageevolution,ishydrology,iscalving; 24 24 bool save_results,dakota_analysis; 25 25 bool time_adapt=false; 26 26 int output_frequency; 27 int domaintype,groundingline_migration ;27 int domaintype,groundingline_migration,calvinglaw; 28 28 int numoutputs = 0; 29 29 Analysis *analysis = NULL; 30 30 char** requested_outputs = NULL; … … 52 52 femmodel->parameters->FindParam(&isdamageevolution,TransientIsdamageevolutionEnum); 53 53 femmodel->parameters->FindParam(&ishydrology,TransientIshydrologyEnum); 54 54 femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum); 55 femmodel->parameters->FindParam(&iscalvingrate,MasstransportIscalvingrateEnum); 55 femmodel->parameters->FindParam(&iscalving,TransientIscalvingEnum); 56 femmodel->parameters->FindParam(&calvinglaw,CalvingLawEnum); 56 57 if(isgroundingline) femmodel->parameters->FindParam(&groundingline_migration,GroundinglineMigrationEnum); 57 58 femmodel->parameters->FindParam(&numoutputs,TransientNumRequestedOutputsEnum); 58 59 if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,TransientRequestedOutputsEnum); … … 101 102 } 102 103 103 104 if(islevelset){ 104 if(iscalving rate){105 if(iscalving && calvinglaw==CalvingLevermannEnum){ 105 106 if(VerboseSolution()) _printf0_(" computing calving rate\n"); 106 107 femmodel->StrainRateparallelx(); 107 108 femmodel->StrainRateperpendicularx(); -
../trunk-jpl/src/c/classes/Elements/Tria.cpp
438 438 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 439 439 Input* strainparallel_input=inputs->GetInput(StrainRateparallelEnum); _assert_(strainparallel_input); 440 440 Input* strainperpendicular_input=inputs->GetInput(StrainRateperpendicularEnum); _assert_(strainperpendicular_input); 441 this->parameters->FindParam(&propcoeff,MasstransportLevermannCalvingCoeffEnum);441 Input* levermanncoeff_input=inputs->GetInput(CalvinglevermannCoeffEnum); _assert_(levermanncoeff_input); 442 442 443 443 /* Start looping on the number of vertices: */ 444 444 gauss=new GaussTria(); … … 451 451 vel=vx*vx+vy*vy; 452 452 strainparallel_input->GetInputValue(&strainparallel,gauss); 453 453 strainperpendicular_input->GetInputValue(&strainperpendicular,gauss); 454 levermanncoeff_input->GetInputValue(&propcoeff,gauss); 454 455 455 456 /*Calving rate proportionnal to the positive product of the strain rate along the ice flow direction and the strain rate perpendicular to the ice flow */ 456 457 calvingrate[iv]=propcoeff*strainparallel*strainperpendicular; … … 464 465 /*Add input*/ 465 466 this->inputs->AddInput(new TriaInput(CalvingratexEnum,&calvingratex[0],P1Enum)); 466 467 this->inputs->AddInput(new TriaInput(CalvingrateyEnum,&calvingratey[0],P1Enum)); 467 this->inputs->AddInput(new TriaInput( MasstransportCalvingrateEnum,&calvingrate[0],P1Enum));468 this->inputs->AddInput(new TriaInput(CalvingCalvingrateEnum,&calvingrate[0],P1Enum)); 468 469 469 470 /*Clean up and return*/ 470 471 delete gauss; -
../trunk-jpl/src/c/classes/Elements/Penta.cpp
366 366 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 367 367 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 368 368 Input* strainparallel_input=inputs->GetInput(StrainRateparallelEnum); _assert_(strainparallel_input); 369 Input* strainperpendicular_input=inputs->GetInput(StrainRateperpendicularEnum); _assert_(strainperpendicular_input);370 this->parameters->FindParam(&propcoeff,MasstransportLevermannCalvingCoeffEnum);369 Input* strainperpendicular_input=inputs->GetInput(StrainRateperpendicularEnum); _assert_(strainperpendicular_input); 370 Input* levermanncoeff_input=inputs->GetInput(CalvinglevermannCoeffEnum); _assert_(levermanncoeff_input); 371 371 372 372 /* Start looping on the number of vertices: */ 373 373 gauss=new GaussPenta(); … … 380 380 vel=vx*vx+vy*vy; 381 381 strainparallel_input->GetInputValue(&strainparallel,gauss); 382 382 strainperpendicular_input->GetInputValue(&strainperpendicular,gauss); 383 levermanncoeff_input->GetInputValue(&propcoeff,gauss); 383 384 384 385 /*Calving rate proportionnal to the positive product of the strain rate along the ice flow direction and the strain rate perpendicular to the ice flow */ 385 386 calvingrate[iv]=propcoeff*strainparallel*strainperpendicular; … … 393 394 /*Add input*/ 394 395 this->inputs->AddInput(new PentaInput(CalvingratexEnum,&calvingratex[0],P1Enum)); 395 396 this->inputs->AddInput(new PentaInput(CalvingrateyEnum,&calvingratey[0],P1Enum)); 396 this->inputs->AddInput(new PentaInput( MasstransportCalvingrateEnum,&calvingrate[0],P1Enum));397 this->inputs->AddInput(new PentaInput(CalvingCalvingrateEnum,&calvingrate[0],P1Enum)); 397 398 398 399 /*Clean up and return*/ 399 400 delete gauss; -
../trunk-jpl/src/c/classes/Elements/Element.cpp
1091 1091 name==LevelsetfunctionSlopeXEnum || 1092 1092 name==LevelsetfunctionSlopeYEnum || 1093 1093 name==LevelsetfunctionPicardEnum || 1094 name==MasstransportCalvingrateEnum ||1094 //name==CalvingCalvingrateEnum || 1095 1095 name==GradientEnum || 1096 1096 name==OldGradientEnum || 1097 1097 name==ConvergedEnum || … … 1211 1211 break; 1212 1212 case CalvingratexEnum: 1213 1213 case CalvingrateyEnum: 1214 case MasstransportCalvingrateEnum:1214 case CalvingCalvingrateEnum: 1215 1215 this->StrainRateparallel(); 1216 1216 this->StrainRateperpendicular(); 1217 1217 this->CalvingRateLevermann();
Note:
See TracBrowser
for help on using the repository browser.