Changeset 24049


Ignore:
Timestamp:
06/26/19 16:09:31 (6 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.