Changeset 22974


Ignore:
Timestamp:
07/19/18 14:22:19 (7 years ago)
Author:
tpelle
Message:

CHG: working on getting groundingline height to work

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

Legend:

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

    r22911 r22974  
    5757        /* Check if ice in element */
    5858        if(!element->IsIceInElement()) return NULL;
     59        //if(!element->IsFloating()) return NULL;
    5960
    6061        /*Intermediaries */
    6162        int        domaintype,dim;
    62         IssmDouble Jdet,D_scalar,dt,h;
     63        IssmDouble Jdet,D_scalar;
    6364        IssmDouble vel,vx,vy,dvxdx,dvydy;
    6465        IssmDouble dvx[2],dvy[2];
     
    8182        IssmDouble*    B      = xNew<IssmDouble>(dim*numnodes);
    8283        IssmDouble*    Bprime = xNew<IssmDouble>(dim*numnodes);
    83         IssmDouble*    D      = xNewZeroInit<IssmDouble>(dim*dim);
     84        IssmDouble    D[2][2] = {0.};
    8485
    8586        /*Retrieve all inputs and parameters*/
    8687        element->GetVerticesCoordinates(&xyz_list);
    87         element->FindParam(&dt,TimesteppingTimeStepEnum);
    88         element->FindParam(&domaintype,DomainTypeEnum);
    89         _error_("Change speed");
    90         Input* vxaverage_input=element->GetInput(VxAverageEnum); _assert_(vxaverage_input);
    91         Input* vyaverage_input=element->GetInput(VyAverageEnum); _assert_(vyaverage_input);
    92 
    93         h = element->CharacteristicLength();
     88        Input* vx_input=element->GetInput(BaseSlopeXEnum); _assert_(vx_input);
     89        Input* vy_input=element->GetInput(BaseSlopeYEnum); _assert_(vy_input);
     90
     91        IssmDouble h = element->CharacteristicLength();
    9492
    9593        /* Start  looping on the number of gaussian points: */
     
    9997
    10098                element->JacobianDeterminant(&Jdet,xyz_list,gauss);
    101                 element->NodalFunctions(basis,gauss);
    102 
    103                 vxaverage_input->GetInputValue(&vx,gauss);
    104                 vxaverage_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss);
    105                 vyaverage_input->GetInputValue(&vy,gauss);
    106                 vyaverage_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss);
    107 
    108                 D_scalar=gauss->weight*Jdet;
    109                 TripleMultiply(basis,1,numnodes,1,
    110                                         &D_scalar,1,1,0,
    111                                         basis,1,numnodes,0,
    112                                         &Ke->values[0],1);
    113 
    11499                GetB(B,element,dim,xyz_list,gauss);
    115100                GetBprime(Bprime,element,dim,xyz_list,gauss);
    116101
     102                vx_input->GetInputValue(&vx,gauss);
     103                vy_input->GetInputValue(&vy,gauss);
     104                vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss);
     105                vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss);
    117106                dvxdx=dvx[0];
    118107                dvydy=dvy[1];
    119                 D_scalar=dt*gauss->weight*Jdet;
    120 
    121                 D[0*dim+0]=D_scalar*dvxdx;
    122                 D[1*dim+1]=D_scalar*dvydy;
    123 
    124                 TripleMultiply(B,dim,numnodes,1,
    125                                         D,dim,dim,0,
    126                                         B,dim,numnodes,0,
    127                                         &Ke->values[0],1);
    128 
    129                 D[0*dim+0]=D_scalar*vx;
    130                 D[1*dim+1]=D_scalar*vy;
    131 
    132                 TripleMultiply(B,dim,numnodes,1,
    133                                         D,dim,dim,0,
    134                                         Bprime,dim,numnodes,0,
    135                                         &Ke->values[0],1);
    136 
    137                 /*SSA Stabilization*/
    138                 vxaverage_input->GetInputAverage(&vx);
    139                 vyaverage_input->GetInputAverage(&vy);
    140                 D[0*dim+0]=h/2.0*fabs(vx);
    141                 D[1*dim+1]=h/2.0*fabs(vy);
    142                 D[0*dim+0]=D_scalar*D[0*dim+0];
    143                 D[1*dim+0]=D_scalar*D[1*dim+0];
    144                 D[0*dim+1]=D_scalar*D[0*dim+1];
    145                 D[1*dim+1]=D_scalar*D[1*dim+1];
    146 
    147                 TripleMultiply(Bprime,dim,numnodes,1,
    148                                         D,dim,dim,0,
    149                                         Bprime,dim,numnodes,0,
     108                D_scalar=gauss->weight*Jdet;
     109
     110                /*Advection*/
     111                //D[0][0]=D_scalar*dvxdx;
     112                //D[0][1]=0.;
     113                //D[1][0]=0.;
     114                //D[1][1]=D_scalar*dvydy;
     115                //TripleMultiply(B,2,numnodes,1,
     116                //                      &D[0][0],2,2,0,
     117                //                      B,2,numnodes,0,
     118                //                      &Ke->values[0],1);
     119
     120                //vx = 0.;
     121                //vy = -.1;
     122                if(sqrt(vx*vx+vy*vy)>0.28){
     123                        /*Advection*/
     124                        D[0][0]=D_scalar*vx;
     125                        D[1][1]=D_scalar*vy;
     126                        TripleMultiply(B,2,numnodes,1,
     127                                                &D[0][0],2,2,0,
     128                                                Bprime,2,numnodes,0,
     129                                                &Ke->values[0],1);
     130                }
     131                else{
     132                        /*Diffusion*/
     133                        D[0][0]=1e5*h/2.0;
     134                        D[1][1]=1e5*h/2.0;
     135                        TripleMultiply(Bprime,2,numnodes,1,
     136                                                &D[0][0],2,2,0,
     137                                                Bprime,2,numnodes,0,
     138                                                &Ke->values[0],1);
     139                }
     140
     141                /*Stabilization*/
     142                D[0][0]=h/2.0*fabs(vx);
     143                D[0][1]=0.;
     144                D[1][0]=0.;
     145                D[1][1]=h/2.0*fabs(vy);
     146                TripleMultiply(Bprime,2,numnodes,1,
     147                                        &D[0][0],2,2,0,
     148                                        Bprime,2,numnodes,0,
    150149                                        &Ke->values[0],1);
    151150        }
     
    153152        /*Clean up and return*/
    154153        xDelete<IssmDouble>(xyz_list);
    155         xDelete<IssmDouble>(basis);
    156154        xDelete<IssmDouble>(B);
    157155        xDelete<IssmDouble>(Bprime);
    158         xDelete<IssmDouble>(D);
    159156        delete gauss;
    160157        return Ke;
     
    186183}/*}}}*/
    187184void           GLheightadvectionAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
    188         _error_("To be implemented");
     185
     186        /*Deal with ocean constraint*/
     187        SetActiveNodesLSMx(femmodel);
     188
     189        /*Constrain all nodes that are grounded and unconstrain the ones that float*/
     190        for(int i=0;i<femmodel->elements->Size();i++){
     191                Element    *element  = xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
     192
     193                if(!element->IsIceInElement()) continue;
     194                int         numnodes = element->GetNumberOfNodes();
     195                IssmDouble *mask     = xNew<IssmDouble>(numnodes);
     196                IssmDouble *bed      = xNew<IssmDouble>(numnodes);
     197                IssmDouble *lset     = xNew<IssmDouble>(numnodes);
     198
     199                element->GetInputListOnNodes(&mask[0],MaskGroundediceLevelsetEnum);
     200                element->GetInputListOnNodes(&bed[0],BaseEnum);
     201                element->GetInputListOnNodes(&lset[0],MaskIceLevelsetEnum);
     202
     203                for(int in=0;in<numnodes;in++){
     204                        Node* node=element->GetNode(in);
     205                        if(mask[in]<0.){
     206                                node->Activate();
     207                        }
     208                        else{
     209                                node->Deactivate();
     210                                node->ApplyConstraint(0,bed[in]);
     211                        }
     212                }
     213                xDelete<IssmDouble>(mask);
     214                xDelete<IssmDouble>(bed);
     215                xDelete<IssmDouble>(lset);
     216        }
     217
     218
     219
    189220        return;
    190221}/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r22955 r22974  
    284284                virtual void       PicoUpdateBoxid(int* pmax_boxid_basin)=0;
    285285                virtual void       PicoUpdateBox(int loopboxid)=0;
    286                 virtual void       PicoComputeBaseSlope(void)=0;
    287                 virtual void       PicoComputeGroundingLineDepth(void)=0;
    288286                virtual void       PicoComputeBasalMelt(void)=0;
    289287                virtual void       PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding)=0;
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r22955 r22974  
    143143                void                            PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");};
    144144                void                            PicoUpdateBox(int loopboxid){_error_("not implemented yet");};
    145                 void                            PicoComputeBaseSlope(void){_error_("not implemented yet");};
    146                 void                            PicoComputeGroundingLineDepth(void){_error_("not implemented yet");};
    147145                void                            PicoComputeBasalMelt(void){_error_("not implemented yet");};
    148146                void           PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r22955 r22974  
    132132                void        PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");};
    133133                void                    PicoUpdateBox(int loopboxid){_error_("not implemented yet");};
    134                 void                    PicoComputeBaseSlope(void){_error_("not implemented yet");};
    135                 void                    PicoComputeGroundingLineDepth(void){_error_("not implemented yet");};
    136134                void                    PicoComputeBasalMelt(void){_error_("not implemented yet");};
    137135                void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tetra.h

    r22955 r22974  
    140140                void                    PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");};       
    141141                void                    PicoUpdateBox(int loopboxid){_error_("not implemented yet");};
    142                 void                    PicoComputeBaseSlope(void){_error_("not implemented yet");};
    143                 void                    PicoComputeGroundingLineDepth(void){_error_("not implemented yet");};
    144142                void                    PicoComputeBasalMelt(void){_error_("not implemented yet");};
    145143                void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r22964 r22974  
    29232923                }
    29242924        }
    2925         if(boxid==-1){_error_("No boxid found for element " << this->Sid() << "!");}
     2925        if(boxid==-1) _error_("No boxid found for element " << this->Sid() << "!");
    29262926
    29272927        this->inputs->AddInput(new IntInput(BasalforcingsPicoBoxIdEnum, boxid));       
     
    29972997
    29982998                        /* To avoid negatives under the square root */
    2999                         if((0.25*pow(p_coeff,2)-q_coeff)<0){
    3000                                 q_coeff = 0.25*p_coeff*p_coeff;
    3001                         }
     2999                        if((0.25*pow(p_coeff,2)-q_coeff)<0) q_coeff = 0.25*p_coeff*p_coeff;
    30023000
    30033001                        Tocs[i] = toc_farocean-(-0.5*p_coeff+sqrt(0.25*pow(p_coeff,2)-q_coeff));
    30043002                        Socs[i] = soc_farocean-(soc_farocean/(nu*lambda))*(toc_farocean-Tocs[i]);
    30053003                        potential_pressure_melting_point[i] = a*Socs[i]+b-c*pressure;
    3006                         if(!isplume){basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);}
     3004                        if(!isplume) basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);
    30073005                        overturnings[i] = overturning_coeff*rho_star*(Beta*(soc_farocean-Socs[i])-alpha*(toc_farocean-Tocs[i]));
    30083006                }
    30093007
    3010                 if(!isplume){this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);}
     3008                if(!isplume) this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);
    30113009                this->AddInput(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1Enum);
    30123010                this->AddInput(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1Enum);
     
    30413039                        Socs[i]  = mean_soc-mean_soc*((mean_toc-Tocs[i])/(nu*lambda));
    30423040                        potential_pressure_melting_point[i] = a*Socs[i]+b-c*pressure;
    3043                         if(!isplume){basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);}
    3044                 }
    3045 
    3046                 if(!isplume){this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);}
     3041                        if(!isplume) basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);
     3042                }
     3043
     3044                if(!isplume) this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);
    30473045                this->AddInput(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1Enum);
    30483046                this->AddInput(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1Enum);
     
    30593057}
    30603058/*}}}*/
    3061 void       Tria::PicoComputeBaseSlope(void){/*{{{*/
    3062 
    3063    //if(!this->IsIceInElement() || !this->IsFloating()) return;
    3064 
    3065         /*Define variables and get inputs */
    3066         IssmDouble  slopex,slopey;
    3067         IssmDouble slope[NUMVERTICES];
    3068         Input* baseslopex_input     = this->GetInput(BaseSlopeXEnum);     _assert_(baseslopex_input);
    3069         Input* baseslopey_input     = this->GetInput(BaseSlopeYEnum);     _assert_(baseslopey_input);
    3070 
    3071         Gauss* gauss=this->NewGauss();
    3072         for(int i=0;i<NUMVERTICES;i++){
    3073                 gauss->GaussVertex(i);
    3074                 baseslopex_input->GetInputValue(&slopex,gauss);
    3075                 baseslopey_input->GetInputValue(&slopey,gauss);
    3076                 slope[i] = sqrt(slopex*slopex + slopey*slopey);
    3077         }
    3078 
    3079         this->AddInput(BasalforcingsPicoShelfSlopeEnum,slope,P1Enum);
    3080 
    3081         /*Cleanup and return*/
    3082         delete gauss;
    3083 }/*}}}*/
    3084 void       Tria::PicoComputeGroundingLineDepth(void){/*{{{*/
    3085 
    3086         if(!this->IsIceInElement() || !this->IsFloating()) return;
    3087 
    3088         /*Define variables and get inputs */
    3089         IssmDouble bed;
    3090         IssmDouble zgl[NUMVERTICES];
    3091         Input* bed_input = this->GetInput(BedEnum);  _assert_(bed_input);
    3092 
    3093         Gauss* gauss=this->NewGauss();
    3094         for(int i=0;i<NUMVERTICES;i++){
    3095                 gauss->GaussVertex(i);
    3096                 bed_input->GetInputValue(&bed,gauss);
    3097            zgl[i] = bed -50.;
    3098         }
    3099 
    3100         this->AddInput(BasalforcingsPicoGroundingLineDepthEnum,zgl,P1Enum);
    3101 
    3102         /*Cleanup and return*/
    3103         delete gauss;
    3104 }/*}}}*/
    31053059void       Tria::PicoComputeBasalMelt(void){/*{{{*/
    31063060
     
    31093063   IssmDouble E0, Cd, CdT, YT, lam1, lam2, lam3, M0, CdTS0, y1, y2, x0;
    31103064        IssmDouble Tf_gl, YTS, CdTS, G1, G2, G3, g_alpha, M, l, X_hat, M_hat;
    3111         IssmDouble alpha, zgl, Toc, Soc, z_base, yts;
     3065        IssmDouble alpha, zgl, Toc, Soc, z_base, yts, slopex, slopey;
    31123066
    31133067        /*Get variables*/
     
    31273081        /*Define arrays*/
    31283082        IssmDouble basalmeltrates_shelf[NUMVERTICES];  //Basal melt-rate
     3083        //IssmDouble slope[NUMVERTICES];                 //Basal slope
    31293084
    31303085        /*Polynomial coefficients*/
     
    31443099
    31453100        /*Get inputs*/
    3146    Input* alpha_input=this->GetInput(BasalforcingsPicoShelfSlopeEnum);              _assert_(alpha_input);
    3147    Input* zgl_input=this->GetInput(BasalforcingsPicoGroundingLineDepthEnum);        _assert_(zgl_input);
    3148         Input* toc_input=this->GetInput(BasalforcingsPicoSubShelfOceanTempEnum);         _assert_(toc_input);
    3149         Input* soc_input=this->GetInput(BasalforcingsPicoSubShelfOceanSalinityEnum);     _assert_(soc_input);
    3150         Input* base_input=this->GetInput(BaseEnum);                                      _assert_(base_input);
     3101   Input* zgl_input            = this->GetInput(GroundinglineHeightEnum);                     _assert_(zgl_input);
     3102        Input* toc_input            = this->GetInput(BasalforcingsPicoSubShelfOceanTempEnum);      _assert_(toc_input);
     3103        Input* soc_input            = this->GetInput(BasalforcingsPicoSubShelfOceanSalinityEnum);  _assert_(soc_input);
     3104        Input* base_input           = this->GetInput(BaseEnum);                                    _assert_(base_input);
     3105        Input* baseslopex_input     = this->GetInput(BaseSlopeXEnum);                              _assert_(baseslopex_input);
     3106        Input* baseslopey_input     = this->GetInput(BaseSlopeYEnum);                              _assert_(baseslopey_input);
    31513107        this->FindParam(&yts, ConstantsYtsEnum);
    31523108
     
    31573113
    31583114                /*Get inputs*/
    3159       alpha_input->GetInputValue(&alpha,gauss);
    31603115      zgl_input->GetInputValue(&zgl,gauss);
    31613116                toc_input->GetInputValue(&Toc,gauss); //(K)
    31623117                soc_input->GetInputValue(&Soc,gauss);
    31633118                base_input->GetInputValue(&z_base,gauss);
     3119                baseslopex_input->GetInputValue(&slopex,gauss);
     3120                baseslopey_input->GetInputValue(&slopey,gauss);
     3121
     3122                /*Compute ice shelf base slope*/
     3123                alpha = sqrt(slopex*slopex + slopey*slopey);
    31643124
    31653125                /*Make necessary conversions*/
    3166                 Toc = Toc-273.15;     // (Degrees C)
    3167                 alpha = atan(alpha);  // (Degrees)
     3126                Toc = Toc-273.15;
     3127                alpha = atan(alpha);         
     3128                if(zgl>z_base) zgl=z_base-10;
    31683129
    31693130                /*Low bound for Toc to ensure X_hat is between 0 and 1*/
    3170                 if(Toc<lam1*Soc+lam2) {Toc=lam1*Soc+lam2;}
     3131                if(Toc<lam1*Soc+lam2) Toc=lam1*Soc+lam2;
    31713132
    31723133                /*Compute parameters needed for melt-rate calculation*/
     
    31863147                for(int ii=0;ii<12;ii++) {
    31873148                 M_hat += p[ii]*pow(X_hat,ii);                                               //Polynomial fit
    3188                 }
     3149           }
    31893150
    31903151                /*Compute melt-rate*/
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r22955 r22974  
    114114                void        PicoUpdateBoxid(int* pmax_boxid_basin);
    115115                void        PicoUpdateBox(int loopboxid);
    116                 void        PicoComputeBaseSlope(void);
    117                 void        PicoComputeGroundingLineDepth(void);
    118116                void        PicoComputeBasalMelt(void);
    119117                void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r22957 r22974  
    660660                        analyses_temp[numanalyses++]=MasstransportAnalysisEnum;
    661661                        analyses_temp[numanalyses++]=ExtrudeFromBaseAnalysisEnum;
     662
    662663                        break;
    663664
     
    753754                        if(ismasstransport || isgroundingline){
    754755                                analyses_temp[numanalyses++]=MasstransportAnalysisEnum;
     756                                int  basalforcing_model;
     757                                iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
     758                                if(basalforcing_model==BasalforcingsPicoEnum){
     759                                        bool isplume;
     760                                        iomodel->FindConstant(&isplume,"md.basalforcings.isplume");
     761                                        if(isplume){
     762                                                analyses_temp[numanalyses++]=GLheightadvectionAnalysisEnum;
     763                                        }
     764                                }
    755765                        }
    756766                        if(issmb) analyses_temp[numanalyses++]=SmbAnalysisEnum;
     
    10331043                segmentlist[(numseg_offset+i)*4 + 3] = segment->y[1];
    10341044        }
     1045
    10351046        ISSM_MPI_Allreduce((void*)segmentlist,(void*)allsegmentlist,4*numseg,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
    10361047        delete segments;
     
    10441055                element->CreateDistanceInputFromSegmentlist(allsegmentlist,numseg,distanceenum);
    10451056        }
    1046 
    10471057
    10481058        /*Extrude if necessary*/
  • issm/trunk-jpl/src/c/cores/bmb_core.cpp

    r22918 r22974  
    2727                        femmodel->parameters->SetParam(BaseSlopeYEnum,InputToL2ProjectEnum);
    2828                        solutionsequence_linear(femmodel);
     29                        femmodel->SetCurrentConfiguration(GLheightadvectionAnalysisEnum);
     30                        solutionsequence_linear(femmodel);
    2931                }
    3032        }
  • issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp

    r22918 r22974  
    2121           }
    2222
    23         /*PICO nelt rate parameterization (Reese et al., 2018)*/
     23        /*PICO melt rate parameterization (Reese et al., 2018)*/
    2424   femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
    2525   UpdateBoxIdsPico(femmodel);
     
    3232        /*Optional buoyant plume melt rate parameterization (Lazeroms et al., 2018) */
    3333        femmodel->parameters->FindParam(&isplume,BasalforcingsPicoIsplumeEnum);
    34         if(isplume){
    35                    ComputeSubshelfSlopePlume(femmodel);
    36                         ComputeGroundingLineDepthPlume(femmodel);
    37          ComputeBasalMeltPlume(femmodel);
    38         }
     34        if(isplume) ComputeBasalMeltPlume(femmodel);
    3935}/*}}}*/
    4036
     
    5248        femmodel->elements->InputDuplicate(MaskGroundediceLevelsetEnum,DistanceToGroundinglineEnum);
    5349        femmodel->DistanceToFieldValue(MaskGroundediceLevelsetEnum,0.,DistanceToGroundinglineEnum);
    54        
     50
    5551        femmodel->elements->InputDuplicate(MaskIceLevelsetEnum,DistanceToCalvingfrontEnum);
    5652        femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0.,DistanceToCalvingfrontEnum);
     
    125121        IssmDouble* sumareas =xNew<IssmDouble>(num_basins*maxbox);
    126122        ISSM_MPI_Allreduce(boxareas,sumareas,num_basins*maxbox,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
    127         if(sumareas[0]==0){_error_("No elements in box 0, basal meltrates will be 0. Consider decreasing md.basalforcings.maxboxcount or refining your mesh!");}
     123        //if(sumareas[0]==0){_error_("No elements in box 0, basal meltrates will be 0. Consider decreasing md.basalforcings.maxboxcount or refining your mesh!");}
    128124       
    129125        /*Update parameters to keep track of the new areas in future calculations*/
     
    232228        xDelete<IssmDouble>(boxareas);
    233229}/*}}}*/
    234 void ComputeSubshelfSlopePlume(FemModel* femmodel){/*{{{*/
    235         for(int i=0;i<femmodel->elements->Size();i++){
    236                 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
    237                 element->PicoComputeBaseSlope();
    238         }
    239 }/*}}}*/
    240 void ComputeGroundingLineDepthPlume(FemModel* femmodel){/*{{{*/
    241         for(int i=0;i<femmodel->elements->Size();i++){
    242                 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
    243                 element->PicoComputeGroundingLineDepth();
    244         }
    245 }/*}}}*/
    246230void ComputeBasalMeltPlume(FemModel* femmodel){/*{{{*/
    247231        for(int i=0;i<femmodel->elements->Size();i++){
  • issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.h

    r22918 r22974  
    1515void UpdateBoxPico(FemModel* femmodel, int loopboxid);
    1616void ComputeAverageOceanvarsPico(FemModel* femmodel, int boxid);
    17 void ComputeSubshelfSlopePlume(FemModel* femmodel);
    18 void ComputeGroundingLineDepthPlume(FemModel* femmodel);
    1917void ComputeBasalMeltPlume(FemModel* femmodel);
    2018
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r22951 r22974  
    397397        BasalforcingsPicoBasinIdEnum,
    398398        BasalforcingsPicoBoxIdEnum,
    399         BasalforcingsPicoGroundingLineDepthEnum,
    400         BasalforcingsPicoShelfSlopeEnum,
    401399        BasalforcingsPicoSubShelfOceanOverturningEnum,
    402400        BasalforcingsPicoSubShelfOceanSalinityEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r22951 r22974  
    403403                case BasalforcingsPicoBasinIdEnum : return "BasalforcingsPicoBasinId";
    404404                case BasalforcingsPicoBoxIdEnum : return "BasalforcingsPicoBoxId";
    405                 case BasalforcingsPicoGroundingLineDepthEnum : return "BasalforcingsPicoGroundingLineDepth";
    406                 case BasalforcingsPicoShelfSlopeEnum : return "BasalforcingsPicoShelfSlope";
    407405                case BasalforcingsPicoSubShelfOceanOverturningEnum : return "BasalforcingsPicoSubShelfOceanOverturning";
    408406                case BasalforcingsPicoSubShelfOceanSalinityEnum : return "BasalforcingsPicoSubShelfOceanSalinity";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r22951 r22974  
    412412              else if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum;
    413413              else if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum;
    414               else if (strcmp(name,"BasalforcingsPicoGroundingLineDepth")==0) return BasalforcingsPicoGroundingLineDepthEnum;
    415               else if (strcmp(name,"BasalforcingsPicoShelfSlope")==0) return BasalforcingsPicoShelfSlopeEnum;
    416414              else if (strcmp(name,"BasalforcingsPicoSubShelfOceanOverturning")==0) return BasalforcingsPicoSubShelfOceanOverturningEnum;
    417415              else if (strcmp(name,"BasalforcingsPicoSubShelfOceanSalinity")==0) return BasalforcingsPicoSubShelfOceanSalinityEnum;
     
    506504              else if (strcmp(name,"InversionVelObs")==0) return InversionVelObsEnum;
    507505              else if (strcmp(name,"InversionVxObs")==0) return InversionVxObsEnum;
     506              else if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;
     507              else if (strcmp(name,"LevelsetfunctionSlopeX")==0) return LevelsetfunctionSlopeXEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;
    512               else if (strcmp(name,"LevelsetfunctionSlopeX")==0) return LevelsetfunctionSlopeXEnum;
    513               else if (strcmp(name,"LevelsetfunctionSlopeY")==0) return LevelsetfunctionSlopeYEnum;
     511              if (strcmp(name,"LevelsetfunctionSlopeY")==0) return LevelsetfunctionSlopeYEnum;
    514512              else if (strcmp(name,"LoadingforceX")==0) return LoadingforceXEnum;
    515513              else if (strcmp(name,"LoadingforceY")==0) return LoadingforceYEnum;
     
    629627              else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
    630628              else if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum;
     629              else if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
     630              else if (strcmp(name,"Surface")==0) return SurfaceEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
    635               else if (strcmp(name,"Surface")==0) return SurfaceEnum;
    636               else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
     634              if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
    637635              else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
    638636              else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum;
     
    752750              else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum;
    753751              else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
     752              else if (strcmp(name,"EplHeadStacked")==0) return EplHeadStackedEnum;
     753              else if (strcmp(name,"EplHead")==0) return EplHeadEnum;
    754754         else stage=7;
    755755   }
    756756   if(stage==7){
    757               if (strcmp(name,"EplHeadStacked")==0) return EplHeadStackedEnum;
    758               else if (strcmp(name,"EplHead")==0) return EplHeadEnum;
    759               else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
     757              if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
    760758              else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
    761759              else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
     
    875873              else if (strcmp(name,"Masscon")==0) return MassconEnum;
    876874              else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
     875              else if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
     876              else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
    881               else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
    882               else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
     880              if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
    883881              else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum;
    884882              else if (strcmp(name,"Matenhancedice")==0) return MatenhancediceEnum;
     
    998996              else if (strcmp(name,"Outputdefinition59")==0) return Outputdefinition59Enum;
    999997              else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
     998              else if (strcmp(name,"Outputdefinition60")==0) return Outputdefinition60Enum;
     999              else if (strcmp(name,"Outputdefinition61")==0) return Outputdefinition61Enum;
    10001000         else stage=9;
    10011001   }
    10021002   if(stage==9){
    1003               if (strcmp(name,"Outputdefinition60")==0) return Outputdefinition60Enum;
    1004               else if (strcmp(name,"Outputdefinition61")==0) return Outputdefinition61Enum;
    1005               else if (strcmp(name,"Outputdefinition62")==0) return Outputdefinition62Enum;
     1003              if (strcmp(name,"Outputdefinition62")==0) return Outputdefinition62Enum;
    10061004              else if (strcmp(name,"Outputdefinition63")==0) return Outputdefinition63Enum;
    10071005              else if (strcmp(name,"Outputdefinition64")==0) return Outputdefinition64Enum;
     
    11211119              else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
    11221120              else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum;
     1121              else if (strcmp(name,"Sset")==0) return SsetEnum;
     1122              else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
    11231123         else stage=10;
    11241124   }
    11251125   if(stage==10){
    1126               if (strcmp(name,"Sset")==0) return SsetEnum;
    1127               else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
    1128               else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
     1126              if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
    11291127              else if (strcmp(name,"StressbalanceConvergenceNumSteps")==0) return StressbalanceConvergenceNumStepsEnum;
    11301128              else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
Note: See TracChangeset for help on using the changeset viewer.