Changeset 28115 for issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
- Timestamp:
- 02/29/24 15:22:20 (13 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
r27869 r28115 156 156 iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum); 157 157 iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum); 158 158 159 if(isgroundingline) iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum); 159 160 /*Initialize ThicknessResidual input*/ … … 272 273 parameters->AddObject(iomodel->CopyConstantObject("md.masstransport.min_thickness",MasstransportMinThicknessEnum)); 273 274 parameters->AddObject(iomodel->CopyConstantObject("md.masstransport.penalty_factor",MasstransportPenaltyFactorEnum)); 275 parameters->AddObject(iomodel->CopyConstantObject("md.groundingline.intrusion_distance",GroundinglineIntrusionDistanceEnum)); 274 276 275 277 iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.masstransport.requested_outputs"); … … 622 624 bool mainlyfloating; 623 625 IssmDouble fraction1,fraction2; 624 IssmDouble Jdet,dt ;625 IssmDouble ms,mb,gmb,fmb,thickness,fmb_pert ;626 IssmDouble Jdet,dt,intrusiondist; 627 IssmDouble ms,mb,gmb,fmb,thickness,fmb_pert,gldistance; 626 628 IssmDouble vx,vy,vel,dvxdx,dvydy,xi,h,tau; 627 629 IssmDouble dvx[2],dvy[2]; … … 652 654 element->FindParam(&dt,TimesteppingTimeStepEnum); 653 655 element->FindParam(&stabilization,MasstransportStabilizationEnum); 656 element->FindParam(&intrusiondist,GroundinglineIntrusionDistanceEnum); 657 654 658 Input* gmb_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input); 655 659 Input* fmb_input = element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input); … … 660 664 Input* vxaverage_input = element->GetInput(VxAverageEnum); _assert_(vxaverage_input); 661 665 Input* vyaverage_input = element->GetInput(VyAverageEnum); _assert_(vyaverage_input); 662 666 //Input* gldistance_input = element->GetInput(DistanceToGroundinglineEnum); _assert_(gldistance_input); 663 667 h=element->CharacteristicLength(); 664 668 … … 667 671 if(melt_style==SubelementMelt2Enum){ 668 672 element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating); 669 gauss = element->NewGauss(point1,fraction1,fraction2,3); 673 gauss = element->NewGauss(point1,fraction1,fraction2,3); 674 } 675 else if(melt_style==IntrusionMeltEnum){ 676 element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating); 677 gauss = element->NewGauss(point1,fraction1,fraction2,3); 670 678 } 671 679 else{ … … 704 712 else mb=gmb; 705 713 } 714 else if(melt_style==IntrusionMeltEnum){ 715 Input* gldistance_input = element->GetInput(DistanceToGroundinglineEnum); _assert_(gldistance_input); 716 gldistance_input->GetInputValue(&gldistance,gauss); 717 if (intrusiondist==0) 718 if(gllevelset>0.) mb=gmb; 719 else mb=fmb; 720 else if(gldistance>intrusiondist) 721 mb=gmb; 722 else if(gldistance<=intrusiondist && gldistance>0) 723 mb=fmb*(1-gldistance/intrusiondist); 724 else 725 mb=fmb; 726 } 706 727 else _error_("melt interpolation "<<EnumToStringx(melt_style)<<" not implemented yet"); 707 728 … … 750 771 bool mainlyfloating; 751 772 IssmDouble fraction1,fraction2,gllevelset; 752 IssmDouble Jdet,dt ;753 IssmDouble ms,mb,gmb,fmb,thickness,phi=1. ;773 IssmDouble Jdet,dt,intrusiondist; 774 IssmDouble ms,mb,gmb,fmb,thickness,phi=1.,gldistance; 754 775 IssmDouble* xyz_list = NULL; 755 776 … … 765 786 element->FindParam(&dt,TimesteppingTimeStepEnum); 766 787 element->FindParam(&melt_style,GroundinglineMeltInterpolationEnum); 788 element->FindParam(&intrusiondist,GroundinglineIntrusionDistanceEnum); 789 767 790 Input* gmb_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input); 768 791 Input* fmb_input = element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input); … … 778 801 gauss = element->NewGauss(point1,fraction1,fraction2,3); 779 802 } 803 else if(melt_style==IntrusionMeltEnum){ 804 element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating); 805 gauss = element->NewGauss(point1,fraction1,fraction2,3); 806 } 780 807 else{ 781 808 gauss = element->NewGauss(3); … … 798 825 else mb=(1-phi)*fmb+phi*gmb; // phi is the fraction of grounded ice so (1-phi) is floating 799 826 } 800 else if(melt_style==SubelementMelt2Enum){827 else if(melt_style==SubelementMelt2Enum){ 801 828 if(gllevelset>0.) mb=gmb; 802 829 else mb=fmb; 803 830 } 804 else if(melt_style==NoMeltOnPartiallyFloatingEnum){831 else if(melt_style==NoMeltOnPartiallyFloatingEnum){ 805 832 if (phi<0.00000001) mb=fmb; 806 833 else mb=gmb; 807 834 } 808 else if(melt_style==FullMeltOnPartiallyFloatingEnum){835 else if(melt_style==FullMeltOnPartiallyFloatingEnum){ 809 836 if (phi<0.99999999) mb=fmb; 810 837 else mb=gmb; 811 } 812 else _error_("melt interpolation "<<EnumToStringx(melt_style)<<" not implemented yet"); 838 } 839 else if(melt_style==IntrusionMeltEnum){ 840 Input* gldistance_input = element->GetInput(DistanceToGroundinglineEnum); _assert_(gldistance_input); 841 gldistance_input->GetInputValue(&gldistance,gauss); 842 if (intrusiondist==0) 843 if(gllevelset>0.) mb=gmb; 844 else mb=fmb; 845 else if(gldistance>intrusiondist) 846 mb=gmb; 847 else if(gldistance<=intrusiondist && gldistance>0) 848 mb=fmb*(1-gldistance/intrusiondist); 849 else 850 mb=fmb; 851 } 852 else _error_("melt interpolation "<<EnumToStringx(melt_style)<<" not implemented yet"); 813 853 814 854 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.