Changeset 24049


Ignore:
Timestamp:
Jun 26, 2019, 4:09:31 PM (7 years ago)
Author:
youngmc3
Message:

CHG: added CalvingMeltingFluxLevelset, TotalCalvingMeltingFluxLevelset

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r24048 r24049  
    32933293                        break;
    32943294                case CalvingFluxLevelsetEnum: this->CalvingFluxLevelset(); break;
     3295                case CalvingMeltingFluxLevelsetEnum: this->CalvingMeltingFluxLevelset(); break;
    32953296                case StrainRateparallelEnum: this->StrainRateparallel(); break;
    32963297                case StrainRateperpendicularEnum: this->StrainRateperpendicular(); break;
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r24048 r24049  
    209209                virtual void        CalvingRateLevermann(void)=0;
    210210                virtual void       CalvingFluxLevelset(void){_error_("not implemented yet");};
     211                virtual void       CalvingMeltingFluxLevelset(void){_error_("not implemented yet");};
    211212                virtual IssmDouble CharacteristicLength(void)=0;
    212213                virtual void       ComputeBasalStress(void){_error_("not implemented yet");};
    … …  
    323324                virtual IssmDouble TimeAdapt()=0;
    324325                virtual IssmDouble TotalCalvingFluxLevelset(bool scaled){_error_("not implemented");};
     326                virtual IssmDouble TotalCalvingMeltingFluxLevelset(bool scaled){_error_("not implemented");};
    325327                virtual IssmDouble TotalFloatingBmb(bool scaled)=0;
    326328                virtual IssmDouble TotalGroundedBmb(bool scaled)=0;
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r24048 r24049  
    615615       
    616616        this->inputs->AddInput(new TriaInput(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum));
     617        }
     618}
     619/*}}}*/
     620void       Tria::CalvingMeltingFluxLevelset(){/*{{{*/
     621
     622        /*Make sure there is an ice front here*/
     623        if(!IsIceInElement() || !IsZeroLevelset(MaskIceLevelsetEnum)){
     624                IssmDouble flux_per_area=0;
     625                this->inputs->AddInput(new TriaInput(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum));
     626        }
     627        else{
     628        int               domaintype,index1,index2;
     629        const IssmPDouble epsilon = 1.e-15;
     630        IssmDouble        s1,s2;
     631        IssmDouble        gl[NUMVERTICES];
     632        IssmDouble        xyz_front[2][3];
     633
     634
     635        IssmDouble *xyz_list = NULL;
     636        this->GetVerticesCoordinates(&xyz_list);
     637
     638        /*Recover parameters and values*/
     639        parameters->FindParam(&domaintype,DomainTypeEnum);
     640        GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum);
     641
     642        /*Be sure that values are not zero*/
     643        if(gl[0]==0.) gl[0]=gl[0]+epsilon;
     644        if(gl[1]==0.) gl[1]=gl[1]+epsilon;
     645        if(gl[2]==0.) gl[2]=gl[2]+epsilon;
     646
     647        if(domaintype==Domain2DverticalEnum){
     648                _error_("not implemented");
     649        }
     650        else if(domaintype==Domain2DhorizontalEnum || domaintype==Domain3DEnum || domaintype==Domain3DsurfaceEnum){
     651                int pt1 = 0;
     652                int pt2 = 1;
     653                if(gl[0]*gl[1]>0){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
     654
     655                        /*Portion of the segments*/
     656                        s1=gl[2]/(gl[2]-gl[1]);
     657                        s2=gl[2]/(gl[2]-gl[0]);
     658                        if(gl[2]<0.){
     659                                pt1 = 1; pt2 = 0;
     660                        }
     661                        xyz_front[pt2][0]=xyz_list[3*2+0]+s1*(xyz_list[3*1+0]-xyz_list[3*2+0]);
     662                        xyz_front[pt2][1]=xyz_list[3*2+1]+s1*(xyz_list[3*1+1]-xyz_list[3*2+1]);
     663                        xyz_front[pt2][2]=xyz_list[3*2+2]+s1*(xyz_list[3*1+2]-xyz_list[3*2+2]);
     664                        xyz_front[pt1][0]=xyz_list[3*2+0]+s2*(xyz_list[3*0+0]-xyz_list[3*2+0]);
     665                        xyz_front[pt1][1]=xyz_list[3*2+1]+s2*(xyz_list[3*0+1]-xyz_list[3*2+1]);
     666                        xyz_front[pt1][2]=xyz_list[3*2+2]+s2*(xyz_list[3*0+2]-xyz_list[3*2+2]);
     667                }
     668                else if(gl[1]*gl[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
     669
     670                        /*Portion of the segments*/
     671                        s1=gl[0]/(gl[0]-gl[1]);
     672                        s2=gl[0]/(gl[0]-gl[2]);
     673                        if(gl[0]<0.){
     674                                pt1 = 1; pt2 = 0;
     675                        }
     676
     677                        xyz_front[pt1][0]=xyz_list[3*0+0]+s1*(xyz_list[3*1+0]-xyz_list[3*0+0]);
     678                        xyz_front[pt1][1]=xyz_list[3*0+1]+s1*(xyz_list[3*1+1]-xyz_list[3*0+1]);
     679                        xyz_front[pt1][2]=xyz_list[3*0+2]+s1*(xyz_list[3*1+2]-xyz_list[3*0+2]);
     680                        xyz_front[pt2][0]=xyz_list[3*0+0]+s2*(xyz_list[3*2+0]-xyz_list[3*0+0]);
     681                        xyz_front[pt2][1]=xyz_list[3*0+1]+s2*(xyz_list[3*2+1]-xyz_list[3*0+1]);
     682                        xyz_front[pt2][2]=xyz_list[3*0+2]+s2*(xyz_list[3*2+2]-xyz_list[3*0+2]);
     683                }
     684                else if(gl[0]*gl[2]>0){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
     685
     686                        /*Portion of the segments*/
     687                        s1=gl[1]/(gl[1]-gl[0]);
     688                        s2=gl[1]/(gl[1]-gl[2]);
     689                        if(gl[1]<0.){
     690                                pt1 = 1; pt2 = 0;
     691                        }
     692
     693                        xyz_front[pt2][0]=xyz_list[3*1+0]+s1*(xyz_list[3*0+0]-xyz_list[3*1+0]);
     694                        xyz_front[pt2][1]=xyz_list[3*1+1]+s1*(xyz_list[3*0+1]-xyz_list[3*1+1]);
     695                        xyz_front[pt2][2]=xyz_list[3*1+2]+s1*(xyz_list[3*0+2]-xyz_list[3*1+2]);
     696                        xyz_front[pt1][0]=xyz_list[3*1+0]+s2*(xyz_list[3*2+0]-xyz_list[3*1+0]);
     697                        xyz_front[pt1][1]=xyz_list[3*1+1]+s2*(xyz_list[3*2+1]-xyz_list[3*1+1]);
     698                        xyz_front[pt1][2]=xyz_list[3*1+2]+s2*(xyz_list[3*2+2]-xyz_list[3*1+2]);
     699                }
     700                else{
     701                        _error_("case not possible");
     702                }
     703
     704        }
     705        else _error_("mesh type "<<EnumToStringx(domaintype)<<"not supported yet ");
     706
     707        /*Some checks in debugging mode*/
     708        _assert_(s1>=0 && s1<=1.);
     709        _assert_(s2>=0 && s2<=1.);
     710
     711        /*Get normal vector*/
     712        IssmDouble normal[3];
     713        this->NormalSection(&normal[0],&xyz_front[0][0]);
     714        normal[0] = -normal[0];
     715        normal[1] = -normal[1];
     716
     717        /*Get inputs*/
     718        IssmDouble flux = 0.;
     719        IssmDouble area = 0.;
     720        IssmDouble calvingratex,calvingratey,vx,vy,vel,meltingrate,meltingratex,meltingratey,thickness,Jdet,flux_per_area;
     721        IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
     722        Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
     723        Input* calvingratex_input=NULL;
     724        Input* calvingratey_input=NULL;
     725        Input* vx_input=NULL;
     726        Input* vy_input=NULL;
     727        Input* meltingrate_input=NULL;
     728        if(domaintype==Domain2DhorizontalEnum){
     729                calvingratex_input=inputs->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
     730                calvingratey_input=inputs->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
     731                vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
     732                vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
     733                meltingrate_input=inputs->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input);
     734        }
     735        else{
     736                calvingratex_input=inputs->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);
     737                calvingratey_input=inputs->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);
     738        }
     739
     740        /*Start looping on Gaussian points*/
     741        Gauss* gauss=this->NewGauss(xyz_list,&xyz_front[0][0],3);
     742        for(int ig=gauss->begin();ig<gauss->end();ig++){
     743
     744                gauss->GaussPoint(ig);
     745                thickness_input->GetInputValue(&thickness,gauss);
     746                calvingratex_input->GetInputValue(&calvingratex,gauss);
     747                calvingratey_input->GetInputValue(&calvingratey,gauss);
     748                vx_input->GetInputValue(&vx,gauss);
     749                vy_input->GetInputValue(&vy,gauss);
     750                vel=vx*vx+vy*vy;
     751                meltingrate_input->GetInputValue(&meltingrate,gauss);   
     752                meltingratex=meltingrate*vx/(sqrt(vel)+1.e-14);
     753                meltingratey=meltingrate*vy/(sqrt(vel)+1.e-14);
     754                this->JacobianDeterminantSurface(&Jdet,&xyz_front[0][0],gauss);
     755
     756                flux += rho_ice*Jdet*gauss->weight*thickness*((calvingratex+meltingratex)*normal[0] + (calvingratey+meltingratey)*normal[1]);
     757                area += Jdet*gauss->weight*thickness;
     758
     759                flux_per_area=flux/area;
     760        }
     761       
     762        this->inputs->AddInput(new TriaInput(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum));
    617763        }
    618764}
    … …  
    40024148}
    40034149/*}}}*/
     4150IssmDouble Tria::TotalCalvingMeltingFluxLevelset(bool scaled){/*{{{*/
     4151
     4152        /*Make sure there is an ice front here*/
     4153        if(!IsIceInElement() || !IsZeroLevelset(MaskIceLevelsetEnum)) return 0;
     4154
     4155        /*Scaled not implemented yet...*/
     4156        _assert_(!scaled);
     4157
     4158        int               domaintype,index1,index2;
     4159        const IssmPDouble epsilon = 1.e-15;
     4160        IssmDouble        s1,s2;
     4161        IssmDouble        gl[NUMVERTICES];
     4162        IssmDouble        xyz_front[2][3];
     4163
     4164
     4165        IssmDouble *xyz_list = NULL;
     4166        this->GetVerticesCoordinates(&xyz_list);
     4167
     4168        /*Recover parameters and values*/
     4169        parameters->FindParam(&domaintype,DomainTypeEnum);
     4170        GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum);
     4171
     4172        /*Be sure that values are not zero*/
     4173        if(gl[0]==0.) gl[0]=gl[0]+epsilon;
     4174        if(gl[1]==0.) gl[1]=gl[1]+epsilon;
     4175        if(gl[2]==0.) gl[2]=gl[2]+epsilon;
     4176
     4177        if(domaintype==Domain2DverticalEnum){
     4178                _error_("not implemented");
     4179        }
     4180        else if(domaintype==Domain2DhorizontalEnum || domaintype==Domain3DEnum || domaintype==Domain3DsurfaceEnum){
     4181                int pt1 = 0;
     4182                int pt2 = 1;
     4183                if(gl[0]*gl[1]>0){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
     4184
     4185                        /*Portion of the segments*/
     4186                        s1=gl[2]/(gl[2]-gl[1]);
     4187                        s2=gl[2]/(gl[2]-gl[0]);
     4188                        if(gl[2]<0.){
     4189                                pt1 = 1; pt2 = 0;
     4190                        }
     4191                        xyz_front[pt2][0]=xyz_list[3*2+0]+s1*(xyz_list[3*1+0]-xyz_list[3*2+0]);
     4192                        xyz_front[pt2][1]=xyz_list[3*2+1]+s1*(xyz_list[3*1+1]-xyz_list[3*2+1]);
     4193                        xyz_front[pt2][2]=xyz_list[3*2+2]+s1*(xyz_list[3*1+2]-xyz_list[3*2+2]);
     4194                        xyz_front[pt1][0]=xyz_list[3*2+0]+s2*(xyz_list[3*0+0]-xyz_list[3*2+0]);
     4195                        xyz_front[pt1][1]=xyz_list[3*2+1]+s2*(xyz_list[3*0+1]-xyz_list[3*2+1]);
     4196                        xyz_front[pt1][2]=xyz_list[3*2+2]+s2*(xyz_list[3*0+2]-xyz_list[3*2+2]);
     4197                }
     4198                else if(gl[1]*gl[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
     4199
     4200                        /*Portion of the segments*/
     4201                        s1=gl[0]/(gl[0]-gl[1]);
     4202                        s2=gl[0]/(gl[0]-gl[2]);
     4203                        if(gl[0]<0.){
     4204                                pt1 = 1; pt2 = 0;
     4205                        }
     4206
     4207                        xyz_front[pt1][0]=xyz_list[3*0+0]+s1*(xyz_list[3*1+0]-xyz_list[3*0+0]);
     4208                        xyz_front[pt1][1]=xyz_list[3*0+1]+s1*(xyz_list[3*1+1]-xyz_list[3*0+1]);
     4209                        xyz_front[pt1][2]=xyz_list[3*0+2]+s1*(xyz_list[3*1+2]-xyz_list[3*0+2]);
     4210                        xyz_front[pt2][0]=xyz_list[3*0+0]+s2*(xyz_list[3*2+0]-xyz_list[3*0+0]);
     4211                        xyz_front[pt2][1]=xyz_list[3*0+1]+s2*(xyz_list[3*2+1]-xyz_list[3*0+1]);
     4212                        xyz_front[pt2][2]=xyz_list[3*0+2]+s2*(xyz_list[3*2+2]-xyz_list[3*0+2]);
     4213                }
     4214                else if(gl[0]*gl[2]>0){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
     4215
     4216                        /*Portion of the segments*/
     4217                        s1=gl[1]/(gl[1]-gl[0]);
     4218                        s2=gl[1]/(gl[1]-gl[2]);
     4219                        if(gl[1]<0.){
     4220                                pt1 = 1; pt2 = 0;
     4221                        }
     4222
     4223                        xyz_front[pt2][0]=xyz_list[3*1+0]+s1*(xyz_list[3*0+0]-xyz_list[3*1+0]);
     4224                        xyz_front[pt2][1]=xyz_list[3*1+1]+s1*(xyz_list[3*0+1]-xyz_list[3*1+1]);
     4225                        xyz_front[pt2][2]=xyz_list[3*1+2]+s1*(xyz_list[3*0+2]-xyz_list[3*1+2]);
     4226                        xyz_front[pt1][0]=xyz_list[3*1+0]+s2*(xyz_list[3*2+0]-xyz_list[3*1+0]);
     4227                        xyz_front[pt1][1]=xyz_list[3*1+1]+s2*(xyz_list[3*2+1]-xyz_list[3*1+1]);
     4228                        xyz_front[pt1][2]=xyz_list[3*1+2]+s2*(xyz_list[3*2+2]-xyz_list[3*1+2]);
     4229                }
     4230                else{
     4231                        _error_("case not possible");
     4232                }
     4233
     4234        }
     4235        else _error_("mesh type "<<EnumToStringx(domaintype)<<"not supported yet ");
     4236
     4237        /*Some checks in debugging mode*/
     4238        _assert_(s1>=0 && s1<=1.);
     4239        _assert_(s2>=0 && s2<=1.);
     4240
     4241        /*Get normal vector*/
     4242        IssmDouble normal[3];
     4243        this->NormalSection(&normal[0],&xyz_front[0][0]);
     4244        normal[0] = -normal[0];
     4245        normal[1] = -normal[1];
     4246
     4247        /*Get inputs*/
     4248        IssmDouble flux = 0.;
     4249        IssmDouble calvingratex,calvingratey,vx,vy,vel,meltingrate,meltingratex,meltingratey,thickness,Jdet,flux_per_area;
     4250        IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
     4251        Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
     4252        Input* calvingratex_input=NULL;
     4253        Input* calvingratey_input=NULL;
     4254        Input* vx_input=NULL;
     4255        Input* vy_input=NULL;
     4256        Input* meltingrate_input=NULL;
     4257        if(domaintype==Domain2DhorizontalEnum){
     4258                calvingratex_input=inputs->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
     4259                calvingratey_input=inputs->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
     4260                vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
     4261                vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
     4262                meltingrate_input=inputs->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input);
     4263        }
     4264        else{
     4265                calvingratex_input=inputs->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);
     4266                calvingratey_input=inputs->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);
     4267        }
     4268
     4269        /*Start looping on Gaussian points*/
     4270        Gauss* gauss=this->NewGauss(xyz_list,&xyz_front[0][0],3);
     4271        for(int ig=gauss->begin();ig<gauss->end();ig++){
     4272
     4273                gauss->GaussPoint(ig);
     4274                thickness_input->GetInputValue(&thickness,gauss);
     4275                calvingratex_input->GetInputValue(&calvingratex,gauss);
     4276                calvingratey_input->GetInputValue(&calvingratey,gauss);
     4277                vx_input->GetInputValue(&vx,gauss);
     4278                vy_input->GetInputValue(&vy,gauss);
     4279                vel=vx*vx+vy*vy;
     4280                meltingrate_input->GetInputValue(&meltingrate,gauss);   
     4281                meltingratex=meltingrate*vx/(sqrt(vel)+1.e-14);
     4282                meltingratey=meltingrate*vy/(sqrt(vel)+1.e-14);
     4283                this->JacobianDeterminantSurface(&Jdet,&xyz_front[0][0],gauss);
     4284
     4285                flux += rho_ice*Jdet*gauss->weight*thickness*((calvingratex+meltingratex)*normal[0] + (calvingratey+meltingratey)*normal[1]);
     4286        }
     4287
     4288        return flux;
     4289}
     4290/*}}}*/
    40044291IssmDouble Tria::TotalFloatingBmb(bool scaled){/*{{{*/
    40054292
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r24048 r24049  
    5555                void                    CalvingRateLevermann();
    5656                void                    CalvingFluxLevelset();
     57                void                    CalvingMeltingFluxLevelset();
    5758                IssmDouble  CharacteristicLength(void);
    5859                void        ComputeBasalStress(void);
    … …  
    135136                IssmDouble  TimeAdapt();
    136137                IssmDouble  TotalCalvingFluxLevelset(bool scaled);
     138                IssmDouble  TotalCalvingMeltingFluxLevelset(bool scaled);
    137139                IssmDouble  TotalFloatingBmb(bool scaled);
    138140                IssmDouble  TotalGroundedBmb(bool scaled);
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r24048 r24049  
    10401040}
    10411041/*}}}*/
     1042void FemModel::CalvingMeltingFluxLevelsetx(){/*{{{*/
     1043
     1044        for(int i=0;i<elements->Size();i++){
     1045                Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
     1046                element->CalvingMeltingFluxLevelset();
     1047        }
     1048}
     1049/*}}}*/
    10421050void FemModel::CostFunctionx(IssmDouble* pJ,IssmDouble** pJlist,int* pn){/*{{{*/
    10431051
    … …  
    22822290                                        case MaxAbsVzEnum:                       this->MaxAbsVzx(&double_result);                       break;
    22832291                                        case MassFluxEnum:                       this->MassFluxx(&double_result);                       break;
    2284                                         case TotalCalvingFluxLevelsetEnum:         this->TotalCalvingFluxLevelsetx(&double_result,false);          break;
     2292                                        case TotalCalvingFluxLevelsetEnum:                this->TotalCalvingFluxLevelsetx(&double_result,false);          break;
     2293                                        case TotalCalvingMeltingFluxLevelsetEnum:this->TotalCalvingMeltingFluxLevelsetx(&double_result,false);          break;
    22852294                                        case TotalFloatingBmbEnum:               this->TotalFloatingBmbx(&double_result,false);         break;
    22862295                                        case TotalFloatingBmbScaledEnum:         this->TotalFloatingBmbx(&double_result,true);          break;
    … …  
    25272536                case DragCoefficientAbsGradientEnum:     DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
    25282537                case BalancethicknessMisfitEnum:         BalancethicknessMisfitx(responses); break;
    2529                 case TotalCalvingFluxLevelsetEnum:                        this->TotalCalvingFluxLevelsetx(responses, false); break;
     2538                case TotalCalvingFluxLevelsetEnum:                this->TotalCalvingFluxLevelsetx(responses, false); break;
     2539                case TotalCalvingMeltingFluxLevelsetEnum:this->TotalCalvingMeltingFluxLevelsetx(responses, false); break;
    25302540                case TotalFloatingBmbEnum:                              this->TotalFloatingBmbx(responses, false); break;
    25312541                case TotalFloatingBmbScaledEnum:                          this->TotalFloatingBmbx(responses, true); break;
    … …  
    28002810                Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
    28012811                local_calving_flux+=element->TotalCalvingFluxLevelset(scaled);
     2812        }
     2813        ISSM_MPI_Reduce(&local_calving_flux,&total_calving_flux,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
     2814        ISSM_MPI_Bcast(&total_calving_flux,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
     2815
     2816        /*Assign output pointers: */
     2817        *pM=total_calving_flux;
     2818
     2819}/*}}}*/
     2820void FemModel::TotalCalvingMeltingFluxLevelsetx(IssmDouble* pM, bool scaled){/*{{{*/
     2821
     2822        IssmDouble local_calving_flux = 0;
     2823        IssmDouble total_calving_flux;
     2824
     2825        for(int i=0;i<this->elements->Size();i++){
     2826                Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
     2827                local_calving_flux+=element->TotalCalvingMeltingFluxLevelset(scaled);
    28022828        }
    28032829        ISSM_MPI_Reduce(&local_calving_flux,&total_calving_flux,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
  • issm/trunk-jpl/src/c/classes/FemModel.h

    r24048 r24049  
    9191                void CalvingRateLevermannx();
    9292                void CalvingFluxLevelsetx();
     93                void CalvingMeltingFluxLevelsetx();
    9394                void DeviatoricStressx();
    9495                void Divergencex(IssmDouble* pdiv);
    … …  
    131132                void RignotMeltParameterizationx();
    132133                void TotalCalvingFluxLevelsetx(IssmDouble* pGbmb, bool scaled);
     134                void TotalCalvingMeltingFluxLevelsetx(IssmDouble* pGbmb, bool scaled);
    133135                void TotalFloatingBmbx(IssmDouble* pFbmb, bool scaled);
    134136                void TotalGroundedBmbx(IssmDouble* pGbmb, bool scaled);
  • issm/trunk-jpl/src/c/shared/Enum/Enum.vim

    r24048 r24049  
    483483syn keyword cConstant CalvingrateyEnum
    484484syn keyword cConstant CalvingFluxLevelsetEnum
     485syn keyword cConstant CalvingMeltingFluxLevelsetEnum
    485486syn keyword cConstant ConvergedEnum
    486487syn keyword cConstant CrevasseDepthEnum
    … …  
    12191220syn keyword cConstant ThicknessErrorEstimatorEnum
    12201221syn keyword cConstant TotalCalvingFluxLevelsetEnum
     1222syn keyword cConstant TotalCalvingMeltingFluxLevelsetEnum
    12211223syn keyword cConstant TotalFloatingBmbEnum
    12221224syn keyword cConstant TotalFloatingBmbScaledEnum
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r24048 r24049  
    479479        CalvingrateyEnum,
    480480        CalvingFluxLevelsetEnum,
     481        CalvingMeltingFluxLevelsetEnum,
    481482        ConvergedEnum,
    482483        CrevasseDepthEnum,
    … …  
    12171218        ThicknessErrorEstimatorEnum,
    12181219        TotalCalvingFluxLevelsetEnum,
     1220        TotalCalvingMeltingFluxLevelsetEnum,
    12191221        TotalFloatingBmbEnum,
    12201222        TotalFloatingBmbScaledEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r24048 r24049  
    485485                case CalvingrateyEnum : return "Calvingratey";
    486486                case CalvingFluxLevelsetEnum : return "CalvingFluxLevelset";
     487                case CalvingMeltingFluxLevelsetEnum : return "CalvingMeltingFluxLevelset";
    487488                case ConvergedEnum : return "Converged";
    488489                case CrevasseDepthEnum : return "CrevasseDepth";
    … …  
    12211222                case ThicknessErrorEstimatorEnum : return "ThicknessErrorEstimator";
    12221223                case TotalCalvingFluxLevelsetEnum : return "TotalCalvingFluxLevelset";
     1224                case TotalCalvingMeltingFluxLevelsetEnum : return "TotalCalvingMeltingFluxLevelset";
    12231225                case TotalFloatingBmbEnum : return "TotalFloatingBmb";
    12241226                case TotalFloatingBmbScaledEnum : return "TotalFloatingBmbScaled";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r24048 r24049  
    494494              else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
    495495              else if (strcmp(name,"CalvingFluxLevelset")==0) return CalvingFluxLevelsetEnum;
     496              else if (strcmp(name,"CalvingMeltingFluxLevelset")==0) return CalvingMeltingFluxLevelsetEnum;
    496497              else if (strcmp(name,"Converged")==0) return ConvergedEnum;
    497498              else if (strcmp(name,"CrevasseDepth")==0) return CrevasseDepthEnum;
    … …  
    505506              else if (strcmp(name,"DeviatoricStressxz")==0) return DeviatoricStressxzEnum;
    506507              else if (strcmp(name,"DeviatoricStressyy")==0) return DeviatoricStressyyEnum;
    507               else if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"DeviatoricStresszz")==0) return DeviatoricStresszzEnum;
     511              if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum;
     512              else if (strcmp(name,"DeviatoricStresszz")==0) return DeviatoricStresszzEnum;
    512513              else if (strcmp(name,"DeviatoricStress1")==0) return DeviatoricStress1Enum;
    513514              else if (strcmp(name,"DeviatoricStress2")==0) return DeviatoricStress2Enum;
    … …  
    628629              else if (strcmp(name,"MeshVertexonsurface")==0) return MeshVertexonsurfaceEnum;
    629630              else if (strcmp(name,"Misfit")==0) return MisfitEnum;
    630               else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
     634              if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
     635              else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
    635636              else if (strcmp(name,"Node")==0) return NodeEnum;
    636637              else if (strcmp(name,"OmegaAbsGradient")==0) return OmegaAbsGradientEnum;
    … …  
    751752              else if (strcmp(name,"SmbVmean")==0) return SmbVmeanEnum;
    752753              else if (strcmp(name,"SmbVz")==0) return SmbVzEnum;
    753               else if (strcmp(name,"SmbW")==0) return SmbWEnum;
    754754         else stage=7;
    755755   }
    756756   if(stage==7){
    757               if (strcmp(name,"SmbWini")==0) return SmbWiniEnum;
     757              if (strcmp(name,"SmbW")==0) return SmbWEnum;
     758              else if (strcmp(name,"SmbWini")==0) return SmbWiniEnum;
    758759              else if (strcmp(name,"SmbZMax")==0) return SmbZMaxEnum;
    759760              else if (strcmp(name,"SmbZMin")==0) return SmbZMinEnum;
    … …  
    874875              else if (strcmp(name,"Outputdefinition58")==0) return Outputdefinition58Enum;
    875876              else if (strcmp(name,"Outputdefinition59")==0) return Outputdefinition59Enum;
    876               else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"Outputdefinition60")==0) return Outputdefinition60Enum;
     880              if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
     881              else if (strcmp(name,"Outputdefinition60")==0) return Outputdefinition60Enum;
    881882              else if (strcmp(name,"Outputdefinition61")==0) return Outputdefinition61Enum;
    882883              else if (strcmp(name,"Outputdefinition62")==0) return Outputdefinition62Enum;
    … …  
    997998              else if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum;
    998999              else if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum;
    999               else if (strcmp(name,"Element")==0) return ElementEnum;
    10001000         else stage=9;
    10011001   }
    10021002   if(stage==9){
    1003               if (strcmp(name,"ElementHook")==0) return ElementHookEnum;
     1003              if (strcmp(name,"Element")==0) return ElementEnum;
     1004              else if (strcmp(name,"ElementHook")==0) return ElementHookEnum;
    10041005              else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum;
    10051006              else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
    … …  
    11201121              else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
    11211122              else if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum;
    1122               else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
    11231123         else stage=10;
    11241124   }
    11251125   if(stage==10){
    1126               if (strcmp(name,"MaxDivergence")==0) return MaxDivergenceEnum;
     1126              if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
     1127              else if (strcmp(name,"MaxDivergence")==0) return MaxDivergenceEnum;
    11271128              else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
    11281129              else if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
    … …  
    12431244              else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
    12441245              else if (strcmp(name,"Tetra")==0) return TetraEnum;
    1245               else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
    12461246         else stage=11;
    12471247   }
    12481248   if(stage==11){
    1249               if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
     1249              if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
     1250              else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
    12501251              else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
    12511252              else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
    12521253              else if (strcmp(name,"TotalCalvingFluxLevelset")==0) return TotalCalvingFluxLevelsetEnum;
     1254              else if (strcmp(name,"TotalCalvingMeltingFluxLevelset")==0) return TotalCalvingMeltingFluxLevelsetEnum;
    12531255              else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
    12541256              else if (strcmp(name,"TotalFloatingBmbScaled")==0) return TotalFloatingBmbScaledEnum;
Note: See TracChangeset for help on using the changeset viewer.