Changeset 24117
- Timestamp:
- 08/05/19 09:38:22 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
r24097 r24117 694 694 695 695 /*Intermediaries */ 696 int melt_style, point1; 697 bool mainlyfloating; 698 IssmDouble fraction1,fraction2,gllevelset; 696 699 IssmDouble Jdet,dt; 697 700 IssmDouble ms,mb,gmb,fmb,thickness,phi=1.; … … 708 711 element->GetVerticesCoordinates(&xyz_list); 709 712 element->FindParam(&dt,TimesteppingTimeStepEnum); 713 element->FindParam(&melt_style,GroundinglineMeltInterpolationEnum); 710 714 Input* gmb_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input); 711 715 Input* fmb_input = element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input); … … 714 718 Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input); 715 719 720 /*Recover portion of element that is grounded*/ 721 Gauss* gauss=NULL; 722 phi=element->GetGroundedPortion(xyz_list); 723 if(melt_style==SubelementMelt2Enum){ 724 element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating); 725 gauss = element->NewGauss(point1,fraction1,fraction2,3); 726 } 727 else{ 728 gauss = element->NewGauss(3); 729 } 730 716 731 /* Start looping on the number of gaussian points: */ 717 Gauss* gauss=element->NewGauss(2);718 732 for(int ig=gauss->begin();ig<gauss->end();ig++){ 719 733 gauss->GaussPoint(ig); … … 725 739 gmb_input->GetInputValue(&gmb,gauss); 726 740 fmb_input->GetInputValue(&fmb,gauss); 727 gllevelset_input->GetInputValue(& phi,gauss);741 gllevelset_input->GetInputValue(&gllevelset,gauss); 728 742 thickness_input->GetInputValue(&thickness,gauss); 729 743 730 if(phi>0.) mb=gmb; 731 else mb=fmb; 744 if(melt_style==SubelementMelt1Enum){ 745 if (phi>0.999999999) mb=gmb; 746 else mb=(1-phi)*fmb+phi*gmb; // phi is the fraction of grounded ice so (1-phi) is floating 747 } 748 else if(melt_style==SubelementMelt2Enum){ 749 if(gllevelset>0.) mb=gmb; 750 else mb=fmb; 751 } 752 else if(melt_style==NoMeltOnPartiallyFloatingEnum){ 753 if (phi<0.00000001) mb=fmb; 754 else mb=gmb; 755 } 756 else if(melt_style==FullMeltOnPartiallyFloatingEnum){ 757 if (phi<0.99999999) mb=fmb; 758 else mb=gmb; 759 } 760 else _error_("melt interpolation "<<EnumToStringx(melt_style)<<" not implemented yet"); 732 761 733 762 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(thickness+dt*(ms-mb))*basis[i];
Note:
See TracChangeset
for help on using the changeset viewer.