Changeset 21436
- Timestamp:
- 12/09/16 06:03:42 (8 years ago)
- Location:
- issm/trunk-jpl/src/c/analyses
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
r21434 r21436 207 207 /* Intermediaries */ 208 208 IssmDouble D_scalar,Jdet,dt; 209 IssmDouble epl_thickness;210 209 IssmDouble transfer; 210 IssmDouble epl_transmitivity; 211 IssmDouble epl_storing; 211 212 IssmDouble *xyz_list = NULL; 212 213 … … 225 226 226 227 Input* epl_thick_input = basalelement->GetInput(HydrologydcEplThicknessEnum); _assert_(epl_thick_input); 227 Input* sed_head_input = basalelement->GetInput(SedimentHeadEnum); 228 Input* epl_head_input = basalelement->GetInput(EplHeadEnum); 229 Input* thick_input = basalelement->GetInput(ThicknessEnum); 230 Input* base_input = basalelement->GetInput(BaseEnum); 231 232 IssmDouble epl_specificstoring = EplSpecificStoring(basalelement); 233 IssmDouble epl_conductivity = basalelement->GetMaterialParameter(HydrologydcEplConductivityEnum); 228 Input* epl_head_input = basalelement->GetInput(EplHeadEnum); _assert_(epl_head_input); 229 Input* base_input = basalelement->GetInput(BaseEnum); _assert_(base_input); 234 230 235 231 /* Start looping on the number of gaussian points: */ 236 Gauss* gauss =basalelement->NewGauss(2);232 Gauss* gauss = basalelement->NewGauss(2); 237 233 for(int ig=gauss->begin();ig<gauss->end();ig++){ 238 234 gauss ->GaussPoint(ig); 239 235 basalelement ->JacobianDeterminant(&Jdet,xyz_list,gauss); 240 epl_thick_input ->GetInputValue(&epl_thickness,gauss); 236 237 epl_transmitivity = EplTransmitivity(basalelement,gauss,epl_head_input,epl_thick_input,base_input); 238 epl_storing = EplStoring(basalelement,gauss,epl_head_input,epl_thick_input,base_input); 241 239 242 240 /*Diffusivity*/ 243 D_scalar=epl_ conductivity*epl_thickness*gauss->weight*Jdet;241 D_scalar=epl_transmitivity*gauss->weight*Jdet; 244 242 if(dt!=0.) D_scalar=D_scalar*dt; 245 243 D[0][0]=D_scalar; … … 254 252 if(dt!=0.){ 255 253 basalelement->NodalFunctions(&basis[0],gauss); 256 D_scalar=epl_s pecificstoring*epl_thickness*gauss->weight*Jdet;254 D_scalar=epl_storing*gauss->weight*Jdet; 257 255 TripleMultiply(basis,numnodes,1,0, 258 256 &D_scalar,1,1,0, … … 262 260 263 261 /*Transfer EPL part*/ 264 transfer=GetHydrologyKMatrixTransfer(basalelement ,gauss,sed_head_input,epl_head_input,thick_input,base_input);262 transfer=GetHydrologyKMatrixTransfer(basalelement); 265 263 D_scalar=dt*transfer*gauss->weight*Jdet; 266 264 TripleMultiply(basis,numnodes,1,0, … … 314 312 IssmDouble dt,scalar,water_head; 315 313 IssmDouble water_load,transfer; 316 IssmDouble epl_ thickness;314 IssmDouble epl_storing; 317 315 IssmDouble Jdet; 318 316 IssmDouble residual,connectivity; … … 334 332 335 333 Input* epl_thick_input = basalelement->GetInput(HydrologydcEplThicknessEnum); _assert_(epl_thick_input); 336 Input* sed_head_input = basalelement->GetInput(SedimentHeadEnum); 337 Input* epl_head_input = basalelement->GetInput(EplHeadEnum); 338 Input* thick_input = basalelement->GetInput(ThicknessEnum); 339 Input* base_input = basalelement->GetInput(BaseEnum); 334 Input* sed_head_input = basalelement->GetInput(SedimentHeadEnum); _assert_(sed_head_input); 335 Input* epl_head_input = basalelement->GetInput(EplHeadEnum); _assert_(epl_head_input); 340 336 Input* water_input = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(water_input); 341 Input* residual_input = basalelement->GetInput(SedimentHeadResidualEnum); _assert_(residual_input); 342 if(dt!= 0.){old_wh_input = basalelement->GetInput(EplHeadOldEnum); _assert_(old_wh_input);} 343 344 IssmDouble epl_specificstoring = EplSpecificStoring(basalelement); 345 337 Input* residual_input = basalelement->GetInput(SedimentHeadResidualEnum); _assert_(residual_input); 338 Input* base_input = basalelement->GetInput(BaseEnum); _assert_(base_input); 339 340 if(dt!= 0.){ 341 old_wh_input = basalelement->GetInput(EplHeadOldEnum); _assert_(old_wh_input); 342 } 346 343 /* Start looping on the number of gaussian points: */ 347 Gauss* gauss =basalelement->NewGauss(2);344 Gauss* gauss = basalelement->NewGauss(2); 348 345 for(int ig=gauss->begin();ig<gauss->end();ig++){ 349 346 gauss->GaussPoint(ig); … … 351 348 basalelement ->NodalFunctions(basis,gauss); 352 349 350 epl_storing = EplStoring(basalelement,gauss,epl_head_input,epl_thick_input,base_input); 353 351 /*Loading term*/ 354 352 water_input->GetInputValue(&water_load,gauss); … … 362 360 if(dt!=0.){ 363 361 old_wh_input ->GetInputValue(&water_head,gauss); 364 epl_thick_input ->GetInputValue(&epl_thickness,gauss);365 362 366 363 /*Dealing with the epl part of the transfer term*/ 367 transfer=GetHydrologyPVectorTransfer(basalelement,gauss,sed_head_input ,epl_head_input,thick_input,base_input);368 scalar = Jdet*gauss->weight*((water_head*epl_s pecificstoring*epl_thickness)+(dt*transfer));364 transfer=GetHydrologyPVectorTransfer(basalelement,gauss,sed_head_input); 365 scalar = Jdet*gauss->weight*((water_head*epl_storing)+(dt*transfer)); 369 366 for(int i=0;i<numnodes;i++)pe->values[i]+=scalar*basis[i]; 370 367 } … … 458 455 459 456 /*Intermediaries*/ 460 IssmDouble HydrologyDCEfficientAnalysis::EplSpecificStoring(Element* element){/*{{{*/ 461 IssmDouble rho_freshwater = element->GetMaterialParameter(MaterialsRhoFreshwaterEnum); 462 IssmDouble g = element->GetMaterialParameter(ConstantsGEnum); 463 IssmDouble epl_porosity = element->GetMaterialParameter(HydrologydcEplPorosityEnum); 464 IssmDouble epl_compressibility = element->GetMaterialParameter(HydrologydcEplCompressibilityEnum); 465 IssmDouble water_compressibility = element->GetMaterialParameter(HydrologydcWaterCompressibilityEnum); 466 return rho_freshwater*g*epl_porosity*(water_compressibility+(epl_compressibility/epl_porosity)); 467 }/*}}}*/ 468 469 IssmDouble HydrologyDCEfficientAnalysis::SedimentStoring(Element* element){/*{{{*/ 470 IssmDouble rho_freshwater = element->GetMaterialParameter(MaterialsRhoFreshwaterEnum); 471 IssmDouble g = element->GetMaterialParameter(ConstantsGEnum); 472 IssmDouble sediment_porosity = element->GetMaterialParameter(HydrologydcSedimentPorosityEnum); 473 IssmDouble sediment_thickness = element->GetMaterialParameter(HydrologydcSedimentThicknessEnum); 474 IssmDouble sediment_compressibility = element->GetMaterialParameter(HydrologydcSedimentCompressibilityEnum); 475 IssmDouble water_compressibility = element->GetMaterialParameter(HydrologydcWaterCompressibilityEnum); 476 return rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity)); 477 }/*}}}*/ 478 479 IssmDouble HydrologyDCEfficientAnalysis::GetHydrologyKMatrixTransfer(Element* element, Gauss* gauss, Input* sed_head_input, Input* epl_head_input, Input* thick_input, Input* base_input){/*{{{*/ 457 IssmDouble HydrologyDCEfficientAnalysis::GetHydrologyKMatrixTransfer(Element* element){/*{{{*/ 480 458 481 459 int transfermethod; … … 483 461 484 462 element->FindParam(&transfermethod,HydrologydcTransferFlagEnum); 485 486 463 /*Switch between the different transfer methods cases*/ 487 464 switch(transfermethod){ … … 500 477 }/*}}}*/ 501 478 502 IssmDouble HydrologyDCEfficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* sed_head_input , Input* epl_head_input, Input* thick_input, Input* base_input){/*{{{*/479 IssmDouble HydrologyDCEfficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* sed_head_input){/*{{{*/ 503 480 504 481 int transfermethod; … … 507 484 508 485 element->FindParam(&transfermethod,HydrologydcTransferFlagEnum); 509 510 486 /*Switch between the different transfer methods cases*/ 511 487 switch(transfermethod){ … … 537 513 538 514 femmodel->parameters->FindParam(&domaintype,DomainTypeEnum); 515 femmodel->parameters->FindParam(&iseplthickcomp,HydrologydcEplThickCompEnum); 516 if(iseplthickcomp==0) return; 539 517 540 518 for(int j=0;j<femmodel->elements->Size();j++){ 541 519 542 520 Element* element=(Element*)femmodel->elements->GetObjectByOffset(j); 543 element->parameters->FindParam(&iseplthickcomp,HydrologydcEplThickCompEnum);544 if(iseplthickcomp==0) return;521 /* element->parameters->FindParam(&iseplthickcomp,HydrologydcEplThickCompEnum); */ 522 /* if(iseplthickcomp==0) return; */ 545 523 546 524 switch(domaintype){ … … 738 716 } 739 717 /*}}}*/ 740 741 void HydrologyDCEfficientAnalysis::HydrologyEPLGetActive(Vector<IssmDouble>* active_vec, Element* element){ 718 IssmDouble HydrologyDCEfficientAnalysis::EplStoring(Element* element,Gauss* gauss, Input* epl_head_input, Input* epl_thick_input, Input* base_input){/*{{{*/ 719 IssmDouble epl_storing; 720 IssmDouble storing,water_sheet; 721 IssmDouble base_elev,prestep_head,epl_thick; 722 IssmDouble rho_freshwater = element->GetMaterialParameter(MaterialsRhoFreshwaterEnum); 723 IssmDouble g = element->GetMaterialParameter(ConstantsGEnum); 724 IssmDouble epl_porosity = element->GetMaterialParameter(HydrologydcEplPorosityEnum); 725 IssmDouble epl_compressibility = element->GetMaterialParameter(HydrologydcEplCompressibilityEnum); 726 IssmDouble water_compressibility = element->GetMaterialParameter(HydrologydcWaterCompressibilityEnum); 727 728 base_input->GetInputValue(&base_elev,gauss); 729 epl_head_input->GetInputValue(&prestep_head,gauss); 730 epl_thick_input->GetInputValue(&epl_thick,gauss); 731 732 water_sheet=max(0.0,(prestep_head-base_elev)); 733 734 storing=rho_freshwater*g*epl_porosity*epl_thick*(water_compressibility+(epl_compressibility/epl_porosity)); 735 //porosity for unconfined region 736 if (water_sheet<=0.9*epl_thick){ 737 epl_storing=epl_porosity; 738 } 739 //continuity ramp 740 else if((water_sheet<epl_thick) && (water_sheet>0.9*epl_thick)){ 741 epl_storing=(epl_thick-water_sheet)*(epl_porosity-storing)/(0.1*epl_thick)+storing; 742 } 743 //storing coefficient for confined 744 else{ 745 epl_storing=storing; 746 } 747 return epl_storing; 748 }/*}}}*/ 749 750 IssmDouble HydrologyDCEfficientAnalysis::EplTransmitivity(Element* element,Gauss* gauss, Input* epl_head_input, Input* epl_thick_input, Input* base_input){/*{{{*/ 751 IssmDouble epl_transmitivity; 752 IssmDouble base_elev,prestep_head,epl_thick; 753 IssmDouble water_sheet; 754 IssmDouble epl_conductivity = element->GetMaterialParameter(HydrologydcEplConductivityEnum); 755 base_input->GetInputValue(&base_elev,gauss); 756 epl_head_input->GetInputValue(&prestep_head,gauss); 757 epl_thick_input->GetInputValue(&epl_thick,gauss); 758 759 water_sheet=max(0.0,(prestep_head-base_elev)); 760 epl_transmitivity=epl_conductivity*min(water_sheet,epl_thick); 761 762 return epl_transmitivity; 763 }/*}}}*/ 764 765 void HydrologyDCEfficientAnalysis::HydrologyEPLGetActive(Vector<IssmDouble>* active_vec, Element* element){/*{{{*/ 742 766 /*Constants*/ 743 767 int domaintype; … … 787 811 xDelete<IssmDouble>(active); 788 812 } 813 /*}}}*/ 789 814 790 815 void HydrologyDCEfficientAnalysis::GetHydrologyDCInefficientHmax(IssmDouble* ph_max,Element* element, Node* innode){/*{{{*/ -
issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h
r19091 r21436 36 36 /*Intermediaries*/ 37 37 void GetB(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss); 38 IssmDouble EplSpecificStoring(Element* element);39 IssmDouble SedimentStoring(Element* element);40 IssmDouble GetHydrologyKMatrixTransfer(Element* element, Gauss* gauss, Input* sed_head_input, Input* epl_head_input, Input*thick_input, Input* base_input);41 IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* sed_head_input, Input* epl_head_input, Input*thick_input, Input* base_input);38 IssmDouble GetHydrologyKMatrixTransfer(Element* element); 39 IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* sed_head_input); 40 IssmDouble EplStoring(Element* element,Gauss* gauss, Input* epl_head_input, Input* epl_thick_input, Input* base_input); 41 IssmDouble EplTransmitivity(Element* element,Gauss* gauss, Input* epl_head_input, Input* epl_thick_input, Input* base_input); 42 42 void HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask, Vector<IssmDouble>* recurence, int* eplzigzag_counter, Element* element); 43 43 void HydrologyEPLGetActive(Vector<IssmDouble>* active_vec, Element* element); -
issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
r21433 r21436 191 191 IssmDouble D_scalar,Jdet,dt; 192 192 IssmDouble sediment_transmitivity; 193 IssmDouble base_elev;194 193 IssmDouble transfer,sediment_storing; 195 194 IssmDouble *xyz_list = NULL; … … 213 212 Input* SedTrans_input = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input); 214 213 Input* sed_head_input = basalelement->GetInput(SedimentHeadEnum); 215 Input* epl_head_input = basalelement->GetInput(EplHeadEnum);216 Input* thick_input = basalelement->GetInput(ThicknessEnum);217 214 Input* base_input = basalelement->GetInput(BaseEnum); 218 215 … … 255 252 active_element_input->GetInputValue(&active_element); 256 253 if(active_element){ 257 transfer=GetHydrologyKMatrixTransfer(basalelement ,gauss,sed_head_input,epl_head_input,thick_input,base_input);254 transfer=GetHydrologyKMatrixTransfer(basalelement); 258 255 basalelement->NodalFunctions(&basis[0],gauss); 259 256 D_scalar=dt*transfer*gauss->weight*Jdet; … … 319 316 Input* sed_head_input = basalelement->GetInput(SedimentHeadEnum); 320 317 Input* epl_head_input = basalelement->GetInput(EplHeadEnum); 321 Input* thick_input = basalelement->GetInput(ThicknessEnum);322 318 Input* base_input = basalelement->GetInput(BaseEnum); 323 319 Input* water_input = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(water_input); 324 if(dt!= 0.){old_wh_input = basalelement->GetInput(SedimentHeadOldEnum); _assert_(old_wh_input);} 320 if(dt!= 0.){ 321 old_wh_input = basalelement->GetInput(SedimentHeadOldEnum); _assert_(old_wh_input); 322 } 325 323 /*Transfer related Inputs*/ 326 324 if(isefficientlayer){ … … 365 363 active_element_input->GetInputValue(&active_element); 366 364 if(active_element){ 367 transfer=GetHydrologyPVectorTransfer(basalelement,gauss, sed_head_input,epl_head_input,thick_input,base_input);365 transfer=GetHydrologyPVectorTransfer(basalelement,gauss,epl_head_input); 368 366 } 369 367 else{ … … 514 512 }/*}}}*/ 515 513 516 /*Intermediaries*/517 514 IssmDouble HydrologyDCInefficientAnalysis::SedimentStoring(Element* element,Gauss* gauss,Input* sed_head_input, Input* base_input){/*{{{*/ 518 515 IssmDouble sediment_storing; 519 IssmDouble s pecific_porosity;516 IssmDouble storing; 520 517 IssmDouble base_elev,prestep_head,water_sheet; 521 518 IssmDouble rho_freshwater = element->GetMaterialParameter(MaterialsRhoFreshwaterEnum); … … 528 525 sed_head_input->GetInputValue(&prestep_head,gauss); 529 526 water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness))); 530 s pecific_porosity=sediment_porosity-rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity));527 storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity)); 531 528 //porosity for unconfined region 532 529 if (water_sheet<=0.9*sediment_thickness){ … … 535 532 //continuity ramp 536 533 else if((water_sheet<sediment_thickness) && (water_sheet>0.9*sediment_thickness)){ 537 sediment_storing=(sediment_thickness-water_sheet)*specific_porosity/(0.1*sediment_thickness)+ 538 rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity)); 534 sediment_storing=(sediment_thickness-water_sheet)*(sediment_porosity-storing)/(0.1*sediment_thickness)+storing; 539 535 } 540 536 //storing coefficient for confined 541 537 else{ 542 sediment_storing= rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity));538 sediment_storing=storing; 543 539 } 544 540 return sediment_storing; … … 561 557 } 562 558 return sediment_transmitivity; 563 }/*}}}*/564 565 IssmDouble HydrologyDCInefficientAnalysis::GetHydrologyDCInefficientHmax(Element* element, Gauss* gauss, Input* thick_input, Input* base_input){/*{{{*/566 int hmax_flag;567 IssmDouble h_max;568 IssmDouble rho_ice,rho_water;569 IssmDouble thickness,bed;570 /*Get the flag to the limitation method*/571 element->FindParam(&hmax_flag,HydrologydcSedimentlimitFlagEnum);572 573 /*Switch between the different cases*/574 switch(hmax_flag){575 case 0:576 h_max=1.0e+10;577 break;578 case 1:579 element->FindParam(&h_max,HydrologydcSedimentlimitEnum);580 break;581 case 2:582 rho_water = element->GetMaterialParameter(MaterialsRhoFreshwaterEnum);583 rho_ice = element->GetMaterialParameter(MaterialsRhoIceEnum);584 _assert_(thick_input);585 _assert_(base_input);586 /*Compute max*/587 thick_input->GetInputValue(&thickness,gauss);588 base_input->GetInputValue(&bed,gauss);589 h_max=((rho_ice*thickness)/rho_water)+bed;590 break;591 case 3:592 _error_("Using normal stress not supported yet");593 break;594 default:595 _error_("no case higher than 3 for SedimentlimitFlag");596 }597 return h_max;598 559 }/*}}}*/ 599 560 … … 634 595 /*}}}*/ 635 596 636 IssmDouble HydrologyDCInefficientAnalysis::GetHydrologyKMatrixTransfer(Element* element , Gauss* gauss, Input* sed_head_input, Input* epl_head_input, Input* thick_input, Input* base_input){/*{{{*/597 IssmDouble HydrologyDCInefficientAnalysis::GetHydrologyKMatrixTransfer(Element* element){/*{{{*/ 637 598 638 599 int transfermethod; … … 656 617 }/*}}}*/ 657 618 658 IssmDouble HydrologyDCInefficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* sed_head_input, Input* epl_head_input, Input* thick_input, Input* base_input){/*{{{*/619 IssmDouble HydrologyDCInefficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* epl_head_input){/*{{{*/ 659 620 660 621 int transfermethod; -
issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h
r21398 r21436 36 36 IssmDouble SedimentStoring(Element* element, Gauss* gauss, Input* sed_head_input, Input* base_input); 37 37 IssmDouble SedimentTransmitivity(Element* element,Gauss* gauss,Input* sed_head_input, Input* base_input,Input* SedTrans_input); 38 IssmDouble GetHydrologyDCInefficientHmax(Element* element, Gauss* gauss, Input* thickness_input, Input* base_input);39 38 void GetHydrologyDCInefficientHmax(IssmDouble* ph_max,Element* element, Node* innode); 40 IssmDouble GetHydrologyKMatrixTransfer(Element* element , Gauss* gauss, Input* sed_head_input, Input* epl_head_input, Input* thick_input, Input* base_input);41 IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* sed_head_input, Input* epl_head_input, Input* thick_input, Input* base_input);39 IssmDouble GetHydrologyKMatrixTransfer(Element* element); 40 IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* epl_head_input); 42 41 void ElementizeEplMask(FemModel* femmodel); 43 42 };
Note:
See TracChangeset
for help on using the changeset viewer.