Changeset 14159


Ignore:
Timestamp:
12/13/12 15:14:13 (12 years ago)
Author:
Mathieu Morlighem
Message:

NEW: added weak balance thickness (Jonhson et al. 2013?)

Location:
issm/trunk-jpl/src/c
Files:
1 added
16 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h

    r13549 r14159  
    235235        BalancethicknessAnalysisEnum,
    236236        BalancethicknessSolutionEnum,
     237        WeakBalancethicknessAnalysisEnum,
     238        WeakBalancethicknessSolutionEnum,
    237239        BedSlopeAnalysisEnum,
    238240        BedSlopeSolutionEnum,
     
    355357        AdjointyEnum,
    356358        AdjointzEnum,
     359        BalancethicknessMisfitEnum,
    357360        BedSlopeXEnum,
    358361        BedSlopeYEnum,
  • issm/trunk-jpl/src/c/Makefile.am

    r14082 r14159  
    475475                                            ./modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp\
    476476                                                ./modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp\
    477                                                 ./solutions/balancethickness_core.cpp
     477                                                ./solutions/balancethickness_core.cpp \
     478                                                ./solutions/dummy_core.cpp
    478479#}}}
    479480#Slope sources  {{{
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r14082 r14159  
    702702                case ThicknessAlongGradientEnum: ThicknessAlongGradientx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
    703703                case ThicknessAcrossGradientEnum:ThicknessAcrossGradientx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
     704                case BalancethicknessMisfitEnum:BalancethicknessMisfitx(responses,process_units,weight_index); break;
    704705                case TotalSmbEnum:                                      this->TotalSmbx(responses,process_units); break;
    705706                case RheologyBbarAbsGradientEnum:RheologyBbarAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
     
    13581359#endif
    13591360#ifdef _HAVE_CONTROL_
     1361void FemModel::BalancethicknessMisfitx(IssmDouble* presponse,bool process_units,int weight_index){/*{{{*/
     1362
     1363        IssmDouble J = 0;
     1364        IssmDouble J_sum;
     1365
     1366        for(int i=0;i<this->elements->Size();i++){
     1367                Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
     1368                J+=element->BalancethicknessMisfit(process_units,weight_index);
     1369        }
     1370        #ifdef _HAVE_MPI_
     1371        MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
     1372        MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
     1373        J=J_sum;
     1374        #endif
     1375
     1376        /*Assign output pointers: */
     1377        *presponse=J;
     1378
     1379}/*}}}*/
    13601380void FemModel::ThicknessAbsGradientx( IssmDouble* pJ, bool process_units, int weight_index){/*{{{*/
    13611381
  • issm/trunk-jpl/src/c/classes/FemModel.h

    r14082 r14159  
    8080                void IceVolumex(IssmDouble* pV,bool process_units);
    8181                void ElementResponsex(IssmDouble* presponse,int response_enum,bool process_units);
     82                void BalancethicknessMisfitx(IssmDouble* pV,bool process_units,int weight_index);
    8283                #endif
    8384                #ifdef  _HAVE_DAKOTA_
  • issm/trunk-jpl/src/c/classes/objects/Elements/Element.h

    r13892 r14159  
    110110                virtual IssmDouble ThicknessAlongGradient(bool process_units,int weight_index)=0;
    111111                virtual IssmDouble ThicknessAcrossGradient(bool process_units,int weight_index)=0;
     112                virtual IssmDouble BalancethicknessMisfit(bool process_units,int weight_index)=0;
    112113                virtual IssmDouble RheologyBbarAbsGradient(bool process_units,int weight_index)=0;
    113114                virtual IssmDouble DragCoefficientAbsGradient(bool process_units,int weight_index)=0;
  • issm/trunk-jpl/src/c/classes/objects/Elements/Penta.h

    r13903 r14159  
    166166                IssmDouble ThicknessAlongGradient( bool process_units,int weight_index){_error_("not supported");};
    167167                IssmDouble ThicknessAcrossGradient(bool process_units,int weight_index){_error_("not supported");};
     168                IssmDouble BalancethicknessMisfit(bool process_units,int weight_index){_error_("not supported");};
    168169                void   InputControlUpdate(IssmDouble scalar,bool save_parameter);
    169170                #endif
  • issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp

    r13909 r14159  
    15501550                                                for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
    15511551                                                this->inputs->AddInput(new ControlInput(VyEnum,TriaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     1552                                        }
     1553                                        break;
     1554                                case ThicknessEnum:
     1555                                        if (iomodel->Data(ThicknessEnum)){
     1556                                                for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(ThicknessEnum)[tria_vertex_ids[j]-1];
     1557                                                for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
     1558                                                for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
     1559                                                this->inputs->AddInput(new ControlInput(ThicknessEnum,TriaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
    15521560                                        }
    15531561                                        break;
     
    34593467
    34603468#ifdef _HAVE_CONTROL_
     3469/*FUNCTION Tria::BalancethicknessMisfit{{{*/
     3470IssmDouble Tria::BalancethicknessMisfit(bool process_units,int weight_index){
     3471
     3472        /* Intermediaries */
     3473        IssmDouble Jelem = 0;
     3474        IssmDouble weight;
     3475        IssmDouble Jdet,temp;
     3476        IssmDouble xyz_list[NUMVERTICES][3];
     3477        IssmDouble dH[2];
     3478        IssmDouble vx,vy,H;
     3479        IssmDouble dvx[2],dvy[2];
     3480        IssmDouble dhdt,basal_melting,surface_mass_balance;
     3481        GaussTria *gauss = NULL;
     3482
     3483        /*If on water, return 0: */
     3484        if(IsOnWater()) return 0;
     3485
     3486        /*Retrieve all inputs we will be needing: */
     3487        GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
     3488        Input* weights_input              = inputs->GetInput(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
     3489        Input* thickness_input            = inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
     3490        Input* vx_input                   = inputs->GetInput(VxEnum);                                 _assert_(vx_input);
     3491        Input* vy_input                   = inputs->GetInput(VyEnum);                                 _assert_(vy_input);
     3492        Input* surface_mass_balance_input = inputs->GetInput(SurfaceforcingsMassBalanceEnum);         _assert_(surface_mass_balance_input);
     3493        Input* basal_melting_input        = inputs->GetInput(BasalforcingsMeltingRateEnum);           _assert_(basal_melting_input);
     3494        Input* dhdt_input                 = inputs->GetInput(BalancethicknessThickeningRateEnum);     _assert_(dhdt_input);
     3495
     3496        /* Start looping on the number of gaussian points: */
     3497        gauss=new GaussTria(2);
     3498        for(int ig=gauss->begin();ig<gauss->end();ig++){
     3499
     3500                gauss->GaussPoint(ig);
     3501
     3502                /* Get Jacobian determinant: */
     3503                GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss);
     3504
     3505                /*Get all parameters at gaussian point*/
     3506                weights_input->GetInputValue(&weight,gauss,weight_index);
     3507                thickness_input->GetInputValue(&H, gauss);
     3508                thickness_input->GetInputDerivativeValue(&dH[0],&xyz_list[0][0],gauss);
     3509                surface_mass_balance_input->GetInputValue(&surface_mass_balance,gauss);
     3510                basal_melting_input->GetInputValue(&basal_melting,gauss);
     3511                dhdt_input->GetInputValue(&dhdt,gauss);
     3512                vx_input->GetInputValue(&vx,gauss);
     3513                vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss);
     3514                vy_input->GetInputValue(&vy,gauss);
     3515                vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss);
     3516
     3517                /*Weak balance thickness J = 1/2 (div(Hv)-a)^2*/
     3518                temp  = vx*dH[0]+vy*dH[1]+H*(dvx[0]+dvy[1]) - (surface_mass_balance-basal_melting-dhdt);
     3519                Jelem+=weight*1/2*temp*temp*Jdet*gauss->weight;
     3520        }
     3521
     3522        /*Clean up and return*/
     3523        delete gauss;
     3524        return Jelem;
     3525}
     3526/*}}}*/
    34613527/*FUNCTION Tria::InputControlUpdate{{{*/
    34623528void  Tria::InputControlUpdate(IssmDouble scalar,bool save_parameter){
     
    35803646                        GradjVyBalancedthickness(gradient,control_index);
    35813647                        break;
     3648                case ThicknessEnum:
     3649                        GradjThicknessWeakBalancedthickness(gradient,control_index);
     3650                        break;
    35823651                default:
    35833652                        _error_("control type not supported yet: " << control_type);
     
    35973666                case ThicknessAlongGradientEnum:
    35983667                case ThicknessAcrossGradientEnum:
     3668                case BalancethicknessMisfitEnum:
    35993669                case SurfaceAbsVelMisfitEnum:
    36003670                case SurfaceRelVelMisfitEnum:
     
    40424112        /*Clean up and return*/
    40434113        delete gauss;
     4114}
     4115/*}}}*/
     4116/*FUNCTION Tria::GradjThicknessWeakBalancedthickness{{{*/
     4117void  Tria::GradjThicknessWeakBalancedthickness(Vector<IssmDouble>* gradient,int control_index){
     4118
     4119        /*Intermediaries */
     4120        int         i,resp;
     4121        int         vertexpidlist[NUMVERTICES];
     4122        IssmDouble  Jdet;
     4123        IssmDouble  thickness,thicknessobs,weight;
     4124        int         num_responses;
     4125        IssmDouble  xyz_list[NUMVERTICES][3];
     4126        IssmDouble  basis[3];
     4127        IssmDouble  dbasis[NDOF2][NUMVERTICES];
     4128        IssmDouble  dH[2];
     4129        IssmDouble  vx,vy,vel;
     4130        IssmDouble  dvx[2],dvy[2];
     4131        IssmDouble dhdt,basal_melting,surface_mass_balance;
     4132        GaussTria *gauss     = NULL;
     4133        int       *responses = NULL;
     4134        IssmDouble grade_g[NUMVERTICES] = {0.0};
     4135
     4136        /* Get node coordinates and dof list: */
     4137        GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
     4138        GradientIndexing(&vertexpidlist[0],control_index);
     4139
     4140        /*Retrieve all inputs and parameters*/
     4141        GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
     4142        this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
     4143        this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
     4144        Input* thickness_input            = inputs->GetInput(ThicknessEnum);                          _assert_(thickness_input);
     4145        Input* thicknessobs_input         = inputs->GetInput(InversionThicknessObsEnum);              _assert_(thicknessobs_input);
     4146        Input* weights_input              = inputs->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
     4147        Input* vx_input                   = inputs->GetInput(VxEnum);                                 _assert_(vx_input);
     4148        Input* vy_input                   = inputs->GetInput(VyEnum);                                 _assert_(vy_input);
     4149        Input* surface_mass_balance_input = inputs->GetInput(SurfaceforcingsMassBalanceEnum);         _assert_(surface_mass_balance_input);
     4150        Input* basal_melting_input        = inputs->GetInput(BasalforcingsMeltingRateEnum);           _assert_(basal_melting_input);
     4151        Input* dhdt_input                 = inputs->GetInput(BalancethicknessThickeningRateEnum);     _assert_(dhdt_input);
     4152
     4153        /* Start  looping on the number of gaussian points: */
     4154        gauss=new GaussTria(2);
     4155        for(int ig=gauss->begin();ig<gauss->end();ig++){
     4156
     4157                gauss->GaussPoint(ig);
     4158
     4159                GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss);
     4160                GetNodalFunctions(basis, gauss);
     4161                GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
     4162
     4163                thickness_input->GetInputValue(&thickness, gauss);
     4164                thickness_input->GetInputDerivativeValue(&dH[0],&xyz_list[0][0],gauss);
     4165                thicknessobs_input->GetInputValue(&thicknessobs, gauss);
     4166
     4167                /*Loop over all requested responses*/
     4168                for(resp=0;resp<num_responses;resp++) switch(responses[resp]){
     4169
     4170                        case ThicknessAbsMisfitEnum:
     4171                                weights_input->GetInputValue(&weight, gauss,resp);
     4172                                for(i=0;i<NUMVERTICES;i++) grade_g[i]+= (thicknessobs-thickness)*weight*Jdet*gauss->weight*basis[i];
     4173                                break;
     4174                        case ThicknessAbsGradientEnum:
     4175                                weights_input->GetInputValue(&weight, gauss,resp);
     4176                                for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*dH[0]*dbasis[0][i]*Jdet*gauss->weight;
     4177                                for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*dH[1]*dbasis[1][i]*Jdet*gauss->weight;
     4178                                break;
     4179                        case ThicknessAlongGradientEnum:
     4180                                weights_input->GetInputValue(&weight, gauss,resp);
     4181                                vx_input->GetInputValue(&vx,gauss);
     4182                                vy_input->GetInputValue(&vy,gauss);
     4183                                vel = sqrt(vx*vx+vy*vy);
     4184                                vx  = vx/(vel+1.e-9);
     4185                                vy  = vy/(vel+1.e-9);
     4186                                for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*(dH[0]*vx+dH[1]*vy)*(dbasis[0][i]*vx+dbasis[1][i]*vy)*Jdet*gauss->weight;
     4187                                break;
     4188                        case ThicknessAcrossGradientEnum:
     4189                                weights_input->GetInputValue(&weight, gauss,resp);
     4190                                vx_input->GetInputValue(&vx,gauss);
     4191                                vy_input->GetInputValue(&vy,gauss);
     4192                                vel = sqrt(vx*vx+vy*vy);
     4193                                vx  = vx/(vel+1.e-9);
     4194                                vy  = vy/(vel+1.e-9);
     4195                                for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*(dH[0]*(-vy)+dH[1]*vx)*(dbasis[0][i]*(-vy)+dbasis[1][i]*vx)*Jdet*gauss->weight;
     4196                                break;
     4197                        case BalancethicknessMisfitEnum:
     4198                                weights_input->GetInputValue(&weight, gauss,resp);
     4199                                surface_mass_balance_input->GetInputValue(&surface_mass_balance,gauss);
     4200                                basal_melting_input->GetInputValue(&basal_melting,gauss);
     4201                                dhdt_input->GetInputValue(&dhdt,gauss);
     4202                                vx_input->GetInputValue(&vx,gauss);
     4203                                vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss);
     4204                                vy_input->GetInputValue(&vy,gauss);
     4205                                vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss);
     4206                                for(i=0;i<NUMVERTICES;i++){
     4207                                        grade_g[i]+= - weight*Jdet*gauss->weight*(
     4208                                                                (vx*dH[0]+vy*dH[1] + thickness*(dvx[0]+dvy[1]))*(vx*dbasis[0][i]+ vy*dbasis[1][i] + basis[i]*(dvx[0]+dvy[1]))
     4209                                                                -(surface_mass_balance-basal_melting-dhdt)*(vx*dbasis[0][i]+ vy*dbasis[1][i] + basis[i]*(dvx[0]+dvy[1]))
     4210                                                                );
     4211                                }
     4212                                break;
     4213                        default:
     4214                                _error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
     4215                }
     4216        }
     4217
     4218
     4219        gradient->SetValues(NUMVERTICES,vertexpidlist,grade_g,ADD_VAL);
     4220
     4221        /*Clean up and return*/
     4222        delete gauss;
     4223        xDelete<int>(responses);
    40444224}
    40454225/*}}}*/
  • issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h

    r13892 r14159  
    153153                void   GradjVxBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
    154154                void   GradjVyBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
     155                void   GradjThicknessWeakBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
    155156                void   GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data);
    156157                void   SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index);
     
    164165                IssmDouble ThicknessAlongGradient( bool process_units,int weight_index);
    165166                IssmDouble ThicknessAcrossGradient(bool process_units,int weight_index);
     167                IssmDouble BalancethicknessMisfit(     bool process_units,int weight_index);
    166168                IssmDouble SurfaceRelVelMisfit(    bool process_units,int weight_index);
    167169                IssmDouble SurfaceLogVelMisfit(    bool process_units,int weight_index);
  • issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp

    r13549 r14159  
    238238                case BalancethicknessAnalysisEnum : return "BalancethicknessAnalysis";
    239239                case BalancethicknessSolutionEnum : return "BalancethicknessSolution";
     240                case WeakBalancethicknessAnalysisEnum : return "WeakBalancethicknessAnalysis";
     241                case WeakBalancethicknessSolutionEnum : return "WeakBalancethicknessSolution";
    240242                case BedSlopeAnalysisEnum : return "BedSlopeAnalysis";
    241243                case BedSlopeSolutionEnum : return "BedSlopeSolution";
     
    346348                case AdjointyEnum : return "Adjointy";
    347349                case AdjointzEnum : return "Adjointz";
     350                case BalancethicknessMisfitEnum : return "BalancethicknessMisfit";
    348351                case BedSlopeXEnum : return "BedSlopeX";
    349352                case BedSlopeYEnum : return "BedSlopeY";
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp

    r13622 r14159  
    4545                        case VxEnum:   iomodel->FetchData(1,VxEnum); break;
    4646                        case VyEnum:   iomodel->FetchData(1,VyEnum); break;
    47                         case FrictionCoefficientEnum: iomodel->FetchData(1,FrictionCoefficientEnum); break;
    48                         case MaterialsRheologyBbarEnum:    iomodel->FetchData(1,MaterialsRheologyBEnum); break;
    49                         case MaterialsRheologyZbarEnum:    iomodel->FetchData(1,MaterialsRheologyZEnum); break;
     47                        case ThicknessEnum:             iomodel->FetchData(1,ThicknessEnum); break;
     48                        case FrictionCoefficientEnum:   iomodel->FetchData(1,FrictionCoefficientEnum); break;
     49                        case MaterialsRheologyBbarEnum: iomodel->FetchData(1,MaterialsRheologyBEnum); break;
     50                        case MaterialsRheologyZbarEnum: iomodel->FetchData(1,MaterialsRheologyZEnum); break;
    5051                        default: _error_("Control " << EnumToStringx(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])) << " not implemented yet");
    5152                }
  • issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp

    r13549 r14159  
    242242              else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
    243243              else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum;
     244              else if (strcmp(name,"WeakBalancethicknessAnalysis")==0) return WeakBalancethicknessAnalysisEnum;
     245              else if (strcmp(name,"WeakBalancethicknessSolution")==0) return WeakBalancethicknessSolutionEnum;
    244246              else if (strcmp(name,"BedSlopeAnalysis")==0) return BedSlopeAnalysisEnum;
    245247              else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
     
    259261              else if (strcmp(name,"NoneAnalysis")==0) return NoneAnalysisEnum;
    260262              else if (strcmp(name,"PrognosticAnalysis")==0) return PrognosticAnalysisEnum;
    261               else if (strcmp(name,"PrognosticSolution")==0) return PrognosticSolutionEnum;
    262               else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
    263263         else stage=3;
    264264   }
    265265   if(stage==3){
    266               if (strcmp(name,"SurfaceSlopeAnalysis")==0) return SurfaceSlopeAnalysisEnum;
     266              if (strcmp(name,"PrognosticSolution")==0) return PrognosticSolutionEnum;
     267              else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
     268              else if (strcmp(name,"SurfaceSlopeAnalysis")==0) return SurfaceSlopeAnalysisEnum;
    267269              else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
    268270              else if (strcmp(name,"SurfaceSlopeXAnalysis")==0) return SurfaceSlopeXAnalysisEnum;
     
    353355              else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
    354356              else if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
     357              else if (strcmp(name,"BalancethicknessMisfit")==0) return BalancethicknessMisfitEnum;
    355358              else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
    356359              else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
     
    381384              else if (strcmp(name,"QmuMelting")==0) return QmuMeltingEnum;
    382385              else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum;
    383               else if (strcmp(name,"SegmentOnIceShelf")==0) return SegmentOnIceShelfEnum;
    384               else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
    385               else if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum;
    386386         else stage=4;
    387387   }
    388388   if(stage==4){
    389               if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
     389              if (strcmp(name,"SegmentOnIceShelf")==0) return SegmentOnIceShelfEnum;
     390              else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
     391              else if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum;
     392              else if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
    390393              else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
    391394              else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
     
    504507              else if (strcmp(name,"PetscOptionsStrings")==0) return PetscOptionsStringsEnum;
    505508              else if (strcmp(name,"QmuErrName")==0) return QmuErrNameEnum;
    506               else if (strcmp(name,"QmuInName")==0) return QmuInNameEnum;
    507               else if (strcmp(name,"QmuOutName")==0) return QmuOutNameEnum;
    508               else if (strcmp(name,"Regular")==0) return RegularEnum;
    509509         else stage=5;
    510510   }
    511511   if(stage==5){
    512               if (strcmp(name,"Scaled")==0) return ScaledEnum;
     512              if (strcmp(name,"QmuInName")==0) return QmuInNameEnum;
     513              else if (strcmp(name,"QmuOutName")==0) return QmuOutNameEnum;
     514              else if (strcmp(name,"Regular")==0) return RegularEnum;
     515              else if (strcmp(name,"Scaled")==0) return ScaledEnum;
    513516              else if (strcmp(name,"Separate")==0) return SeparateEnum;
    514517              else if (strcmp(name,"Sset")==0) return SsetEnum;
  • issm/trunk-jpl/src/c/solutions/AdjointCorePointerFromSolutionEnum.cpp

    r13855 r14159  
    3333                case BalancethicknessSolutionEnum:
    3434                        adjointcore=&adjointbalancethickness_core;
     35                case WeakBalancethicknessSolutionEnum:
     36                        adjointcore=&dummy_core;
    3537                        break;
    3638                default:
  • issm/trunk-jpl/src/c/solutions/AnalysisConfiguration.cpp

    r13621 r14159  
    8383                        break;
    8484
     85                case WeakBalancethicknessSolutionEnum:
     86                        numanalyses=1;
     87                        analyses=xNew<int>(numanalyses);
     88                        analyses[0]=BalancethicknessAnalysisEnum;
     89                        break;
     90
    8591                case SurfaceSlopeSolutionEnum:
    8692                        numanalyses=1;
  • issm/trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp

    r13855 r14159  
    6060                        #endif
    6161                        break;
     62                case WeakBalancethicknessSolutionEnum:
     63                        #ifdef _HAVE_BALANCED_
     64                        solutioncore=&dummy_core;
     65                        #else
     66                        _error_("ISSM was not compiled with balanced capabilities. Exiting");
     67                        #endif
     68                        break;
    6269                case HydrologySolutionEnum:
    6370                        #ifdef _HAVE_HYDROLOGY_
  • issm/trunk-jpl/src/c/solutions/objectivefunction.cpp

    r13764 r14159  
    4646                femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum);
    4747        }
     48        else if (solution_type==WeakBalancethicknessSolutionEnum){
     49                femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum);
     50        }
    4851        else{
    4952                _error_("Solution " << EnumToStringx(solution_type) << " not implemented yet");
     
    6366                solver_linear(femmodel);
    6467        }
     68        else if (solution_type==WeakBalancethicknessSolutionEnum){
     69                /*Don't do anything*/
     70        }
    6571        else{
    6672                _error_("Solution " << EnumToStringx(solution_type) << " not implemented yet");
  • issm/trunk-jpl/src/c/solutions/solutions.h

    r13855 r14159  
    3333void dakota_core(FemModel* femmodel);
    3434void ad_core(FemModel* femmodel);
     35void dummy_core(FemModel* femmodel);
    3536IssmDouble objectivefunction(IssmDouble search_scalar,OptArgs* optargs);
    3637
Note: See TracChangeset for help on using the changeset viewer.