Changeset 22266


Ignore:
Timestamp:
11/16/17 16:27:29 (7 years ago)
Author:
Mathieu Morlighem
Message:

CHG: added more cost functions for Jerome and working on a new algorithm for ice thickness mapping

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

Legend:

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

    r22265 r22266  
    7070
    7171        /*Intermediaries */
    72         IssmDouble  Jdet,ds[2],slope,velobs,omega;
     72        IssmDouble  yts = 365*24*3600.;
     73        IssmDouble  Jdet,vx,vy,vel;
    7374        IssmDouble* xyz_list = NULL;
    7475
     
    8283        /*Retrieve all inputs and parameters*/
    8384        element->GetVerticesCoordinates(&xyz_list);
    84         Input* omega_input         = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);
    85         Input* surfaceslopex_input = element->GetInput(SurfaceSlopeXEnum); _assert_(surfaceslopex_input);
    86         Input* surfaceslopey_input = element->GetInput(SurfaceSlopeYEnum); _assert_(surfaceslopey_input);
    87         Input* velobs_input        = element->GetInput(InversionVelObsEnum); _assert_(velobs_input);
     85        Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input);
     86        Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input);
     87
     88        /*Get element characteristic length*/
     89        IssmDouble h = element->CharacteristicLength();
    8890
    8991        /* Start  looping on the number of gaussian points: */
     
    9395                element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
    9496                element->JacobianDeterminant(&Jdet,xyz_list,gauss);
    95                 surfaceslopex_input->GetInputValue(&ds[0],gauss);
    96                 surfaceslopey_input->GetInputValue(&ds[1],gauss);
    97                 velobs_input->GetInputValue(&velobs,gauss);
    98                 omega_input->GetInputValue(&omega,gauss);
     97                vx_input->GetInputValue(&vx,gauss);
     98                vy_input->GetInputValue(&vy,gauss);
    9999
    100                 slope = sqrt(ds[0]*ds[0] + ds[1]*ds[1]);
    101                 //if(slope<1.e-5) slope = 1.e-5;
     100                /*make sure are diffusivisty is large enough*/
     101                vel = sqrt(vx*vx+vy*vy);
     102                if(sqrt(vx*vx+vy*vy)==0.){
     103                        vx = 0.1/yts;
     104                        vy = 0.1/yts;
     105                        vel = sqrt(vx*vx+vy*vy);
     106                }
     107                else if(vel<0.1/yts){
     108                        vx = vx/vel*0.1;
     109                        vy = vy/vel*0.1;
     110                        vel = sqrt(vx*vx+vy*vy);
     111                }
    102112
    103113                for(int i=0;i<numnodes;i++){
    104114                        for(int j=0;j<numnodes;j++){
    105                                 Ke->values[i*numnodes+j] += velobs/slope*omega*gauss->weight*Jdet*(dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + dbasis[1*numnodes+i]*dbasis[1*numnodes+j]);
     115                                Ke->values[i*numnodes+j] += gauss->weight*Jdet*(
     116                                                        (vx*dbasis[0*numnodes+i] + vy*dbasis[1*numnodes+i])*(vx*dbasis[0*numnodes+j] + vy*dbasis[1*numnodes+j])
     117                                + vel/500000.*(dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + dbasis[1*numnodes+i]*dbasis[1*numnodes+j]));
    106118                        }
    107119                }
     
    117129
    118130        /*Intermediaries */
    119         IssmDouble  dhdt,mb,ms,Jdet;
     131        IssmDouble  dhdt[2],mb[2],ms[2],Jdet;
    120132        IssmDouble* xyz_list = NULL;
    121133
     
    141153                element->NodalFunctions(basis,gauss);
    142154
    143                 ms_input->GetInputValue(&ms,gauss);
    144                 mb_input->GetInputValue(&mb,gauss);
    145                 dhdt_input->GetInputValue(&dhdt,gauss);
     155                ms_input->GetInputDerivativeValue(&ms[0],xyz_list,gauss);
    146156
    147                 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(
    148                                         (ms-mb-dhdt)*basis[i]
     157                ms_input->GetInputDerivativeValue(&ms[0],xyz_list,gauss);
     158                mb_input->GetInputDerivativeValue(&mb[0],xyz_list,gauss);
     159                dhdt_input->GetInputDerivativeValue(&dhdt[0],xyz_list,gauss);
     160
     161                for(int i=0;i<numnodes;i++) pe->values[i]+=0*Jdet*gauss->weight*(
     162                                        (ms[0]+ms[1]-mb[0]-mb[1]-dhdt[0]-dhdt[1])*basis[i]
    149163                                        );
    150164        }
     
    157171}/*}}}*/
    158172void           Balancethickness2Analysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
    159                 element->GetSolutionFromInputsOneDof(solution,SurfaceEnum);
     173                element->GetSolutionFromInputsOneDof(solution,ThicknessEnum);
    160174}/*}}}*/
    161175void           Balancethickness2Analysis::GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index){/*{{{*/
     
    164178void           Balancethickness2Analysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
    165179
    166         /*Intermediaries*/
    167         IssmDouble  ds[2],s,b,D;
    168         IssmDouble* xyz_list = NULL;
     180                        element->InputUpdateFromSolutionOneDof(solution,ThicknessEnum);
    169181
    170         //element->InputUpdateFromSolutionOneDof(solution,ThicknessEnum);
    171         element->InputUpdateFromSolutionOneDof(solution,SurfaceEnum);
    172 
    173         /*Fetch number of vertices and allocate velocity vectors*/
    174         int numvertices = element->GetNumberOfVertices();
    175         IssmDouble* vel_list = xNew<IssmDouble>(numvertices);
    176         IssmDouble* vx_list  = xNew<IssmDouble>(numvertices);
    177         IssmDouble* vy_list  = xNew<IssmDouble>(numvertices);
    178 
    179         /*Retrieve all inputs and parameters*/
    180         element->GetVerticesCoordinates(&xyz_list);
    181         Input* D_input   = element->GetInput(BalancethicknessDiffusionCoefficientEnum);
    182         Input* H_input   = element->GetInput(ThicknessEnum);                            _assert_(H_input);
    183         Input* s_input   = element->GetInput(SurfaceEnum);                              _assert_(s_input);
    184         Input* b_input   = element->GetInput(BaseEnum);                                 _assert_(b_input);
    185 
    186         /*Calculate velocities*/
    187         Gauss* gauss=element->NewGauss();
    188         for(int iv=0;iv<numvertices;iv++){
    189                 gauss->GaussVertex(iv);
    190 
    191                 if(D_input){
    192                         D_input->GetInputValue(&D,gauss);
    193                 }
    194                 else{
    195                         D = 0.;
    196                 }
    197                 b_input->GetInputValue(&b,gauss);
    198                 s_input->GetInputValue(&s,gauss);
    199                 s_input->GetInputDerivativeValue(&ds[0],xyz_list,gauss);
    200 
    201                 vx_list[iv] = -1./(s-b)*D*ds[0];
    202                 vy_list[iv] = -1./(s-b)*D*ds[1];
    203                 vel_list[iv] = sqrt(pow(vx_list[iv],2) + pow(vy_list[iv],2));
    204         }
    205 
    206         /*Add vx and vy as inputs to the tria element: */
    207         element->AddInput(VxEnum,vx_list,P1Enum);
    208         element->AddInput(VyEnum,vy_list,P1Enum);
    209         element->AddInput(VelEnum,vel_list,P1Enum);
    210 
    211         /*Free ressources:*/
    212         delete gauss;
    213         xDelete<IssmDouble>(vy_list);
    214         xDelete<IssmDouble>(vx_list);
    215         xDelete<IssmDouble>(vel_list);
    216         xDelete<IssmDouble>(xyz_list);
    217182}/*}}}*/
    218183void           Balancethickness2Analysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r22249 r22266  
    17011701                                name==BasalforcingsFloatingiceMeltingRateEnum ||
    17021702                                name==BasalforcingsGeothermalfluxEnum ||
     1703                                name==BalancethicknessSpcthicknessEnum ||
    17031704                                name==SurfaceAreaEnum||
    17041705                                name==DamageDEnum ||
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r22192 r22266  
    18561856                                                for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
    18571857                                                this->inputs->AddInput(new ControlInput(ThicknessEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     1858                                        }
     1859                                        break;
     1860                                case BalancethicknessSpcthicknessEnum:
     1861                                        if(iomodel->Data("md.balancethickness.spcthickness")){
     1862                                                for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.balancethickness.spcthickness")[tria_vertex_ids[j]-1];
     1863                                                for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
     1864                                                for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
     1865                                                this->inputs->AddInput(new ControlInput(BalancethicknessSpcthicknessEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
    18581866                                        }
    18591867                                        break;
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r22241 r22266  
    14961496
    14971497}/*}}}*/
     1498void FemModel::OmegaAbsGradientx( IssmDouble* pJ){/*{{{*/
     1499
     1500        /*output: */
     1501        IssmDouble J=0.;
     1502        IssmDouble J_sum;
     1503
     1504        IssmDouble  omega,weight;
     1505        IssmDouble  Jdet;
     1506        IssmDouble* xyz_list = NULL;
     1507        IssmDouble  dp[3];
     1508
     1509        /*Compute Misfit: */
     1510        for(int i=0;i<elements->Size();i++){
     1511                Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
     1512
     1513                /*If on water, return 0: */
     1514                if(!element->IsIceInElement()) continue;
     1515
     1516                /* Get node coordinates*/
     1517                element->GetVerticesCoordinates(&xyz_list);
     1518
     1519                /*Retrieve all inputs we will be needing: */
     1520                Input* weights_input   =element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
     1521                Input* omega_input =element->GetInput(BalancethicknessOmegaEnum);                   _assert_(omega_input);
     1522
     1523                /* Start  looping on the number of gaussian points: */
     1524                Gauss* gauss=element->NewGauss(2);
     1525                for(int ig=gauss->begin();ig<gauss->end();ig++){
     1526
     1527                        gauss->GaussPoint(ig);
     1528
     1529                        /* Get Jacobian determinant: */
     1530                        element->JacobianDeterminant(&Jdet,xyz_list,gauss);
     1531
     1532                        /*Get all parameters at gaussian point*/
     1533                        weights_input->GetInputValue(&weight,gauss,OmegaAbsGradientEnum);
     1534                        omega_input->GetInputDerivativeValue(&dp[0],xyz_list,gauss);
     1535
     1536                        /*Tikhonov regularization: J = 1/2 ((dp/dx)^2 + (dp/dy)^2) */
     1537                        //J+=weight*1/2*(dp[0]*dp[0]+dp[1]*dp[1])*Jdet*gauss->weight;
     1538                        J+=weight*1/2*pow(dp[0]*dp[0]+dp[1]*dp[1],2)*Jdet*gauss->weight;
     1539                }
     1540
     1541                /*clean up and Return: */
     1542                xDelete<IssmDouble>(xyz_list);
     1543                delete gauss;
     1544        }
     1545
     1546        /*Sum all J from all cpus of the cluster:*/
     1547        ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
     1548        ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
     1549        J=J_sum;
     1550
     1551        /*Assign output pointers: */
     1552        *pJ=J;
     1553}
     1554/*}}}*/
     1555void FemModel::EtaDiffx( IssmDouble* pJ){/*{{{*/
     1556
     1557        /*output: */
     1558        IssmDouble J=0.;
     1559        IssmDouble J_sum;
     1560
     1561        IssmDouble  omega,weight;
     1562        IssmDouble  Jdet;
     1563        IssmDouble* xyz_list = NULL;
     1564        IssmDouble  p,p0;
     1565
     1566        /*Compute Misfit: */
     1567        for(int i=0;i<elements->Size();i++){
     1568                Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
     1569
     1570                /*If on water, return 0: */
     1571                if(!element->IsIceInElement()) continue;
     1572
     1573                /* Get node coordinates*/
     1574                element->GetVerticesCoordinates(&xyz_list);
     1575
     1576                /*Retrieve all inputs we will be needing: */
     1577                Input* weights_input =element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
     1578                Input* omega_input   =element->GetInput(BalancethicknessOmegaEnum);              _assert_(omega_input);
     1579                Input* omega0_input  =element->GetInput(BalancethicknessOmega0Enum);             _assert_(omega0_input);
     1580
     1581                /* Start  looping on the number of gaussian points: */
     1582                Gauss* gauss=element->NewGauss(2);
     1583                for(int ig=gauss->begin();ig<gauss->end();ig++){
     1584
     1585                        gauss->GaussPoint(ig);
     1586
     1587                        /* Get Jacobian determinant: */
     1588                        element->JacobianDeterminant(&Jdet,xyz_list,gauss);
     1589
     1590                        /*Get all parameters at gaussian point*/
     1591                        weights_input->GetInputValue(&weight,gauss,EtaDiffEnum);
     1592                        omega_input->GetInputValue(&p,gauss);
     1593                        omega0_input->GetInputValue(&p0,gauss);
     1594
     1595                        /*Tikhonov regularization: J = 1/2 ((dp/dx)^2 + (dp/dy)^2) */
     1596                        //J+=weight*1/2*(dp[0]*dp[0]+dp[1]*dp[1])*Jdet*gauss->weight;
     1597                        J+=weight*1/2*pow(p - p0,2)*Jdet*gauss->weight;
     1598                }
     1599
     1600                /*clean up and Return: */
     1601                xDelete<IssmDouble>(xyz_list);
     1602                delete gauss;
     1603        }
     1604
     1605        /*Sum all J from all cpus of the cluster:*/
     1606        ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
     1607        ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
     1608        J=J_sum;
     1609
     1610        /*Assign output pointers: */
     1611        *pJ=J;
     1612}
     1613/*}}}*/
    14981614void FemModel::OutputControlsx(Results **presults){/*{{{*/
    14991615
     
    16671783                                case BalancethicknessMisfitEnum:    BalancethicknessMisfitx(&double_result);                                                        break;
    16681784                                case SurfaceAbsMisfitEnum:          SurfaceAbsMisfitx(&double_result); break;
     1785                                case OmegaAbsGradientEnum:          OmegaAbsGradientx(&double_result); break;
     1786                                case EtaDiffEnum:                   EtaDiffx(&double_result); break;
    16691787
    16701788                                   /*Vector */
     
    20182136        IssmDouble J_sum;
    20192137
    2020         IssmDouble  thickness,thicknessobs,weight;
     2138        IssmDouble  thickness,weight;
    20212139        IssmDouble  Jdet;
    20222140        IssmDouble* xyz_list = NULL;
  • issm/trunk-jpl/src/c/classes/FemModel.h

    r22241 r22266  
    126126                void Responsex(IssmDouble* presponse,const char* response_descriptor);
    127127                void SurfaceAbsMisfitx( IssmDouble* pJ);
     128                void OmegaAbsGradientx( IssmDouble* pJ);
     129                void EtaDiffx( IssmDouble* pJ);
    128130                void ThicknessAbsGradientx( IssmDouble* pJ);
    129131                void ThicknessPositivex(IssmDouble* pJ);
  • issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp

    r20827 r22266  
    167167        /*Get requested input within dataset*/
    168168        for(int i=0;i<this->numids;i++) if(this->ids[i]==id) offset=i;
    169         if(offset<0) _error_("Could not find input of id "<<id );
     169        if(offset<0) _error_("Could not find input of id "<<id<<" (Enum: "<<EnumToStringx(id)<<")" );
    170170
    171171        Input* input=xDynamicCast<Input*>(this->inputs->GetObjectByOffset(offset));
  • issm/trunk-jpl/src/c/cores/balancethickness2_core.cpp

    r22178 r22266  
    3636                if(VerboseSolution()) _printf0_("   saving results\n");
    3737                const int numoutputs = 1;
    38                 int outputs[numoutputs] = {SurfaceEnum};
     38                int outputs[numoutputs] = {ThicknessEnum};
    3939                femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],numoutputs);
    4040        }
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp

    r21049 r22266  
    88#include "../ModelProcessorx.h"
    99
    10 void CreateParametersControl(Parameters* parameters,IoModel* iomodel,int solution_type){/*{{{*/
     10void CreateParametersControl(Parameters* parameters,IoModel* iomodel,int solution_type){
    1111
    1212        bool        control_analysis;
     
    120120                iomodel->DeleteData(optscal,"md.inversion.gradient_scaling");
    121121        }
    122 }/*}}}*/
     122}
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp

    r21049 r22266  
    6868                        /*List of supported controls*/
    6969                        case BalancethicknessThickeningRateEnum:      iomodel->FetchData(1,"md.balancethickness.thickening_rate"); break;
     70                        case BalancethicknessSpcthicknessEnum:        iomodel->FetchData(1,"md.balancethickness.spcthickness"); break;
    7071                        case VxEnum:                                  iomodel->FetchData(1,"md.initialization.vx"); break;
    7172                        case VyEnum:                                  iomodel->FetchData(1,"md.initialization.vy"); break;
     
    99100                        /*List of supported controls*/
    100101                        case BalancethicknessThickeningRateEnum:      iomodel->DeleteData(1,"md.balancethickness.thickening_rate"); break;
     102                        case BalancethicknessSpcthicknessEnum:        iomodel->DeleteData(1,"md.balancethickness.spcthickness"); break;
    101103                        case VxEnum:                                  iomodel->DeleteData(1,"md.initialization.vx"); break;
    102104                        case VyEnum:                                  iomodel->DeleteData(1,"md.initialization.vy"); break;
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r22241 r22266  
    214214        InversionVyObsEnum,
    215215        InversionVzObsEnum,
     216        InversionVelObsEnum,
    216217        MaskIceLevelsetEnum,
    217218        MaskOceanLevelsetEnum,
     
    382383        BalancethicknessDiffusionCoefficientEnum,
    383384        BalancethicknessOmegaEnum,
     385        BalancethicknessOmega0Enum,
    384386        BalancethicknessD0Enum,
    385387        /*}}}*/
     
    529531        ThicknessAbsMisfitEnum,
    530532        SurfaceAbsMisfitEnum,
     533        OmegaAbsGradientEnum,
     534        EtaDiffEnum,
     535        EtaAbsGradientEnum,
    531536        VelEnum,
    532537        VelocityEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r22241 r22266  
    220220                case InversionVyObsEnum : return "InversionVyObs";
    221221                case InversionVzObsEnum : return "InversionVzObs";
     222                case InversionVelObsEnum : return "InversionVelObs";
    222223                case MaskIceLevelsetEnum : return "MaskIceLevelset";
    223224                case MaskOceanLevelsetEnum : return "MaskOceanLevelset";
     
    388389                case BalancethicknessDiffusionCoefficientEnum : return "BalancethicknessDiffusionCoefficient";
    389390                case BalancethicknessOmegaEnum : return "BalancethicknessOmega";
     391                case BalancethicknessOmega0Enum : return "BalancethicknessOmega0";
    390392                case BalancethicknessD0Enum : return "BalancethicknessD0";
    391393                case SmbEnum : return "Smb";
     
    527529                case ThicknessAbsMisfitEnum : return "ThicknessAbsMisfit";
    528530                case SurfaceAbsMisfitEnum : return "SurfaceAbsMisfit";
     531                case OmegaAbsGradientEnum : return "OmegaAbsGradient";
     532                case EtaDiffEnum : return "EtaDiff";
     533                case EtaAbsGradientEnum : return "EtaAbsGradient";
    529534                case VelEnum : return "Vel";
    530535                case VelocityEnum : return "Velocity";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r22200 r22266  
    223223              else if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;
    224224              else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
     225              else if (strcmp(name,"InversionVelObs")==0) return InversionVelObsEnum;
    225226              else if (strcmp(name,"MaskIceLevelset")==0) return MaskIceLevelsetEnum;
    226227              else if (strcmp(name,"MaskOceanLevelset")==0) return MaskOceanLevelsetEnum;
     
    259260              else if (strcmp(name,"DamageEvolutionNumRequestedOutputs")==0) return DamageEvolutionNumRequestedOutputsEnum;
    260261              else if (strcmp(name,"DamageEvolutionRequestedOutputs")==0) return DamageEvolutionRequestedOutputsEnum;
    261               else if (strcmp(name,"Damage")==0) return DamageEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
     265              if (strcmp(name,"Damage")==0) return DamageEnum;
     266              else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
    266267              else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
    267268              else if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
     
    382383              else if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum;
    383384              else if (strcmp(name,"TransientIsthermal")==0) return TransientIsthermalEnum;
    384               else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;
     388              if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
     389              else if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;
    389390              else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum;
    390391              else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
     
    397398              else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum;
    398399              else if (strcmp(name,"BalancethicknessOmega")==0) return BalancethicknessOmegaEnum;
     400              else if (strcmp(name,"BalancethicknessOmega0")==0) return BalancethicknessOmega0Enum;
    399401              else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
    400402              else if (strcmp(name,"Smb")==0) return SmbEnum;
     
    504506              else if (strcmp(name,"SMBgradientsela")==0) return SMBgradientselaEnum;
    505507              else if (strcmp(name,"SmbEla")==0) return SmbElaEnum;
    506               else if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
    507               else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
     511              if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
     512              else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
     513              else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
    512514              else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
    513515              else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
     
    539541              else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum;
    540542              else if (strcmp(name,"SurfaceAbsMisfit")==0) return SurfaceAbsMisfitEnum;
     543              else if (strcmp(name,"OmegaAbsGradient")==0) return OmegaAbsGradientEnum;
     544              else if (strcmp(name,"EtaDiff")==0) return EtaDiffEnum;
     545              else if (strcmp(name,"EtaAbsGradient")==0) return EtaAbsGradientEnum;
    541546              else if (strcmp(name,"Vel")==0) return VelEnum;
    542547              else if (strcmp(name,"Velocity")==0) return VelocityEnum;
     
    624629              else if (strcmp(name,"Outputdefinition4")==0) return Outputdefinition4Enum;
    625630              else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
    626               else if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum;
     631         else stage=6;
     632   }
     633   if(stage==6){
     634              if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum;
    627635              else if (strcmp(name,"Outputdefinition7")==0) return Outputdefinition7Enum;
    628636              else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
    629637              else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
    630638              else if (strcmp(name,"Outputdefinition10")==0) return Outputdefinition10Enum;
    631          else stage=6;
    632    }
    633    if(stage==6){
    634               if (strcmp(name,"Outputdefinition11")==0) return Outputdefinition11Enum;
     639              else if (strcmp(name,"Outputdefinition11")==0) return Outputdefinition11Enum;
    635640              else if (strcmp(name,"Outputdefinition12")==0) return Outputdefinition12Enum;
    636641              else if (strcmp(name,"Outputdefinition13")==0) return Outputdefinition13Enum;
     
    747752              else if (strcmp(name,"Colinear")==0) return ColinearEnum;
    748753              else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum;
    749               else if (strcmp(name,"Fset")==0) return FsetEnum;
     754         else stage=7;
     755   }
     756   if(stage==7){
     757              if (strcmp(name,"Fset")==0) return FsetEnum;
    750758              else if (strcmp(name,"Gradient1")==0) return Gradient1Enum;
    751759              else if (strcmp(name,"Gradient2")==0) return Gradient2Enum;
    752760              else if (strcmp(name,"Gradient3")==0) return Gradient3Enum;
    753761              else if (strcmp(name,"Gradient")==0) return GradientEnum;
    754          else stage=7;
    755    }
    756    if(stage==7){
    757               if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum;
     762              else if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum;
    758763              else if (strcmp(name,"Gset")==0) return GsetEnum;
    759764              else if (strcmp(name,"Index")==0) return IndexEnum;
     
    870875              else if (strcmp(name,"AmrField")==0) return AmrFieldEnum;
    871876              else if (strcmp(name,"AmrErr")==0) return AmrErrEnum;
    872               else if (strcmp(name,"AmrKeepMetric")==0) return AmrKeepMetricEnum;
     877         else stage=8;
     878   }
     879   if(stage==8){
     880              if (strcmp(name,"AmrKeepMetric")==0) return AmrKeepMetricEnum;
    873881              else if (strcmp(name,"AmrGradation")==0) return AmrGradationEnum;
    874882              else if (strcmp(name,"AmrGroundingLineResolution")==0) return AmrGroundingLineResolutionEnum;
    875883              else if (strcmp(name,"AmrGroundingLineDistance")==0) return AmrGroundingLineDistanceEnum;
    876884              else if (strcmp(name,"AmrIceFrontResolution")==0) return AmrIceFrontResolutionEnum;
    877          else stage=8;
    878    }
    879    if(stage==8){
    880               if (strcmp(name,"AmrIceFrontDistance")==0) return AmrIceFrontDistanceEnum;
     885              else if (strcmp(name,"AmrIceFrontDistance")==0) return AmrIceFrontDistanceEnum;
    881886              else if (strcmp(name,"AmrThicknessErrorResolution")==0) return AmrThicknessErrorResolutionEnum;
    882887              else if (strcmp(name,"AmrThicknessErrorThreshold")==0) return AmrThicknessErrorThresholdEnum;
     
    993998              else if (strcmp(name,"SmoothAnalysis")==0) return SmoothAnalysisEnum;
    994999              else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
    995               else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
     1000         else stage=9;
     1001   }
     1002   if(stage==9){
     1003              if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
    9961004              else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
    9971005              else if (strcmp(name,"UzawaPressureAnalysis")==0) return UzawaPressureAnalysisEnum;
    9981006              else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
    9991007              else if (strcmp(name,"GiaIvinsAnalysis")==0) return GiaIvinsAnalysisEnum;
    1000          else stage=9;
    1001    }
    1002    if(stage==9){
    1003               if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum;
     1008              else if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum;
    10041009              else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
    10051010              else if (strcmp(name,"LoveSolution")==0) return LoveSolutionEnum;
Note: See TracChangeset for help on using the changeset viewer.