Changeset 24117


Ignore:
Timestamp:
08/05/19 09:38:22 (6 years ago)
Author:
tsantos
Message:

CHG: extending subelement melt parameterizations to discontinuous Galerkin formulation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp

    r24097 r24117  
    694694
    695695        /*Intermediaries */
     696        int melt_style, point1;
     697        bool mainlyfloating;
     698        IssmDouble  fraction1,fraction2,gllevelset;
    696699        IssmDouble  Jdet,dt;
    697700        IssmDouble  ms,mb,gmb,fmb,thickness,phi=1.;
     
    708711        element->GetVerticesCoordinates(&xyz_list);
    709712        element->FindParam(&dt,TimesteppingTimeStepEnum);
     713        element->FindParam(&melt_style,GroundinglineMeltInterpolationEnum);
    710714        Input* gmb_input        = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input);
    711715        Input* fmb_input        = element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input);
     
    714718        Input* thickness_input  = element->GetInput(ThicknessEnum);                           _assert_(thickness_input);
    715719
     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
    716731        /* Start  looping on the number of gaussian points: */
    717         Gauss* gauss=element->NewGauss(2);
    718732        for(int ig=gauss->begin();ig<gauss->end();ig++){
    719733                gauss->GaussPoint(ig);
     
    725739                gmb_input->GetInputValue(&gmb,gauss);
    726740                fmb_input->GetInputValue(&fmb,gauss);
    727                 gllevelset_input->GetInputValue(&phi,gauss);
     741                gllevelset_input->GetInputValue(&gllevelset,gauss);
    728742                thickness_input->GetInputValue(&thickness,gauss);
    729743
    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");
    732761
    733762                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.