Changeset 18001


Ignore:
Timestamp:
05/14/14 14:39:55 (11 years ago)
Author:
schlegel
Message:

NEW: implementation of SMB components and interpolation option

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

Legend:

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

    r17946 r18001  
    115115                case SMBhenningEnum:
    116116                        iomodel->FetchDataToInput(elements,SurfaceforcingsSmbrefEnum,0.);
     117                        break;
     118                case SMBcomponentsEnum:
     119                        iomodel->FetchDataToInput(elements,SurfaceforcingsAccumulationEnum,0.);
     120                        iomodel->FetchDataToInput(elements,SurfaceforcingsEvaporationEnum,0.);
     121                        iomodel->FetchDataToInput(elements,SurfaceforcingsRunoffEnum,0.);
     122                        break;
     123                case SMBmeltcomponentsEnum:
     124                        iomodel->FetchDataToInput(elements,SurfaceforcingsAccumulationEnum,0.);
     125                        iomodel->FetchDataToInput(elements,SurfaceforcingsEvaporationEnum,0.);
     126                        iomodel->FetchDataToInput(elements,SurfaceforcingsMeltEnum,0.);
     127                        iomodel->FetchDataToInput(elements,SurfaceforcingsRefreezeEnum,0.);
    117128                        break;
    118129                default:
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r17976 r18001  
    228228                virtual void   PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm)=0;
    229229                virtual void   Delta18oParameterization(void)=0;
    230                 virtual void   SmbGradients(void)=0;
    231230           virtual Element*   SpawnBasalElement(void)=0;
    232231                virtual Element*   SpawnTopElement(void)=0;
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r17982 r18001  
    20012001
    20022002        return tria;
    2003 }
    2004 /*}}}*/
    2005 void       Penta::SmbGradients(void){/*{{{*/
    2006 
    2007         int i;
    2008 
    2009         // input
    2010    IssmDouble h[NUMVERTICES];                                   // ice thickness (m)           
    2011         IssmDouble s[NUMVERTICES];                                      // surface elevation (m)
    2012         IssmDouble b_pos[NUMVERTICES];                          // Hs-SMB relation parameter
    2013         IssmDouble b_neg[NUMVERTICES];                          // Hs-SMB relation paremeter
    2014         IssmDouble Href[NUMVERTICES];                                   // reference elevation from which deviations are used to calculate the SMB adjustment
    2015         IssmDouble Smbref[NUMVERTICES];                         // reference SMB to which deviations are added
    2016    IssmDouble rho_water;                   // density of fresh water
    2017         IssmDouble rho_ice;                     // density of ice
    2018 
    2019         // output
    2020         IssmDouble smb[NUMVERTICES];                                    // surface mass balance (m/yr ice)
    2021 
    2022         /*Recover SmbGradients*/
    2023         GetInputListOnVertices(&Href[0],SurfaceforcingsHrefEnum);
    2024         GetInputListOnVertices(&Smbref[0],SurfaceforcingsSmbrefEnum);
    2025         GetInputListOnVertices(&b_pos[0],SurfaceforcingsBPosEnum);
    2026         GetInputListOnVertices(&b_neg[0],SurfaceforcingsBNegEnum);
    2027 
    2028    /*Recover surface elevatio at vertices: */
    2029         GetInputListOnVertices(&h[0],ThicknessEnum);
    2030         GetInputListOnVertices(&s[0],SurfaceEnum);
    2031 
    2032    /*Get material parameters :*/
    2033    rho_ice=matpar->GetRhoIce();
    2034    rho_water=matpar->GetRhoFreshwater();
    2035 
    2036    // loop over all vertices
    2037  for(i=0;i<NUMVERTICES;i++){
    2038      if(Smbref[i]>0){
    2039                   smb[i]=Smbref[i]+b_pos[i]*(s[i]-Href[i]);
    2040           }
    2041           else{
    2042                   smb[i]=Smbref[i]+b_neg[i]*(s[i]-Href[i]);
    2043           }
    2044           smb[i]=smb[i]/rho_ice;      // SMB in m/y ice         
    2045         }  //end of the loop over the vertices
    2046           /*Update inputs*/
    2047           this->inputs->AddInput(new PentaInput(SurfaceforcingsMassBalanceEnum,&smb[0],P1Enum));
    20482003}
    20492004/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r17976 r18001  
    9595                void   ReduceMatrices(ElementMatrix* Ke,ElementVector* pe);
    9696                void   ResetFSBasalBoundaryCondition(void);
    97                 void   SmbGradients();
    9897                void   SetTemporaryElementType(int element_type_in);
    9998           Element* SpawnBasalElement(void);
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r17976 r18001  
    136136                void        ReduceMatrices(ElementMatrix* Ke,ElementVector* pe){_error_("not implemented yet");};
    137137                void        SetTemporaryElementType(int element_type_in){_error_("not implemented yet");};
    138                 void          SmbGradients(){_error_("not implemented yet");};
    139138                IssmDouble  SurfaceArea(void){_error_("not implemented yet");};
    140139                void        Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tetra.h

    r17976 r18001  
    140140                void        ReduceMatrices(ElementMatrix* Ke,ElementVector* pe);
    141141                void        SetTemporaryElementType(int element_type_in){_error_("not implemented yet");};
    142                 void          SmbGradients(){_error_("not implemented yet");};
    143142                IssmDouble  SurfaceArea(void){_error_("not implemented yet");};
    144143                void        Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r17976 r18001  
    17171717
    17181718        _error_("not implemented yet");
    1719 }
    1720 /*}}}*/
    1721 void       Tria::SmbGradients(void){/*{{{*/
    1722 
    1723         int i;
    1724 
    1725         // input
    1726    IssmDouble h[NUMVERTICES];                                   // ice thickness (m)           
    1727         IssmDouble s[NUMVERTICES];                                      // surface elevation (m)
    1728         IssmDouble b_pos[NUMVERTICES];                          // Hs-SMB relation parameter
    1729         IssmDouble b_neg[NUMVERTICES];                          // Hs-SMB relation paremeter
    1730         IssmDouble Href[NUMVERTICES];                                   // reference elevation from which deviations are used to calculate the SMB adjustment
    1731         IssmDouble Smbref[NUMVERTICES];                         // reference SMB to which deviations are added
    1732    IssmDouble rho_water;                   // density of fresh water
    1733         IssmDouble rho_ice;                     // density of ice
    1734 
    1735         // output
    1736         IssmDouble smb[NUMVERTICES];                                    // surface mass balance (m/yr ice)
    1737 
    1738         /*Recover SmbGradients*/
    1739         GetInputListOnVertices(&Href[0],SurfaceforcingsHrefEnum);
    1740         GetInputListOnVertices(&Smbref[0],SurfaceforcingsSmbrefEnum);
    1741         GetInputListOnVertices(&b_pos[0],SurfaceforcingsBPosEnum);
    1742         GetInputListOnVertices(&b_neg[0],SurfaceforcingsBNegEnum);
    1743 
    1744    /*Recover surface elevatio at vertices: */
    1745         GetInputListOnVertices(&h[0],ThicknessEnum);
    1746         GetInputListOnVertices(&s[0],SurfaceEnum);
    1747 
    1748    /*Get material parameters :*/
    1749    rho_ice=matpar->GetRhoIce();
    1750    rho_water=matpar->GetRhoFreshwater();
    1751 
    1752    // loop over all vertices
    1753    for(i=0;i<NUMVERTICES;i++){
    1754      if(Smbref[i]>0){
    1755                   smb[i]=Smbref[i]+b_pos[i]*(s[i]-Href[i]);
    1756           }
    1757           else{
    1758                   smb[i]=Smbref[i]+b_neg[i]*(s[i]-Href[i]);
    1759           }
    1760           smb[i]=smb[i]/rho_ice;      // SMB in m/y ice         
    1761                 }  //end of the loop over the vertices
    1762           /*Update inputs*/
    1763           this->inputs->AddInput(new TriaInput(SurfaceforcingsMassBalanceEnum,&smb[0],P1Enum));
    17641719}
    17651720/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r17976 r18001  
    9393                void        ReduceMatrices(ElementMatrix* Ke,ElementVector* pe);
    9494                void        ResetFSBasalBoundaryCondition(void);
    95                 void          SmbGradients();
    9695           Element*    SpawnBasalElement(void);
    9796                Element*    SpawnTopElement(void);
  • issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp

    r17514 r18001  
    520520        int        found;
    521521        int        offset;
     522        bool       interp;
     523
     524        /*First, recover interp bool: */
     525        this->parameters->FindParam(&interp,TimesteppingInterpForcingsEnum);
    522526
    523527        Input *input  = NULL;
     
    535539                input=(Input*)((Input*)this->inputs->GetObjectByOffset(0))->copy();
    536540        }
    537         else if(offset==(this->numtimesteps-1)){
     541        else if(offset==(this->numtimesteps-1) || !interp){
    538542                /*get values for the last time: */
    539543                _assert_(intime>=this->timesteps[offset]);
    540544                input=(Input*)((Input*)this->inputs->GetObjectByOffset(offset))->copy();
    541545        }
    542         else{
     546        else {
    543547                /*get values between two times [offset:offset+1[, Interpolate linearly*/
    544548                _assert_(intime>=this->timesteps[offset] && intime<this->timesteps[offset+1]);
  • issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp

    r17946 r18001  
    5454                        break;
    5555                case SMBhenningEnum:
     56                        /*Nothing to add*/
     57                        break;
     58                case SMBcomponentsEnum:
     59                        /*Nothing to add*/
     60                        break;
     61                case SMBmeltcomponentsEnum:
    5662                        /*Nothing to add*/
    5763                        break;
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r17924 r18001  
    5353        parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeStepEnum));
    5454        parameters->AddObject(iomodel->CopyConstantObject(TimesteppingCflCoefficientEnum));
     55        parameters->AddObject(iomodel->CopyConstantObject(TimesteppingInterpForcingsEnum));
    5556        parameters->AddObject(iomodel->CopyConstantObject(SettingsLowmemEnum));
    5657        parameters->AddObject(iomodel->CopyConstantObject(DebugProfilingEnum));
     
    123124                        /*Nothing to add to parameters*/
    124125                        break;
     126                case SMBcomponentsEnum:
     127                        /*Nothing to add to parameters*/
     128                        break;
     129                case SMBmeltcomponentsEnum:
     130                        /*Nothing to add to parameters*/
     131                        break;
    125132                default:
    126133                        _error_("Surface mass balance model "<<EnumToStringx(smb_model)<<" not supported yet");
  • issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp

    r17403 r18001  
    3838                        SmbHenningx(femmodel);
    3939                        break;
     40                case SMBcomponentsEnum:
     41                        if(VerboseSolution())_printf_("  call smb Components module\n");
     42                        SmbComponentsx(femmodel);
     43                        break;
     44                case SMBmeltcomponentsEnum:
     45                        if(VerboseSolution())_printf_("  call smb Melt Components module\n");
     46                        SmbMeltComponentsx(femmodel);
     47                        break;
    4048                default:
    4149                        _error_("Surface mass balance model "<<EnumToStringx(smb_model)<<" not supported yet");
     
    5058        //    INPUT: surface elevation (m): hd(NA)
    5159        //    OUTPUT: mass-balance (m/yr ice): agd(NA)
    52 
    53         for(int i=0;i<femmodel->elements->Size();i++){
    54                 Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
    55                 element->SmbGradients();
     60        int v;
     61        IssmDouble rho_water;                   // density of fresh water
     62        IssmDouble rho_ice;                     // density of ice
     63
     64        /*Loop over all the elements of this partition*/
     65        for(int i=0;i<femmodel->elements->Size();i++){
     66                Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
     67
     68                /*Allocate all arrays*/
     69                int         numvertices = element->GetNumberOfVertices();
     70                IssmDouble* Href        = xNew<IssmDouble>(numvertices); // reference elevation from which deviations are used to calculate the SMB adjustment
     71                IssmDouble* Smbref      = xNew<IssmDouble>(numvertices); // reference SMB to which deviations are added
     72                IssmDouble* b_pos       = xNew<IssmDouble>(numvertices); // Hs-SMB relation parameter
     73                IssmDouble* b_neg       = xNew<IssmDouble>(numvertices); // Hs-SMB relation paremeter
     74                IssmDouble* h           = xNew<IssmDouble>(numvertices); // ice thickness (m)
     75                IssmDouble* s           = xNew<IssmDouble>(numvertices); // surface elevation (m)
     76                IssmDouble* smb         = xNew<IssmDouble>(numvertices);
     77
     78                /*Recover SmbGradients*/
     79                element->GetInputListOnVertices(Href,SurfaceforcingsHrefEnum);
     80                element->GetInputListOnVertices(Smbref,SurfaceforcingsSmbrefEnum);
     81                element->GetInputListOnVertices(b_pos,SurfaceforcingsBPosEnum);
     82                element->GetInputListOnVertices(b_neg,SurfaceforcingsBNegEnum);
     83
     84                /*Recover surface elevatio at vertices: */
     85                element->GetInputListOnVertices(h,ThicknessEnum);
     86                element->GetInputListOnVertices(s,SurfaceEnum);
     87
     88                /*Get material parameters :*/
     89                rho_ice=element->matpar->GetRhoIce();
     90                rho_water=element->matpar->GetRhoFreshwater();
     91
     92                // loop over all vertices
     93                for(v=0;v<numvertices;v++){
     94                        if(Smbref[v]>0){
     95                                smb[v]=Smbref[v]+b_pos[v]*(s[v]-Href[v]);
     96                        }
     97                        else{
     98                                smb[v]=Smbref[v]+b_neg[v]*(s[v]-Href[v]);
     99                        }
     100                        smb[v]=smb[v]/rho_ice;      // SMB in m/y ice
     101                }  //end of the loop over the vertices
     102
     103                /*Add input to element and Free memory*/
     104                element->AddInput(SurfaceforcingsMassBalanceEnum,smb,P1Enum);
     105                xDelete<IssmDouble>(Href);
     106                xDelete<IssmDouble>(Smbref);
     107                xDelete<IssmDouble>(b_pos);
     108                xDelete<IssmDouble>(b_neg);
     109                xDelete<IssmDouble>(h);
     110                xDelete<IssmDouble>(s);
     111                xDelete<IssmDouble>(smb);
    56112        }
    57113
     
    227283
    228284}/*}}}*/
     285void SmbComponentsx(FemModel* femmodel){/*{{{*/
     286
     287        // void SmbComponentsx(acc,evap,runoff,ni){
     288        //    INPUT parameters: ni: working size of arrays
     289        //    INPUT: surface accumulation (m/yr water equivalent): acc
     290        //    surface evaporation (m/yr water equivalent): evap
     291        //    surface runoff (m/yr water equivalent): runoff
     292        //    OUTPUT: mass-balance (m/yr ice): agd(NA)
     293        int v;
     294
     295        /*Loop over all the elements of this partition*/
     296        for(int i=0;i<femmodel->elements->Size();i++){
     297                Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
     298
     299                /*Allocate all arrays*/
     300                int         numvertices = element->GetNumberOfVertices();
     301                IssmDouble* acc         = xNew<IssmDouble>(numvertices);
     302                IssmDouble* evap        = xNew<IssmDouble>(numvertices);
     303                IssmDouble* runoff      = xNew<IssmDouble>(numvertices);
     304                IssmDouble* smb         = xNew<IssmDouble>(numvertices);
     305
     306                /*Recover Smb Components*/
     307                element->GetInputListOnVertices(acc,SurfaceforcingsAccumulationEnum);
     308                element->GetInputListOnVertices(evap,SurfaceforcingsEvaporationEnum);
     309                element->GetInputListOnVertices(runoff,SurfaceforcingsRunoffEnum);
     310
     311                // loop over all vertices
     312                for(v=0;v<numvertices;v++){
     313                        smb[v]=acc[v]-evap[v]-runoff[v];
     314                }  //end of the loop over the vertices
     315
     316                /*Add input to element and Free memory*/
     317                element->AddInput(SurfaceforcingsMassBalanceEnum,smb,P1Enum);
     318                xDelete<IssmDouble>(acc);
     319                xDelete<IssmDouble>(evap);
     320                xDelete<IssmDouble>(runoff);
     321                xDelete<IssmDouble>(smb);
     322        }
     323
     324}/*}}}*/
     325void SmbMeltComponentsx(FemModel* femmodel){/*{{{*/
     326
     327        // void SmbMeltComponentsx(acc,evap,melt,refreeze,ni){
     328        //    INPUT parameters: ni: working size of arrays
     329        //    INPUT: surface accumulation (m/yr water equivalent): acc
     330        //    surface evaporation (m/yr water equivalent): evap
     331        //    surface melt (m/yr water equivalent): melt
     332        //    refreeze of surface melt (m/yr water equivalent): refreeze
     333        //    OUTPUT: mass-balance (m/yr ice): agd(NA)
     334        int v;
     335
     336        /*Loop over all the elements of this partition*/
     337        for(int i=0;i<femmodel->elements->Size();i++){
     338                Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
     339
     340                /*Allocate all arrays*/
     341                int         numvertices = element->GetNumberOfVertices();
     342                IssmDouble* acc         = xNew<IssmDouble>(numvertices);
     343                IssmDouble* evap        = xNew<IssmDouble>(numvertices);
     344                IssmDouble* melt        = xNew<IssmDouble>(numvertices);
     345                IssmDouble* refreeze    = xNew<IssmDouble>(numvertices);
     346                IssmDouble* smb         = xNew<IssmDouble>(numvertices);
     347
     348                /*Recover Smb Components*/
     349                element->GetInputListOnVertices(acc,SurfaceforcingsAccumulationEnum);
     350                element->GetInputListOnVertices(evap,SurfaceforcingsEvaporationEnum);
     351                element->GetInputListOnVertices(melt,SurfaceforcingsMeltEnum);
     352                element->GetInputListOnVertices(refreeze,SurfaceforcingsRefreezeEnum);
     353
     354                // loop over all vertices
     355                for(v=0;v<numvertices;v++){
     356                        smb[v]=acc[v]-evap[v]-melt[v]+refreeze[v];
     357                }  //end of the loop over the vertices
     358
     359                /*Add input to element and Free memory*/
     360                element->AddInput(SurfaceforcingsMassBalanceEnum,smb,P1Enum);
     361                xDelete<IssmDouble>(acc);
     362                xDelete<IssmDouble>(evap);
     363                xDelete<IssmDouble>(melt);
     364                xDelete<IssmDouble>(refreeze);
     365                xDelete<IssmDouble>(smb);
     366        }
     367
     368}/*}}}*/
  • issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h

    r17085 r18001  
    1414void PositiveDegreeDayx(FemModel* femmodel);
    1515void SmbHenningx(FemModel* femmodel);
     16void SmbComponentsx(FemModel* femmodel);
     17void SmbMeltComponentsx(FemModel* femmodel);
    1618
    1719#endif  /* _SurfaceMassBalancex_H*/
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r17984 r18001  
    324324        SurfaceforcingsBNegEnum,
    325325        SMBhenningEnum,
     326        SMBcomponentsEnum,
     327        SurfaceforcingsAccumulationEnum,
     328        SurfaceforcingsEvaporationEnum,
     329        SurfaceforcingsRunoffEnum,
     330        SMBmeltcomponentsEnum,
     331        SurfaceforcingsMeltEnum,
     332        SurfaceforcingsRefreezeEnum,
    326333        /*TO BE REMOVED*/
    327334        SurfaceforcingsIspddEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r17984 r18001  
    330330                case SurfaceforcingsBNegEnum : return "SurfaceforcingsBNeg";
    331331                case SMBhenningEnum : return "SMBhenning";
     332                case SMBcomponentsEnum : return "SMBcomponents";
     333                case SurfaceforcingsAccumulationEnum : return "SurfaceforcingsAccumulation";
     334                case SurfaceforcingsEvaporationEnum : return "SurfaceforcingsEvaporation";
     335                case SurfaceforcingsRunoffEnum : return "SurfaceforcingsRunoff";
     336                case SMBmeltcomponentsEnum : return "SMBmeltcomponents";
     337                case SurfaceforcingsMeltEnum : return "SurfaceforcingsMelt";
     338                case SurfaceforcingsRefreezeEnum : return "SurfaceforcingsRefreeze";
    332339                case SurfaceforcingsIspddEnum : return "SurfaceforcingsIspdd";
    333340                case SurfaceforcingsIssmbgradientsEnum : return "SurfaceforcingsIssmbgradients";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r17984 r18001  
    336336              else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
    337337              else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
     338              else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
     339              else if (strcmp(name,"SurfaceforcingsAccumulation")==0) return SurfaceforcingsAccumulationEnum;
     340              else if (strcmp(name,"SurfaceforcingsEvaporation")==0) return SurfaceforcingsEvaporationEnum;
     341              else if (strcmp(name,"SurfaceforcingsRunoff")==0) return SurfaceforcingsRunoffEnum;
     342              else if (strcmp(name,"SMBmeltcomponents")==0) return SMBmeltcomponentsEnum;
     343              else if (strcmp(name,"SurfaceforcingsMelt")==0) return SurfaceforcingsMeltEnum;
     344              else if (strcmp(name,"SurfaceforcingsRefreeze")==0) return SurfaceforcingsRefreezeEnum;
    338345              else if (strcmp(name,"SurfaceforcingsIspdd")==0) return SurfaceforcingsIspddEnum;
    339346              else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
     
    376383              else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
    377384              else if (strcmp(name,"SurfaceNormalVelocity")==0) return SurfaceNormalVelocityEnum;
    378               else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
     385         else stage=4;
     386   }
     387   if(stage==4){
     388              if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
    379389              else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
    380390              else if (strcmp(name,"DepthAverageAnalysis")==0) return DepthAverageAnalysisEnum;
     
    383393              else if (strcmp(name,"SmoothedSurfaceSlopeXAnalysis")==0) return SmoothedSurfaceSlopeXAnalysisEnum;
    384394              else if (strcmp(name,"SmoothedSurfaceSlopeYAnalysis")==0) return SmoothedSurfaceSlopeYAnalysisEnum;
    385          else stage=4;
    386    }
    387    if(stage==4){
    388               if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
     395              else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
    389396              else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
    390397              else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
     
    499506              else if (strcmp(name,"Pressure")==0) return PressureEnum;
    500507              else if (strcmp(name,"PressurePicard")==0) return PressurePicardEnum;
    501               else if (strcmp(name,"QmuPressure")==0) return QmuPressureEnum;
     508         else stage=5;
     509   }
     510   if(stage==5){
     511              if (strcmp(name,"QmuPressure")==0) return QmuPressureEnum;
    502512              else if (strcmp(name,"QmuVx")==0) return QmuVxEnum;
    503513              else if (strcmp(name,"QmuVy")==0) return QmuVyEnum;
     
    506516              else if (strcmp(name,"QmuBase")==0) return QmuBaseEnum;
    507517              else if (strcmp(name,"QmuSurface")==0) return QmuSurfaceEnum;
    508          else stage=5;
    509    }
    510    if(stage==5){
    511               if (strcmp(name,"QmuMelting")==0) return QmuMeltingEnum;
     518              else if (strcmp(name,"QmuMelting")==0) return QmuMeltingEnum;
    512519              else if (strcmp(name,"QmuVxMesh")==0) return QmuVxMeshEnum;
    513520              else if (strcmp(name,"QmuVyMesh")==0) return QmuVyMeshEnum;
     
    622629              else if (strcmp(name,"MisfitObservationEnum")==0) return MisfitObservationEnumEnum;
    623630              else if (strcmp(name,"MisfitTimeinterpolation")==0) return MisfitTimeinterpolationEnum;
    624               else if (strcmp(name,"MisfitWeights")==0) return MisfitWeightsEnum;
     631         else stage=6;
     632   }
     633   if(stage==6){
     634              if (strcmp(name,"MisfitWeights")==0) return MisfitWeightsEnum;
    625635              else if (strcmp(name,"MisfitWeightsEnum")==0) return MisfitWeightsEnumEnum;
    626636              else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum;
     
    629639              else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
    630640              else if (strcmp(name,"MinVx")==0) return MinVxEnum;
    631          else stage=6;
    632    }
    633    if(stage==6){
    634               if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
     641              else if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
    635642              else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
    636643              else if (strcmp(name,"MinVy")==0) return MinVyEnum;
Note: See TracChangeset for help on using the changeset viewer.