- Timestamp:
- 01/02/23 00:15:34 (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp
r27466 r27491 522 522 IssmDouble AccG=0.1; // m w.e. /100m 523 523 IssmDouble AccMax=1.; // m w.e. 524 IssmDouble ReferenceElevation =2200.; // m M&L524 IssmDouble ReferenceElevation; 525 525 IssmDouble AblationDays=120.; // 526 526 … … 537 537 IssmDouble Alphad=0.07; // debris albedo 0.07 538 538 IssmDouble Alphai=0.4; // ice ablbedo 539 IssmDouble Alphaeff; 539 540 IssmDouble Ustar=0.16; // ms^-1 friction velocity 0.16 540 541 IssmDouble Ca=1000.; // jkg^-1K^-1 specific heat capacity of air … … 552 553 IssmDouble smb,yts,z,debris; 553 554 IssmDouble MassBalanceCmDayDebris,MassBalanceMYearDebris; 555 bool isdebris; 556 int domaintype; 557 femmodel->parameters->FindParam(&isdebris,TransientIsdebrisEnum); 554 558 555 559 /*Get material parameters and constants */ … … 558 562 femmodel->parameters->FindParam(&yts,ConstantsYtsEnum); 559 563 PhiD=0.; 560 //if(isdebris) femmodel->parameters->FindParam(&PhiD,DebrisPackingFractionEnum);564 if(isdebris) femmodel->parameters->FindParam(&PhiD,DebrisPackingFractionEnum); 561 565 562 566 /* Loop over all the elements of this partition */ … … 573 577 /* Get inputs */ 574 578 element->GetInputListOnVertices(debriscover,DebrisThicknessEnum); 579 element->FindParam(&domaintype,DomainTypeEnum); 575 580 576 581 /*Loop over all vertices of element and calculate SMB as function of Debris Cover and z */ 577 582 for(int v=0;v<numvertices;v++){ 578 583 579 /*Get vertex elevation */ 580 z=surfacelist[v]; 581 582 /* Get debris cover */ 583 debris=debriscover[v]; 584 585 /*IssmDouble dk=1e-5; // TODO make Alphad and Alphai a user input 586 IssmDouble n=debris/dk; 587 IssmDouble nmax=1000; 588 IssmDouble Alphaeff; 589 if(n>nmax){ 590 Alphaeff=Alphad; 591 } else { 592 Alphaeff=Alphai+n*(Alphad-Alphai)/nmax; 593 }*/ 594 595 // M&L 596 IssmDouble Alphaeff=Alphad; 597 598 /* compute smb */ 599 for (int ismb=0;ismb<2;ismb++){ 600 if(ismb==0){ 601 // calc a reference smb to identify accum and melt region; debris only develops in ablation area 602 debris=0.; 603 }else{ 604 // only in the meltregime debris develops 605 if(-MassBalanceCmDayDebris<0) debris=debriscover[v]; 606 } 607 MassBalanceCmDayDebris=(((In-(z-ReferenceElevation)*LW/100.)-(Eps*Sigma*(Tf*Tf*Tf*Tf))+ 608 (Q+(z-ReferenceElevation)*SW/100.)*(1.-Alphaeff)+ 609 (Rhoaa*Ca*Ustar*Ustar)/((Um-(z-ReferenceElevation)* 610 WindSpeed/100.)-Ustar*(2.-(exp(Gamma*Xr))))*(Tm-(z- 611 ReferenceElevation)*AirTemp/100.))/((1-PhiD)*Rhoi*Lm)/(1.+ 612 ((Rhoaa*Ca*Ustar*Ustar)/((Um-(z-ReferenceElevation)* 613 WindSpeed/100.)-Ustar*(2.-(exp(Gamma*Xr))))+4.*Eps*Sigma*(Tf*Tf*Tf))/ 614 K*debris)-(Lv*Ustar*Ustar*(Qh-(Qh*(Humidity-(z- 615 ReferenceElevation)*HumidityG/100.)))*(exp(-Gamma*Xr)))/((1.-PhiD)* 616 Rhoi*Lm*Ustar)/((((Um-(z-ReferenceElevation)*WindSpeed/100.) 584 /*Get vertex elevation */ 585 z=surfacelist[v]; 586 587 /*Get top element*/ 588 //if(domaintype==Domain3DEnum){ 589 590 //}else{ 591 // Alphaeff=Alphad; 592 // ReferenceElevation=2200.; // m M&L 593 //} 594 595 /* compute smb */ 596 for (int ismb=0;ismb<2;ismb++){ 597 if(ismb==0){ 598 // calc a reference smb to identify accum and melt region; debris only develops in ablation area 599 debris=0.; 600 PhiD=0.; 601 }else{ 602 // only in the meltregime debris develops 603 if(-MassBalanceCmDayDebris<1e-14) debris=debriscover[v]; 604 } 605 if(debris<=0.) debris=0.; 606 IssmDouble dk=1e-5; // TODO make Alphad and Alphai a user input 607 IssmDouble n=debris/dk; 608 IssmDouble nmax=1000; 609 IssmDouble Alphaeff; 610 if(n>nmax){ 611 Alphaeff=Alphad; 612 } else { 613 Alphaeff=Alphai+n*(Alphad-Alphai)/nmax; 614 } 615 ReferenceElevation=3200.; // m HEF 616 617 618 Alphaeff=Alphad; 619 ReferenceElevation=2200.; // m M&L 620 621 MassBalanceCmDayDebris=(((In-(z-ReferenceElevation)*LW/100.)-(Eps*Sigma*(Tf*Tf*Tf*Tf))+ 622 (Q+(z-ReferenceElevation)*SW/100.)*(1.-Alphaeff)+ 623 (Rhoaa*Ca*Ustar*Ustar)/((Um-(z-ReferenceElevation)* 624 WindSpeed/100.)-Ustar*(2.-(exp(Gamma*Xr))))*(Tm-(z- 625 ReferenceElevation)*AirTemp/100.))/((1-PhiD)*Rhoi*Lm)/(1.+ 626 ((Rhoaa*Ca*Ustar*Ustar)/((Um-(z-ReferenceElevation)* 627 WindSpeed/100.)-Ustar*(2.-(exp(Gamma*Xr))))+4.*Eps*Sigma*(Tf*Tf*Tf))/ 628 K*debris)-(Lv*Ustar*Ustar*(Qh-(Qh*(Humidity-(z- 629 ReferenceElevation)*HumidityG/100.)))*(exp(-Gamma*Xr)))/((1.-PhiD)* 630 Rhoi*Lm*Ustar)/((((Um-(z-ReferenceElevation)*WindSpeed/100.) 617 631 -2.*Ustar)*exp(-Gamma*Xr))/Ustar+exp(Gamma*debris)))*100.*24.*60.*60.; 618 632 }
Note:
See TracChangeset
for help on using the changeset viewer.