Changeset 11984


Ignore:
Timestamp:
04/13/12 16:52:42 (13 years ago)
Author:
cborstad
Message:

added an inversion threshold value for calving or catastrophic fracture propagation

Location:
issm/branches/trunk-jpl-damage/src
Files:
1 added
26 edited

Legend:

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

    r11708 r11984  
    8282        InversionStepThresholdEnum,
    8383        InversionThicknessObsEnum,
     84        InversionThreshParametersEnum,
    8485        InversionVelObsEnum,
    8586        InversionVxObsEnum,
  • issm/branches/trunk-jpl-damage/src/c/modules/EnumToStringx/EnumToStringx.cpp

    r11708 r11984  
    8686                case InversionStepThresholdEnum : return "InversionStepThreshold";
    8787                case InversionThicknessObsEnum : return "InversionThicknessObs";
     88                case InversionThreshParametersEnum : return "InversionThreshParameters";
    8889                case InversionVelObsEnum : return "InversionVelObs";
    8990                case InversionVxObsEnum : return "InversionVxObs";
  • issm/branches/trunk-jpl-damage/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp

    r11462 r11984  
    4040        iomodel->FetchDataToInput(elements,InversionThicknessObsEnum);
    4141
    42         iomodel->FetchData(4,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
     42        iomodel->FetchData(5,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,InversionThreshParametersEnum);
    4343        for(i=0;i<num_control_type;i++){
    4444                switch((int)iomodel->Data(InversionControlParametersEnum)[i]){
     
    6767       
    6868        /*Free data: */
    69         iomodel->DeleteData(1+4+6,MeshElementsEnum,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,MaterialsRheologyZEnum);
     69        iomodel->DeleteData(1+5+6,MeshElementsEnum,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,InversionThreshParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,MaterialsRheologyZEnum);
    7070}
  • issm/branches/trunk-jpl-damage/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp

    r11462 r11984  
    4949        if(dim==3)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
    5050        #endif
    51         if(control_analysis)iomodel->FetchData(3,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
     51        if(control_analysis)iomodel->FetchData(4,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum,InversionThreshParametersEnum);
    5252       
    5353        /*Create elements and materials: */
     
    6767       
    6868        /*Free data: */
    69         iomodel->DeleteData(10,MeshElementsEnum,MeshElementconnectivityEnum,MeshUpperelementsEnum,MeshLowerelementsEnum,
     69        iomodel->DeleteData(11,MeshElementsEnum,MeshElementconnectivityEnum,MeshUpperelementsEnum,MeshLowerelementsEnum,
    7070                                MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsRheologyZEnum,InversionControlParametersEnum,InversionMinParametersEnum,
    71                                 InversionMaxParametersEnum);
     71                                InversionMaxParametersEnum,InversionThreshParametersEnum);
    7272
    7373        /*Add new constrant material property tgo materials, at the end: */
  • issm/branches/trunk-jpl-damage/src/c/modules/StringToEnumx/StringToEnumx.cpp

    r11708 r11984  
    8787              else if (strcmp(name,"InversionStepThreshold")==0) return InversionStepThresholdEnum;
    8888              else if (strcmp(name,"InversionThicknessObs")==0) return InversionThicknessObsEnum;
     89              else if (strcmp(name,"InversionThreshParameters")==0) return InversionThreshParametersEnum;
    8990              else if (strcmp(name,"InversionVelObs")==0) return InversionVelObsEnum;
    9091              else if (strcmp(name,"InversionVxObs")==0) return InversionVxObsEnum;
     
    136137              else if (strcmp(name,"MiscellaneousName")==0) return MiscellaneousNameEnum;
    137138              else if (strcmp(name,"PrognosticHydrostaticAdjustment")==0) return PrognosticHydrostaticAdjustmentEnum;
    138               else if (strcmp(name,"PrognosticMinThickness")==0) return PrognosticMinThicknessEnum;
    139139         else stage=2;
    140140   }
    141141   if(stage==2){
    142               if (strcmp(name,"PrognosticPenaltyFactor")==0) return PrognosticPenaltyFactorEnum;
     142              if (strcmp(name,"PrognosticMinThickness")==0) return PrognosticMinThicknessEnum;
     143              else if (strcmp(name,"PrognosticPenaltyFactor")==0) return PrognosticPenaltyFactorEnum;
    143144              else if (strcmp(name,"PrognosticSpcthickness")==0) return PrognosticSpcthicknessEnum;
    144145              else if (strcmp(name,"PrognosticStabilization")==0) return PrognosticStabilizationEnum;
     
    259260              else if (strcmp(name,"Matpar")==0) return MatparEnum;
    260261              else if (strcmp(name,"Node")==0) return NodeEnum;
    261               else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"Param")==0) return ParamEnum;
     265              if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
     266              else if (strcmp(name,"Param")==0) return ParamEnum;
    266267              else if (strcmp(name,"PattynIceFront")==0) return PattynIceFrontEnum;
    267268              else if (strcmp(name,"Pengrid")==0) return PengridEnum;
     
    382383              else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
    383384              else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
    384               else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
     388              if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
     389              else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
    389390              else if (strcmp(name,"DoubleVecExternalResult")==0) return DoubleVecExternalResultEnum;
    390391              else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
  • issm/branches/trunk-jpl-damage/src/c/objects/Elements/Penta.cpp

    r11708 r11984  
    16891689        double  cmmininputs[6];
    16901690        double  cmmaxinputs[6];
     1691        double  cmthreshinputs[6];
    16911692
    16921693        double  yts;
     
    17211722                                                for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
    17221723                                                for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
    1723                                                 this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     1724                                                for(j=0;j<6;j++)cmthreshinputs[j]=iomodel->Data(InversionThreshParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
     1725                                                this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,cmthreshinputs,i+1));
    17241726                                        }
    17251727                                        break;
     
    17291731                                                for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
    17301732                                                for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
    1731                                                 this->inputs->AddInput(new ControlInput(VxEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     1733                                                for(j=0;j<6;j++)cmthreshinputs[j]=iomodel->Data(InversionThreshParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
     1734                                                this->inputs->AddInput(new ControlInput(VxEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,cmthreshinputs,i+1));
    17321735                                        }
    17331736                                        break;
     
    17371740                                                for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
    17381741                                                for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
    1739                                                 this->inputs->AddInput(new ControlInput(VyEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     1742                                                for(j=0;j<6;j++)cmthreshinputs[j]=iomodel->Data(InversionThreshParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
     1743                                                this->inputs->AddInput(new ControlInput(VyEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,cmthreshinputs,i+1));
    17401744                                        }
    17411745                                        break;
     
    17451749                                                for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i];
    17461750                                                for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i];
    1747                                                 this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     1751                                                for(j=0;j<6;j++)cmthreshinputs[j]=iomodel->Data(InversionThreshParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
     1752                                                this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,cmthreshinputs,i+1));
    17481753                                        }
    17491754                                        break;
  • issm/branches/trunk-jpl-damage/src/c/objects/Elements/Tria.cpp

    r11708 r11984  
    15281528        double cmmininputs[3];
    15291529        double cmmaxinputs[3];
     1530        double cmthreshinputs[3];
    15301531        bool   control_analysis=false;
    15311532        int    num_control_type;
     
    15541555                                                for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
    15551556                                                for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
    1556                                                 this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,TriaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     1557                                                for(j=0;j<3;j++)cmthreshinputs[j]=iomodel->Data(InversionThreshParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
     1558                                                this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,TriaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,cmthreshinputs,i+1));
    15571559                                        }
    15581560                                        break;
     
    15621564                                                for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
    15631565                                                for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
    1564                                                 this->inputs->AddInput(new ControlInput(VxEnum,TriaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     1566                                                for(j=0;j<3;j++)cmthreshinputs[j]=iomodel->Data(InversionThreshParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
     1567                                                this->inputs->AddInput(new ControlInput(VxEnum,TriaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,cmthreshinputs,i+1));
    15651568                                        }
    15661569                                        break;
     
    15701573                                                for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
    15711574                                                for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
    1572                                                 this->inputs->AddInput(new ControlInput(VyEnum,TriaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     1575                                                for(j=0;j<3;j++)cmthreshinputs[j]=iomodel->Data(InversionThreshParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
     1576                                                this->inputs->AddInput(new ControlInput(VyEnum,TriaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,cmthreshinputs,i+1));
    15731577                                        }
    15741578                                        break;
     
    15781582                                                for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
    15791583                                                for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
    1580                                                 this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,TriaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     1584                                                for(j=0;j<3;j++)cmthreshinputs[j]=iomodel->Data(InversionThreshParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
     1585                                                this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,TriaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,cmthreshinputs,i+1));
    15811586                                        }
    15821587                                        break;
  • issm/branches/trunk-jpl-damage/src/c/objects/Inputs/BoolInput.cpp

    r11708 r11984  
    218218/*}}}*/
    219219/*FUNCTION BoolInput::Constrain{{{1*/
    220 void BoolInput::Constrain(double cm_min, double cm_max){
     220void BoolInput::Constrain(double cm_min, double cm_max, double cm_thresh){
    221221
    222222        if(!isnan(cm_min)) if (this->value<cm_min)this->value=cm_min;
    223223        if(!isnan(cm_max)) if (this->value>cm_max)this->value=cm_max;
     224        if(!isnan(cm_thresh)) if (this->value<cm_thresh)this->value=cm_min;
    224225
    225226}
  • issm/branches/trunk-jpl-damage/src/c/objects/Inputs/BoolInput.h

    r11708 r11984  
    7878                void ArtificialNoise(double min,double max){_error_("not implemented yet");};
    7979                void AXPY(Input* xinput,double scalar);
    80                 void Constrain(double cm_min, double cm_max);
     80                void Constrain(double cm_min, double cm_max, double cm_thresh);
    8181                void Extrude(void);
    8282                void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
  • issm/branches/trunk-jpl-damage/src/c/objects/Inputs/ControlInput.cpp

    r11708 r11984  
    2525        minvalues   = NULL;
    2626        maxvalues   = NULL;
     27        threshvalues   = NULL;
    2728        gradient    = NULL;
    2829}
    2930/*}}}*/
    30 /*FUNCTION ControlInput::ControlInput(int enum_type,int enum_input,double* pvalues,double* pmin,double* pmax,int id){{{1*/
    31 ControlInput::ControlInput(int in_enum_type,int enum_input,double* pvalues,double* pmin,double* pmax,int id){
     31/*FUNCTION ControlInput::ControlInput(int enum_type,int enum_input,double* pvalues,double* pmin,double* pmax,double* pthresh,int id){{{1*/
     32ControlInput::ControlInput(int in_enum_type,int enum_input,double* pvalues,double* pmin,double* pmax,double* pthresh,int id){
    3233
    3334        control_id=id;
     
    4041                        minvalues  =new TriaP1Input(enum_type,pmin);
    4142                        maxvalues  =new TriaP1Input(enum_type,pmax);
     43                        threshvalues  =new TriaP1Input(enum_type,pthresh);
    4244                        break;
    4345                case PentaP1InputEnum:
     
    4648                        minvalues  =new PentaP1Input(enum_type,pmin);
    4749                        maxvalues  =new PentaP1Input(enum_type,pmax);
     50                        threshvalues  =new TriaP1Input(enum_type,pthresh);
    4851                        break;
    4952                default:
     
    5962        delete minvalues;
    6063        delete maxvalues;
     64        delete threshvalues;
    6165        delete gradient;
    6266}
     
    344348        delete values; this->values=newvalues;
    345349}/*}}}*/
    346 /*FUNCTION ControlInput::Constrain(double min, double max){{{1*/
    347 void ControlInput::Constrain(double min, double max){
    348            values->Constrain(min,max);
     350/*FUNCTION ControlInput::Constrain(double min, double max, double thresh){{{1*/
     351void ControlInput::Constrain(double min, double max, double thresh){
     352           values->Constrain(min,max,thresh);
    349353}/*}}}*/
    350354/*FUNCTION ControlInput::Extrude{{{1*/
  • issm/branches/trunk-jpl-damage/src/c/objects/Inputs/ControlInput.h

    r11708 r11984  
    2323                Input* minvalues;
    2424                Input* maxvalues;
     25                Input* threshvalues;
    2526                Input* gradient;
    2627
    2728                /*ControlInput constructors, destructors: {{{1*/
    2829                ControlInput();
    29                 ControlInput(int enum_type,int enum_input,double* pvalues,double* pmin,double* pmax,int id);
     30                ControlInput(int enum_type,int enum_input,double* pvalues,double* pmin,double* pmax,double* pthresh,int id);
    3031                ~ControlInput();
    3132                /*}}}*/
     
    7980                void AXPY(Input* xinput,double scalar){_error_("not implemented yet");};
    8081                void Constrain(void);
    81                 void Constrain(double min,double max);
     82                void Constrain(double min,double max, double thresh);
    8283                double InfinityNorm(void){_error_("not implemented yet");};
    8384                double Max(void){_error_("not implemented yet");};
  • issm/branches/trunk-jpl-damage/src/c/objects/Inputs/DatasetInput.h

    r11708 r11984  
    4949                void Configure(Parameters* parameters);
    5050                /*}}}*/
    51                 /*numeriics: {{{1*/
     51                /*numerics: {{{1*/
    5252                void GetInputValue(bool* pvalue){_error_("not implemented yet");};
    5353                void GetInputValue(int* pvalue){_error_("not implemented yet");};
     
    7474                void AXPY(Input* xinput,double scalar){_error_("not implemented yet");};
    7575                void Constrain(void){_error_("not implemented yet");};
    76                 void Constrain(double min,double max){_error_("not implemented yet");};
     76                void Constrain(double min,double max, double thresh){_error_("not implemented yet");};
    7777                double InfinityNorm(void){_error_("not implemented yet");};
    7878                double Max(void){_error_("not implemented yet");};
  • issm/branches/trunk-jpl-damage/src/c/objects/Inputs/DoubleInput.cpp

    r11708 r11984  
    282282/*}}}*/
    283283/*FUNCTION DoubleInput::Constrain{{{1*/
    284 void DoubleInput::Constrain(double cm_min, double cm_max){
     284void DoubleInput::Constrain(double cm_min, double cm_max, double cm_thresh){
    285285
    286286        if(!isnan(cm_min)) if (this->value<cm_min)this->value=cm_min;
    287287        if(!isnan(cm_max)) if (this->value>cm_max)this->value=cm_max;
     288        if(!isnan(cm_thresh)) if (this->value<cm_thresh)this->value=cm_min;
    288289
    289290}
  • issm/branches/trunk-jpl-damage/src/c/objects/Inputs/DoubleInput.h

    r11708 r11984  
    7272                void ArtificialNoise(double min,double max){_error_("not implemented yet");};
    7373                void AXPY(Input* xinput,double scalar);
    74                 void Constrain(double cm_min, double cm_max);
     74                void Constrain(double cm_min, double cm_max, double cm_thresh);
    7575                double InfinityNorm(void){_error_("not implemented yet");};
    7676                double Max(void);
  • issm/branches/trunk-jpl-damage/src/c/objects/Inputs/Input.h

    r11708 r11984  
    5353                virtual void   ArtificialNoise(double min,double max)=0;
    5454                virtual void   AXPY(Input* xinput,double scalar)=0;
    55                 virtual void   Constrain(double cm_min, double cm_max)=0;
     55                virtual void   Constrain(double cm_min, double cm_max, double cm_thresh)=0;
    5656                virtual void   VerticallyIntegrate(Input* thickness_input)=0;
    5757                virtual void   Extrude()=0;
  • issm/branches/trunk-jpl-damage/src/c/objects/Inputs/IntInput.cpp

    r11708 r11984  
    223223/*}}}*/
    224224/*FUNCTION IntInput::Constrain{{{1*/
    225 void IntInput::Constrain(double cm_min, double cm_max){
     225void IntInput::Constrain(double cm_min, double cm_max, double cm_thresh){
    226226
    227227        if(!isnan(cm_min)) if (this->value<cm_min)this->value=(int)cm_min;
    228228        if(!isnan(cm_max)) if (this->value>cm_max)this->value=(int)cm_max;
     229        if(!isnan(cm_thresh)) if (this->value<cm_thresh)this->value=(int)cm_min;
    229230
    230231}
  • issm/branches/trunk-jpl-damage/src/c/objects/Inputs/IntInput.h

    r11708 r11984  
    7373                void ArtificialNoise(double min,double max){_error_("not implemented yet");};
    7474                void AXPY(Input* xinput,double scalar);
    75                 void Constrain(double cm_min, double cm_max);
     75                void Constrain(double cm_min, double cm_max, double cm_thresh);
    7676                double InfinityNorm(void){_error_("InfinityNorm not implemented for integers");};
    7777                double Max(void){_error_("Max not implemented for integers");};
  • issm/branches/trunk-jpl-damage/src/c/objects/Inputs/PentaP1Input.cpp

    r11708 r11984  
    517517/*}}}*/
    518518/*FUNCTION PentaP1Input::Constrain{{{1*/
    519 void PentaP1Input::Constrain(double cm_min, double cm_max){
     519void PentaP1Input::Constrain(double cm_min, double cm_max, double cm_thresh){
    520520
    521521        int i;
     
    524524        if(!isnan(cm_min)) for(i=0;i<numnodes;i++)if (this->values[i]<cm_min)this->values[i]=cm_min;
    525525        if(!isnan(cm_max)) for(i=0;i<numnodes;i++)if (this->values[i]>cm_max)this->values[i]=cm_max;
     526        if(!isnan(cm_thresh)) for(i=0;i<numnodes;i++)if (this->values[i]<cm_thresh)this->values[i]=cm_min;
    526527
    527528}
  • issm/branches/trunk-jpl-damage/src/c/objects/Inputs/PentaP1Input.h

    r11708 r11984  
    7474                void ArtificialNoise(double min,double max){_error_("not implemented yet");};
    7575                void AXPY(Input* xinput,double scalar);
    76                 void Constrain(double cm_min, double cm_max);
     76                void Constrain(double cm_min, double cm_max, double cm_thresh);
    7777                double InfinityNorm(void);
    7878                double Max(void);
  • issm/branches/trunk-jpl-damage/src/c/objects/Inputs/TransientInput.h

    r11708 r11984  
    7676                void ArtificialNoise(double min,double max){_error_("not implemented yet");};
    7777                void AXPY(Input* xforcing,double scalar){_error_("not implemented yet");};
    78                 void Constrain(double cm_min, double cm_max){_error_("not implemented yet");};
     78                void Constrain(double cm_min, double cm_max, double cm_thresh){_error_("not implemented yet");};
    7979                double InfinityNorm(void);
    8080                double Max(void);
  • issm/branches/trunk-jpl-damage/src/c/objects/Inputs/TriaP1Input.cpp

    r11708 r11984  
    380380/*}}}*/
    381381/*FUNCTION TriaP1Input::Constrain{{{1*/
    382 void TriaP1Input::Constrain(double cm_min, double cm_max){
     382void TriaP1Input::Constrain(double cm_min, double cm_max, double cm_thresh){
    383383
    384384        int i;
     
    387387        if(!isnan(cm_min)) for(i=0;i<numnodes;i++)if (this->values[i]<cm_min)this->values[i]=cm_min;
    388388        if(!isnan(cm_max)) for(i=0;i<numnodes;i++)if (this->values[i]>cm_max)this->values[i]=cm_max;
     389        if(!isnan(cm_thresh)) for(i=0;i<numnodes;i++)if (this->values[i]<cm_thresh)this->values[i]=cm_min;
    389390
    390391}
  • issm/branches/trunk-jpl-damage/src/c/objects/Inputs/TriaP1Input.h

    r11708 r11984  
    7474                void ArtificialNoise(double min,double max);
    7575                void AXPY(Input* xinput,double scalar);
    76                 void Constrain(double cm_min, double cm_max);
     76                void Constrain(double cm_min, double cm_max, double cm_thresh);
    7777                double InfinityNorm(void);
    7878                double Max(void);
  • issm/branches/trunk-jpl-damage/src/c/objects/Materials/Matice.cpp

    r11708 r11984  
    828828                double    cmmininputs[num_vertices];
    829829                double    cmmaxinputs[num_vertices];
     830                double    cmthreshinputs[num_vertices];
    830831
    831832                /*Get B*/
     
    858859                                                        for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
    859860                                                        for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
    860                                                         this->inputs->AddInput(new ControlInput(MaterialsRheologyBbarEnum,TriaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     861                                                        for(j=0;j<num_vertices;j++)cmthreshinputs[j]=iomodel->Data(InversionThreshParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
     862                                                        this->inputs->AddInput(new ControlInput(MaterialsRheologyBbarEnum,TriaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,cmthreshinputs,i+1));
    861863                                                }
    862864                                                break;
     
    867869                                                        for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
    868870                                                        for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
    869                                                         this->inputs->AddInput(new ControlInput(MaterialsRheologyZbarEnum,TriaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     871                                                        for(j=0;j<num_vertices;j++)cmthreshinputs[j]=iomodel->Data(InversionThreshParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
     872                                                        this->inputs->AddInput(new ControlInput(MaterialsRheologyZbarEnum,TriaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,cmthreshinputs,i+1));
    870873                                                }
    871874                                                break;
     
    885888                double    cmmininputs[num_vertices];
    886889                double    cmmaxinputs[num_vertices];
     890                double    cmthreshinputs[num_vertices];
    887891
    888892                /*Get B*/
     
    915919                                                        for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
    916920                                                        for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
    917                                                         this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     921                                                        for(j=0;j<num_vertices;j++)cmthreshinputs[j]=iomodel->Data(InversionThreshParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
     922                                                        this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,cmthreshinputs,i+1));
    918923                                                }
    919924                                                break;
     
    924929                                                        for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
    925930                                                        for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
    926                                                         this->inputs->AddInput(new ControlInput(MaterialsRheologyZEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     931                                                        for(j=0;j<num_vertices;j++)cmthreshinputs[j]=iomodel->Data(InversionThreshParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
     932                                                        this->inputs->AddInput(new ControlInput(MaterialsRheologyZEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,cmthreshinputs,i+1));
    927933                                                }
    928934                                                break;
  • issm/branches/trunk-jpl-damage/src/m/classes/inversion.m

    r11708 r11984  
    1818                min_parameters              = NaN
    1919                max_parameters              = NaN
     20                thresh_parameters           = NaN
    2021                step_threshold              = NaN
    2122                gradient_only               = 0
     
    103104                        checkfield(md,'inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
    104105                        checkfield(md,'inversion.max_parameters','size',[md.mesh.numberofvertices num_controls]);
     106                        checkfield(md,'inversion.thresh_parameters','size',[md.mesh.numberofvertices num_controls]);
    105107
    106108                        if solution==BalancethicknessSolutionEnum
     
    124126                        fielddisplay(obj,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex');
    125127                        fielddisplay(obj,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex');
     128                        fielddisplay(obj,'thresh_parameters','threshold value of the inversed parameter above which value jumps to max_parameters');
    126129                        fielddisplay(obj,'gradient_only','stop control method solution at gradient');
    127130                        fielddisplay(obj,'vx_obs','observed velocity x component [m/a]');
     
    153156                        WriteData(fid,'object',obj,'fieldname','min_parameters','format','DoubleMat','mattype',3);
    154157                        WriteData(fid,'object',obj,'fieldname','max_parameters','format','DoubleMat','mattype',3);
     158                        WriteData(fid,'object',obj,'fieldname','thresh_parameters','format','DoubleMat','mattype',3);
    155159                        WriteData(fid,'object',obj,'fieldname','step_threshold','format','DoubleMat','mattype',3);
    156160                        WriteData(fid,'object',obj,'fieldname','gradient_only','format','Boolean');
  • issm/branches/trunk-jpl-damage/src/m/classes/model/model.m

    r11684 r11984  
    222222                         if isfield(structmd,'cm_min'), md.inversion.min_parameters=structmd.cm_min; end
    223223                         if isfield(structmd,'cm_max'), md.inversion.max_parameters=structmd.cm_max; end
     224                         if isfield(structmd,'cm_thresh'), md.inversion.thresh_parameters=structmd.cm_thresh; end
    224225                         if isfield(structmd,'vx_obs'), md.inversion.vx_obs=structmd.vx_obs; end
    225226                         if isfield(structmd,'vy_obs'), md.inversion.vy_obs=structmd.vy_obs; end
  • issm/branches/trunk-jpl-damage/src/m/model/parameterization/parametercontrolZ.m

    r11462 r11984  
    5757else
    5858        md.inversion.max_parameters=cm_max;
     59end
     60
     61%cm_thresh
     62cm_thresh=getfieldvalue(options,'cm_thresh',ones(md.mesh.numberofvertices,1));
     63if (length(cm_thresh)==1)
     64        md.inversion.thresh_parameters=cm_thresh*ones(md.mesh.numberofvertices,1);
     65elseif (length(cm_thresh)==md.mesh.numberofvertices)
     66        md.inversion.thresh_parameters=cm_thresh;
     67else
     68        md.inversion.thresh_parameters=cm_thresh;
    5969end
    6070
Note: See TracChangeset for help on using the changeset viewer.