Changeset 20719


Ignore:
Timestamp:
06/09/16 11:23:46 (9 years ago)
Author:
Mathieu Morlighem
Message:

NEW: finished implementation of calving criterion based on minimum thickness

Location:
issm/trunk-jpl/src/c
Files:
8 edited

Legend:

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

    r20718 r20719  
    198198                case DefaultCalvingEnum:
    199199                case CalvingDevEnum:
     200                case CalvingMinthicknessEnum:
    200201                        lsf_slopex_input  = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
    201202                        if(dim==2) lsf_slopey_input  = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
     
    251252                switch(calvinglaw){
    252253                        case DefaultCalvingEnum:
     254                        case CalvingDevEnum:
     255                        case CalvingMinthicknessEnum:
    253256                                lsf_slopex_input->GetInputValue(&dlsf[0],gauss);
    254257                                if(dim==2) lsf_slopey_input->GetInputValue(&dlsf[1],gauss);
     
    271274
    272275                        case CalvingLevermannEnum:
    273                         case CalvingDevEnum:
    274276                                calvingratex_input->GetInputValue(&c[0],gauss);
    275277                                if(dim==2) calvingratey_input->GetInputValue(&c[1],gauss);
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r20687 r20719  
    20772077                                        this->CalvingRateDev();
    20782078                                        break;
     2079                                case CalvingMinthicknessEnum:
     2080                                        this->CalvingRateMinthickness();
     2081                                        break;
    20792082                                default:
    20802083                                        _error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet");
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r20678 r20719  
    176176                virtual void        CalvingRateLevermann(void)=0;
    177177                virtual void       CalvingRateDev(void){_error_("not implemented yet");};
     178                virtual void       CalvingRateMinthickness(void){_error_("not implemented yet");};
    178179                virtual void       WriteLevelsetSegment(DataSet* segments){_error_("not implemented yet");};
    179180                virtual void       ResetLevelsetFromSegmentlist(IssmDouble* segments,int numsegments){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r20690 r20719  
    327327                calvingratey[iv]=vy*sigma_vm/sigma_max;
    328328                calvingrate[iv]=sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]);
     329        }
     330
     331        /*Add input*/
     332        this->inputs->AddInput(new TriaInput(CalvingratexEnum,&calvingratex[0],P1Enum));
     333        this->inputs->AddInput(new TriaInput(CalvingrateyEnum,&calvingratey[0],P1Enum));
     334        this->inputs->AddInput(new TriaInput(CalvingCalvingrateEnum,&calvingrate[0],P1Enum));
     335
     336        /*Clean up and return*/
     337        delete gauss;
     338}
     339/*}}}*/
     340void       Tria::CalvingRateMinthickness(){/*{{{*/
     341
     342        IssmDouble  calvingratex[NUMVERTICES];
     343        IssmDouble  calvingratey[NUMVERTICES];
     344        IssmDouble  calvingrate[NUMVERTICES];
     345        IssmDouble  vx,vy,H,minH;
     346
     347        /*Retrieve all inputs and parameters we will need*/
     348        Input* vx_input = inputs->GetInput(VxEnum); _assert_(vx_input);
     349        Input* vy_input = inputs->GetInput(VyEnum); _assert_(vy_input);
     350        Input* H_input  = inputs->GetInput(ThicknessEnum); _assert_(H_input);
     351        parameters->FindParam(&minH,CalvingMinthicknessEnum);
     352
     353        /* Start looping on the number of vertices: */
     354        GaussTria* gauss=new GaussTria();
     355        for(int iv=0;iv<NUMVERTICES;iv++){
     356                gauss->GaussVertex(iv);
     357
     358                /*Get velocity components and thickness*/
     359                vx_input->GetInputValue(&vx,gauss);
     360                vy_input->GetInputValue(&vy,gauss);
     361                H_input->GetInputValue(&H,gauss);
     362
     363                /*Assign values*/
     364                if(H>minH){
     365                        calvingratex[iv]=0.;
     366                        calvingratey[iv]=0.;
     367                        calvingrate[iv]=0.;
     368                }
     369                else{
     370                        calvingratex[iv]=vx+1e-2; //counter balance advance + add some retreat
     371                        calvingratey[iv]=vy+1e-2;
     372                        calvingrate[iv]=sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]);
     373                }
    329374        }
    330375
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r20461 r20719  
    5454                void                    CalvingRateLevermann();
    5555                void                    CalvingRateDev();
     56                void                    CalvingRateMinthickness();
    5657                void                    WriteLevelsetSegment(DataSet* segments);
    5758                void        ResetLevelsetFromSegmentlist(IssmDouble* segments,int numsegments);
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r20690 r20719  
    21662166}
    21672167/*}}}*/
     2168void FemModel::CalvingRateMinthicknessx(){/*{{{*/
     2169
     2170        for(int i=0;i<elements->Size();i++){
     2171                Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
     2172                element->CalvingRateMinthickness();
     2173        }
     2174}
     2175/*}}}*/
    21682176void FemModel::StrainRateparallelx(){/*{{{*/
    21692177
  • issm/trunk-jpl/src/c/classes/FemModel.h

    r20461 r20719  
    9595                void CalvingRateLevermannx();
    9696                void CalvingRateDevx();
     97                void CalvingRateMinthicknessx();
    9798                void ResetLevelset();
    9899                #ifdef  _HAVE_DAKOTA_
  • issm/trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp

    r20461 r20719  
    2727                        femmodel->ElementOperationx(&Element::CalvingRateDev);
    2828                        break;
     29                case CalvingMinthicknessEnum:
     30                        femmodel->CalvingRateMinthicknessx();
     31                        break;
    2932                default:
    3033                        _error_("Caving law "<<EnumToStringx(calvinglaw)<<" not supported yet");
Note: See TracChangeset for help on using the changeset viewer.