Changeset 23942
- Timestamp:
- 05/29/19 10:31:40 (6 years ago)
- Location:
- issm/trunk-jpl/src/c/analyses
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp
r23941 r23942 324 324 return; 325 325 }/*}}}*/ 326 327 /*GlaDS specifics*/ 328 void HydrologyGlaDSAnalysis::UpdateSheetThickness(FemModel* femmodel){/*{{{*/ 329 330 for(int j=0;j<femmodel->elements->Size();j++){ 331 Element* element=(Element*)femmodel->elements->GetObjectByOffset(j); 332 UpdateSheetThickness(element); 333 } 334 335 }/*}}}*/ 336 void HydrologyGlaDSAnalysis::UpdateSheetThickness(Element* element){/*{{{*/ 337 338 /*Skip if water or ice shelf element*/ 339 if(element->IsFloating()) return; 340 341 /*Intermediaries */ 342 IssmDouble Jdet,w,v,vx,vy,ub,h_old,N; 343 IssmDouble A,B,n; 344 345 /*Fetch number vertices for this element*/ 346 int numvertices = element->GetNumberOfVertices(); 347 348 /*Initialize new sheet thickness*/ 349 IssmDouble* h_new = xNew<IssmDouble>(numvertices); 350 351 /*Retrieve all inputs and parameters*/ 352 IssmDouble h_r = element->FindParam(HydrologyBumpHeightEnum); 353 IssmDouble l_r = element->FindParam(HydrologyBumpSpacingEnum); 354 IssmDouble dt = element->FindParam(TimesteppingTimeStepEnum); 355 Input* vx_input = element->GetInput(VxEnum);_assert_(vx_input); 356 Input* vy_input = element->GetInput(VyEnum);_assert_(vy_input); 357 Input* N_input = element->GetInput(EffectivePressureEnum); _assert_(N_input); 358 Input* h_input = element->GetInput(HydrologySheetThicknessEnum);_assert_(h_input); 359 Input* B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input); 360 Input* n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input); 361 362 /* Start looping on the number of gaussian points: */ 363 Gauss* gauss=element->NewGauss(); 364 for(int iv=0;iv<numvertices;iv++){ 365 gauss->GaussVertex(iv); 366 367 /*Get input values at gauss points*/ 368 vx_input->GetInputValue(&vx,gauss); 369 vy_input->GetInputValue(&vy,gauss); 370 h_input->GetInputValue(&h_old,gauss); 371 B_input->GetInputValue(&B,gauss); 372 n_input->GetInputValue(&n,gauss); 373 N_input->GetInputValue(&N,gauss); 374 375 /*Get basal velocity*/ 376 ub = sqrt(vx*vx + vy*vy); 377 378 /*Compute cavity opening w*/ 379 w = 0.; 380 if(h_old<h_r) w = ub*(h_r-h_old)/l_r; 381 382 /*Compute closing rate*/ 383 A=pow(B,-n); 384 v = 2./pow(n,n)*A*h_old*pow(fabs(N),n-1.)*N; 385 386 /*Get new sheet thickness*/ 387 h_new[iv] += h_old + dt*(w-v); 388 } 389 390 element->AddInput(HydrologySheetThicknessEnum,h_new,P1Enum); 391 392 /*Clean up and return*/ 393 xDelete<IssmDouble>(h_new); 394 delete gauss; 395 }/*}}}*/ -
issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.h
r23936 r23942 30 30 void InputUpdateFromSolution(IssmDouble* solution,Element* element); 31 31 void UpdateConstraints(FemModel* femmodel); 32 33 /*Specific to GlaDS*/ 34 void UpdateSheetThickness(FemModel* femmodel); 35 void UpdateSheetThickness(Element* element); 32 36 }; 33 37 #endif
Note:
See TracChangeset
for help on using the changeset viewer.