- Timestamp:
- 01/17/24 17:08:12 (14 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp
r27937 r28050 151 151 iomodel->FetchDataToInput(inputs,elements,"md.initialization.watercolumn",HydrologySheetThicknessEnum); 152 152 iomodel->FetchDataToInput(inputs,elements,"md.initialization.hydraulic_potential",HydraulicPotentialEnum); 153 iomodel->FetchDataToInput(inputs,elements,"md.hydrology.rheology_B_base",HydrologyRheologyBBaseEnum); 154 153 155 if(iomodel->domaintype==Domain2DhorizontalEnum){ 154 156 iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum); … … 249 251 IssmDouble g = element->FindParam(ConstantsGEnum); 250 252 IssmDouble e_v = element->FindParam(HydrologyEnglacialVoidRatioEnum); 251 Input* hr_input = element->GetInput(HydrologyBumpHeightEnum);_assert_(hr_input);253 Input* hr_input = element->GetInput(HydrologyBumpHeightEnum); _assert_(hr_input); 252 254 Input* k_input = element->GetInput(HydrologySheetConductivityEnum);_assert_(k_input); 253 Input* phi_input = element->GetInput(HydraulicPotentialEnum); _assert_(phi_input);254 Input* h_input = element->GetInput(HydrologySheetThicknessEnum); _assert_(h_input);255 Input* H_input = element->GetInput(ThicknessEnum);_assert_(H_input);256 Input* b_input = element->GetInput(BedEnum);_assert_(b_input);257 Input* B_input = element->GetInput(MaterialsRheologyBEnum);_assert_(B_input);258 Input* n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);255 Input* phi_input = element->GetInput(HydraulicPotentialEnum); _assert_(phi_input); 256 Input* h_input = element->GetInput(HydrologySheetThicknessEnum); _assert_(h_input); 257 Input* H_input = element->GetInput(ThicknessEnum); _assert_(H_input); 258 Input* b_input = element->GetInput(BedEnum); _assert_(b_input); 259 Input* B_input = element->GetInput(HydrologyRheologyBBaseEnum); _assert_(B_input); 260 Input* n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input); 259 261 260 262 /* Start looping on the number of gaussian points: */ … … 275 277 b_input->GetInputValue(&b,gauss); 276 278 H_input->GetInputValue(&H,gauss); 277 278 /*Hard code B*/279 B = Cuffey(273.15-2);280 279 281 280 /*Get norm of gradient of hydraulic potential and make sure it is >0*/ … … 364 363 IssmDouble g = element->FindParam(ConstantsGEnum); 365 364 IssmDouble e_v = element->FindParam(HydrologyEnglacialVoidRatioEnum); 366 Input* hr_input = element->GetInput(HydrologyBumpHeightEnum); _assert_(hr_input);367 Input* h_input = element->GetInput(HydrologySheetThicknessEnum); _assert_(h_input);368 Input* H_input = element->GetInput(ThicknessEnum); _assert_(H_input);369 Input* b_input = element->GetInput(BedEnum); _assert_(b_input);370 Input* G_input = element->GetInput(BasalforcingsGeothermalfluxEnum); _assert_(G_input);365 Input* hr_input = element->GetInput(HydrologyBumpHeightEnum); _assert_(hr_input); 366 Input* h_input = element->GetInput(HydrologySheetThicknessEnum); _assert_(h_input); 367 Input* H_input = element->GetInput(ThicknessEnum); _assert_(H_input); 368 Input* b_input = element->GetInput(BedEnum); _assert_(b_input); 369 Input* G_input = element->GetInput(BasalforcingsGeothermalfluxEnum); _assert_(G_input); 371 370 Input* melt_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum);_assert_(melt_input); 372 371 Input* RO_input = NULL; 373 Input* B_input = element->GetInput( MaterialsRheologyBEnum);_assert_(B_input);374 Input* n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);375 Input* phiold_input = element->GetInput(HydraulicPotentialOldEnum); _assert_(phiold_input);376 Input* phi_input = element->GetInput(HydraulicPotentialEnum); _assert_(phi_input);372 Input* B_input = element->GetInput(HydrologyRheologyBBaseEnum); _assert_(B_input); 373 Input* n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input); 374 Input* phiold_input = element->GetInput(HydraulicPotentialOldEnum); _assert_(phiold_input); 375 Input* phi_input = element->GetInput(HydraulicPotentialEnum); _assert_(phi_input); 377 376 378 377 /*Build friction element, needed later: */ … … 397 396 melt_input->GetInputValue(&melt,gauss); 398 397 399 /*Hard code B*/400 B = Cuffey(273.15-2);401 402 398 /*Get basal velocity*/ 403 399 friction->GetBasalSlidingSpeeds(&vx, &vy ,gauss); … … 457 453 element->InputUpdateFromSolutionOneDof(solution,HydraulicPotentialEnum); 458 454 459 /*Compute Hydrology Vx and Vy for time stepping purposes (These inputs do not affect GlaDS)*/455 /*Compute Hydrology Vx and Vy for time stepping purposes, and Sheet Discharge as an optional output (These inputs do not affect GlaDS)*/ 460 456 461 457 /*Intermediaries*/ 462 458 IssmDouble dphi[3],h,k,phi; 463 459 IssmDouble h_r; 464 460 IssmDouble oceanLS,iceLS; 465 461 IssmDouble* xyz_list = NULL; … … 468 464 int numvertices = element->GetNumberOfVertices(); 469 465 470 /*Initialize new sheet thickness*/466 /*Initialize water sheet velocity and discharge*/ 471 467 IssmDouble* vx = xNew<IssmDouble>(numvertices); 472 468 IssmDouble* vy = xNew<IssmDouble>(numvertices); 469 IssmDouble* d = xNew<IssmDouble>(numvertices); 473 470 474 471 /*Set to 0 if inactive element*/ … … 476 473 for(int iv=0;iv<numvertices;iv++) vx[iv] = 0.; 477 474 for(int iv=0;iv<numvertices;iv++) vy[iv] = 0.; 475 for(int iv=0;iv<numvertices;iv++) d[iv] = 0.; 478 476 element->AddInput(HydrologyWaterVxEnum,vx,P1DGEnum); 479 477 element->AddInput(HydrologyWaterVyEnum,vy,P1DGEnum); 478 element->AddInput(HydrologySheetDischargeEnum,d,P1DGEnum); 480 479 xDelete<IssmDouble>(vx); 481 480 xDelete<IssmDouble>(vy); 481 xDelete<IssmDouble>(d); 482 482 return; 483 483 } … … 499 499 Input *iceLS_input = element->GetInput(MaskIceLevelsetEnum); _assert_(iceLS_input); 500 500 501 /* Start 501 /* Start looping on the number of gaussian points: */ 502 502 Gauss* gauss=element->NewGauss(); 503 503 for(int iv=0;iv<numvertices;iv++){ … … 508 508 phi_input->GetInputValue(&phi,gauss); 509 509 h_input->GetInputValue(&h,gauss); 510 510 hr_input->GetInputValue(&h_r,gauss); 511 511 k_input->GetInputValue(&k,gauss); 512 512 oceanLS_input->GetInputValue(&oceanLS,gauss); 513 513 iceLS_input->GetInputValue(&iceLS,gauss); 514 514 515 /*Set sheet thicknessto zero if floating or no ice*/515 /*Set to zero if floating or no ice*/ 516 516 if(oceanLS<0. || iceLS>0.){ 517 517 vx[iv] = 0.; 518 518 vy[iv] = 0.; 519 d[iv] = 0.; 519 520 } 520 521 else{ … … 526 527 /*If omega is zero, use standard model, otherwise transition model*/ 527 528 IssmDouble nu = mu_water/rho_water; 528 IssmDouble coeff; 529 if(istransition==1 && omega>=AEPS){ 530 IssmDouble hratio = fabs(h/h_r); 531 IssmDouble coarg = 1. + 4.*pow(hratio,3-2*alpha)*omega*k*pow(h,3)*normgradphi/nu; 532 coeff = nu/2./omega*pow(hratio,2*alpha-3) * (-1 + pow(coarg, 0.5))/normgradphi/max(AEPS,h); // divide by h to get speed instead of discharge 533 } 534 else { 535 coeff = k*pow(h,alpha)*pow(normgradphi,beta-2.)/max(AEPS,h); // divide by h to get speed instead of discharge 536 } 537 538 539 vx[iv] = -coeff*dphi[0]; 540 vy[iv] = -coeff*dphi[1]; 529 IssmDouble coeff; 530 if(istransition==1 && omega>=AEPS){ 531 IssmDouble hratio = fabs(h/h_r); 532 IssmDouble coarg = 1. + 4.*pow(hratio,3-2*alpha)*omega*k*pow(h,3)*normgradphi/nu; 533 coeff = nu/2./omega*pow(hratio,2*alpha-3) * (-1 + pow(coarg, 0.5))/normgradphi; // coeff gives discharge; divide by h to get speed instead of discharge 534 } 535 else { 536 coeff = k*pow(h,alpha)*pow(normgradphi,beta-2.); // coeff gives discharge; divide by h to get speed instead of discharge 537 } 538 539 vx[iv] = -coeff/max(AEPS,h)*dphi[0]; 540 vy[iv] = -coeff/max(AEPS,h)*dphi[1]; 541 542 d[iv] = coeff*normgradphi; 541 543 } 542 544 } … … 544 546 element->AddInput(HydrologyWaterVxEnum,vx,P1DGEnum); 545 547 element->AddInput(HydrologyWaterVyEnum,vy,P1DGEnum); 548 element->AddInput(HydrologySheetDischargeEnum,d,P1DGEnum); 546 549 547 550 /*Clean up and return*/ … … 549 552 xDelete<IssmDouble>(vx); 550 553 xDelete<IssmDouble>(vy); 554 xDelete<IssmDouble>(d); 551 555 delete gauss; 552 556 }/*}}}*/ … … 646 650 IssmDouble rho_water = element->FindParam(MaterialsRhoFreshwaterEnum); 647 651 IssmDouble g = element->FindParam(ConstantsGEnum); 648 Input* hr_input = element->GetInput(HydrologyBumpHeightEnum); _assert_(hr_input);649 Input* vx_input = element->GetInput(VxBaseEnum); _assert_(vx_input);650 Input* vy_input = element->GetInput(VyBaseEnum); _assert_(vy_input);651 Input* H_input = element->GetInput(ThicknessEnum);_assert_(H_input);652 Input* b_input = element->GetInput(BedEnum);_assert_(b_input);653 Input* hold_input 654 Input* B_input = element->GetInput(MaterialsRheologyBEnum);_assert_(B_input);655 Input* n_input = element->GetInput(MaterialsRheologyNEnum);_assert_(n_input);652 Input* hr_input = element->GetInput(HydrologyBumpHeightEnum); _assert_(hr_input); 653 Input* vx_input = element->GetInput(VxBaseEnum); _assert_(vx_input); 654 Input* vy_input = element->GetInput(VyBaseEnum); _assert_(vy_input); 655 Input* H_input = element->GetInput(ThicknessEnum); _assert_(H_input); 656 Input* b_input = element->GetInput(BedEnum); _assert_(b_input); 657 Input* hold_input = element->GetInput(HydrologySheetThicknessOldEnum);_assert_(hold_input); 658 Input* B_input = element->GetInput(HydrologyRheologyBBaseEnum); _assert_(B_input); 659 Input* n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input); 656 660 Input* phi_input = element->GetInput(HydraulicPotentialEnum); _assert_(phi_input); 657 Input* oceanLS_input = element->GetInput(MaskOceanLevelsetEnum); _assert_(oceanLS_input); 658 Input* iceLS_input = element->GetInput(MaskIceLevelsetEnum); _assert_(iceLS_input); 659 661 Input* oceanLS_input = element->GetInput(MaskOceanLevelsetEnum); _assert_(oceanLS_input); 662 Input* iceLS_input = element->GetInput(MaskIceLevelsetEnum); _assert_(iceLS_input); 660 663 661 664 /* Start looping on the number of gaussian points: */ … … 677 680 iceLS_input->GetInputValue(&iceLS,gauss); 678 681 679 /*Hard code B*/680 B = Cuffey(273.15-2);681 682 682 /*Set sheet thickness to zero if floating or no ice*/ 683 683 if(oceanLS<0. || iceLS>0.){
Note:
See TracChangeset
for help on using the changeset viewer.