Changeset 19002


Ignore:
Timestamp:
01/09/15 08:48:50 (10 years ago)
Author:
bdef
Message:

Adding the inversion capability for hydro related friction law

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

Legend:

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

    r18930 r19002  
    2626
    2727/*Finite Element Analysis*/
    28 void           AdjointHorizAnalysis::Core(FemModel* femmodel){/*{{{*/
     28void AdjointHorizAnalysis::Core(FemModel* femmodel){/*{{{*/
    2929        _error_("not implemented");
    3030}/*}}}*/
     
    10741074        /*Check that control_type is supported*/
    10751075        if(control_type!=MaterialsRheologyBbarEnum &&
    1076                 control_type!=FrictionCoefficientEnum   &&
     1076                control_type!=FrictionCoefficientEnum   &&
     1077                control_type!=FrictionAsEnum   &&
    10771078                control_type!=DamageDbarEnum            &&
    10781079                control_type!=MaterialsRheologyBEnum){
     
    11011102                                case HOApproximationEnum:  GradientJDragHO( element,gradient,control_index); break;
    11021103                                case FSApproximationEnum:  GradientJDragFS( element,gradient,control_index); break;
     1104                                case NoneApproximationEnum: /*Gradient is 0*/                    break;
     1105                                default: _error_("approximation " << EnumToStringx(approximation) << " not supported yet");
     1106                        }
     1107                        break;
     1108                case FrictionAsEnum:
     1109                        switch(approximation){
     1110                                case SSAApproximationEnum: GradientJDragHydroSSA(element,gradient,control_index); break;
     1111                                case L1L2ApproximationEnum:GradientJDragHydroL1L2(element,gradient,control_index); break;
     1112                                case HOApproximationEnum:  GradientJDragHydroHO( element,gradient,control_index); break;
     1113                                case FSApproximationEnum:  GradientJDragHydroFS( element,gradient,control_index); break;
    11031114                                case NoneApproximationEnum: /*Gradient is 0*/                    break;
    11041115                                default: _error_("approximation " << EnumToStringx(approximation) << " not supported yet");
     
    18861897        if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
    18871898}/*}}}*/
     1899
     1900void AdjointHorizAnalysis::GradientJDragHydroFS(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/
     1901
     1902        /*return if floating or not on bed (gradient is 0)*/
     1903        if(element->IsFloating()) return;
     1904        if(!element->IsOnBase()) return;
     1905
     1906        /*Intermediaries*/
     1907        int        domaintype,dim;
     1908        IssmDouble Jdet,weight;
     1909        IssmDouble drag,dalpha2dk,normal[3];
     1910        IssmDouble vx,vy,vz,lambda,mu,xi;
     1911        IssmDouble *xyz_list_base= NULL;
     1912
     1913        /*Fetch number of vertices for this finite element*/
     1914        int numvertices = element->GetNumberOfVertices();
     1915
     1916        /*Initialize some vectors*/
     1917        IssmDouble* basis         = xNew<IssmDouble>(numvertices);
     1918        IssmDouble* ge            = xNewZeroInit<IssmDouble>(numvertices);
     1919        int*        vertexpidlist = xNew<int>(numvertices);
     1920
     1921        /* get domaintype */
     1922        element->FindParam(&domaintype,DomainTypeEnum);
     1923
     1924        /*Build friction element, needed later: */
     1925        if(domaintype!=Domain2DverticalEnum) dim=3;
     1926        else dim=2;
     1927        Friction* friction=new Friction(element,dim);
     1928
     1929        /*Retrieve all inputs we will be needing: */
     1930        element->GetVerticesCoordinatesBase(&xyz_list_base);
     1931        element->GradientIndexing(&vertexpidlist[0],control_index);
     1932        Input* vx_input        = element->GetInput(VxEnum);                   _assert_(vx_input);
     1933        Input* vy_input        = element->GetInput(VyEnum);                   _assert_(vy_input);
     1934        Input* adjointx_input  = element->GetInput(AdjointxEnum);             _assert_(adjointx_input);
     1935        Input* adjointy_input  = element->GetInput(AdjointyEnum);             _assert_(adjointy_input);
     1936        Input* vz_input        = NULL;
     1937        Input* adjointz_input  = NULL;
     1938        if(domaintype!=Domain2DverticalEnum){
     1939                vz_input        = element->GetInput(VzEnum);                   _assert_(vy_input);
     1940                adjointz_input  = element->GetInput(AdjointzEnum);             _assert_(adjointz_input);
     1941        }
     1942
     1943        /* Start  looping on the number of gaussian points: */
     1944        Gauss* gauss=element->NewGaussBase(4);
     1945        for(int ig=gauss->begin();ig<gauss->end();ig++){
     1946                gauss->GaussPoint(ig);
     1947
     1948                adjointx_input->GetInputValue(&lambda, gauss);
     1949                adjointy_input->GetInputValue(&mu, gauss);
     1950                vx_input->GetInputValue(&vx,gauss);
     1951                vy_input->GetInputValue(&vy,gauss);
     1952                if(domaintype!=Domain2DverticalEnum){
     1953                        adjointz_input->GetInputValue(&xi    ,gauss);
     1954                        vz_input->GetInputValue(&vz,gauss);
     1955                }
     1956
     1957                friction->GetAlphaComplement(&dalpha2dk,gauss);
     1958                element->NormalBase(&normal[0],xyz_list_base);
     1959
     1960                element->JacobianDeterminantBase(&Jdet,xyz_list_base,gauss);
     1961                element->NodalFunctionsP1(basis,gauss);
     1962
     1963                /*Build gradient vector (actually -dJ/dk): */
     1964                if(domaintype!=Domain2DverticalEnum){
     1965                        for(int i=0;i<numvertices;i++){
     1966                                ge[i]+=(
     1967                                                        -lambda*(dalpha2dk*(vx - vz*normal[0]*normal[2]))
     1968                                                        -mu    *(dalpha2dk*(vy - vz*normal[1]*normal[2]))
     1969                                                        -xi    *(dalpha2dk*(-vx*normal[0]*normal[2]-vy*normal[1]*normal[2]))
     1970                                                 )*Jdet*gauss->weight*basis[i];
     1971                                _assert_(!xIsNan<IssmDouble>(ge[i]));
     1972                        }
     1973                }
     1974                else{
     1975                        for(int i=0;i<numvertices;i++){
     1976                                ge[i]+=(
     1977                                                        -lambda*dalpha2dk*vx
     1978                                                        -mu    *dalpha2dk*vy
     1979                                                 )*Jdet*gauss->weight*basis[i];
     1980                                _assert_(!xIsNan<IssmDouble>(ge[i]));
     1981                        }
     1982                }
     1983        }
     1984        gradient->SetValues(numvertices,vertexpidlist,ge,ADD_VAL);
     1985
     1986        /*Clean up and return*/
     1987        xDelete<IssmDouble>(xyz_list_base);
     1988        xDelete<IssmDouble>(basis);
     1989        xDelete<IssmDouble>(ge);
     1990        xDelete<int>(vertexpidlist);
     1991        delete gauss;
     1992        delete friction;
     1993}/*}}}*/
     1994void           AdjointHorizAnalysis::GradientJDragHydroL1L2(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/
     1995
     1996        /*Same as SSA*/
     1997        return this->GradientJDragSSA(element,gradient,control_index);
     1998}/*}}}*/
     1999void           AdjointHorizAnalysis::GradientJDragHydroHO(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/
     2000
     2001        /*return if floating or not on bed (gradient is 0)*/
     2002        if(element->IsFloating()) return;
     2003        if(!element->IsOnBase()) return;
     2004
     2005        /*Intermediaries*/
     2006        IssmDouble Jdet,weight;
     2007        IssmDouble drag,dalpha2dk;
     2008        IssmDouble vx,vy,lambda,mu;
     2009        IssmDouble *xyz_list_base= NULL;
     2010
     2011        int      domaintype,dim;
     2012        element->FindParam(&domaintype,DomainTypeEnum);
     2013        /*Fetch number of vertices for this finite element*/
     2014        int numvertices = element->GetNumberOfVertices();
     2015
     2016        /*Initialize some vectors*/
     2017        IssmDouble* basis         = xNew<IssmDouble>(numvertices);
     2018        IssmDouble* ge            = xNewZeroInit<IssmDouble>(numvertices);
     2019        int*        vertexpidlist = xNew<int>(numvertices);
     2020
     2021        /*Build friction element, needed later: */
     2022        if(domaintype!=Domain2DverticalEnum) dim=3;
     2023        else dim=2;
     2024        Friction* friction=new Friction(element,dim);
     2025
     2026        /*Retrieve all inputs we will be needing: */
     2027        element->GetVerticesCoordinatesBase(&xyz_list_base);
     2028        element->GradientIndexing(&vertexpidlist[0],control_index);
     2029        Input* vx_input        = element->GetInput(VxEnum);                   _assert_(vx_input);
     2030        Input* vy_input        = NULL;
     2031        Input* adjointx_input  = element->GetInput(AdjointxEnum);             _assert_(adjointx_input);
     2032        Input* adjointy_input  = NULL;
     2033        if(domaintype!=Domain2DverticalEnum){
     2034                vy_input        = element->GetInput(VyEnum);                   _assert_(vy_input);
     2035                adjointy_input  = element->GetInput(AdjointyEnum);             _assert_(adjointy_input);
     2036        }
     2037        /* Start  looping on the number of gaussian points: */
     2038        Gauss* gauss=element->NewGaussBase(4);
     2039        for(int ig=gauss->begin();ig<gauss->end();ig++){
     2040                gauss->GaussPoint(ig);
     2041
     2042                adjointx_input->GetInputValue(&lambda, gauss);
     2043                vx_input->GetInputValue(&vx,gauss);
     2044                if(domaintype!=Domain2DverticalEnum){
     2045                        adjointy_input->GetInputValue(&mu, gauss);
     2046                        vy_input->GetInputValue(&vy,gauss);
     2047                }
     2048
     2049                friction->GetAlphaComplement(&dalpha2dk,gauss);
     2050
     2051                element->JacobianDeterminantBase(&Jdet,xyz_list_base,gauss);
     2052                element->NodalFunctionsP1(basis,gauss);
     2053
     2054                /*Build gradient vector (actually -dJ/dD): */
     2055                for(int i=0;i<numvertices;i++){
     2056                        if(domaintype!=Domain2DverticalEnum) ge[i]+=-dalpha2dk*((lambda*vx+mu*vy))*Jdet*gauss->weight*basis[i];
     2057                        else ge[i]+=-dalpha2dk*(lambda*vx)*Jdet*gauss->weight*basis[i];
     2058                        _assert_(!xIsNan<IssmDouble>(ge[i]));
     2059                }
     2060        }
     2061        gradient->SetValues(numvertices,vertexpidlist,ge,ADD_VAL);
     2062
     2063        /*Clean up and return*/
     2064        xDelete<IssmDouble>(xyz_list_base);
     2065        xDelete<IssmDouble>(basis);
     2066        xDelete<IssmDouble>(ge);
     2067        xDelete<int>(vertexpidlist);
     2068        delete gauss;
     2069        delete friction;
     2070}/*}}}*/
     2071
     2072void AdjointHorizAnalysis::GradientJDragHydroSSA(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/
     2073
     2074        /*return if floating (gradient is 0)*/
     2075        if(element->IsFloating()) return;
     2076
     2077        /*Intermediaries*/
     2078        int      domaintype,dim;
     2079        Element* basalelement;
     2080
     2081        /*Get basal element*/
     2082        element->FindParam(&domaintype,DomainTypeEnum);
     2083        switch(domaintype){
     2084                case Domain2DhorizontalEnum:
     2085                        basalelement = element;
     2086                        dim          = 2;
     2087                        break;
     2088                case Domain2DverticalEnum:
     2089                        if(!element->IsOnBase()) return;
     2090                        basalelement = element->SpawnBasalElement();
     2091                        dim          = 1;
     2092                        break;
     2093                case Domain3DEnum:
     2094                        if(!element->IsOnBase()) return;
     2095                        basalelement = element->SpawnBasalElement();
     2096                        dim          = 2;
     2097                        break;
     2098                default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
     2099        }
     2100
     2101        /*Intermediaries*/
     2102        IssmDouble Jdet,weight;
     2103        IssmDouble dalpha2dk;
     2104        IssmDouble vx,vy,lambda,mu;
     2105        IssmDouble *xyz_list= NULL;
     2106
     2107
     2108        /*Fetch number of vertices for this finite element*/
     2109        int numvertices = basalelement->GetNumberOfVertices();
     2110
     2111        /*Initialize some vectors*/
     2112        IssmDouble* basis         = xNew<IssmDouble>(numvertices);
     2113        IssmDouble* ge            = xNewZeroInit<IssmDouble>(numvertices);
     2114        int*        vertexpidlist = xNew<int>(numvertices);
     2115
     2116        /*Build friction element, needed later: */
     2117        Friction* friction=new Friction(basalelement,dim);
     2118
     2119        /*Retrieve all inputs we will be needing: */
     2120        basalelement->GetVerticesCoordinates(&xyz_list);
     2121        basalelement->GradientIndexing(&vertexpidlist[0],control_index);
     2122        Input* vx_input        = basalelement->GetInput(VxEnum);          _assert_(vx_input);
     2123        Input* vy_input        = basalelement->GetInput(VyEnum);          _assert_(vy_input);
     2124        Input* adjointx_input  = basalelement->GetInput(AdjointxEnum);    _assert_(adjointx_input);
     2125        Input* adjointy_input  = basalelement->GetInput(AdjointyEnum);    _assert_(adjointy_input);
     2126
     2127
     2128
     2129        IssmDouble  q_exp;
     2130        IssmDouble  C_param;
     2131        IssmDouble  As;
     2132        IssmDouble  Neff;
     2133        IssmDouble  n;
     2134        IssmDouble  alpha;
     2135        IssmDouble  Chi,Gamma;
     2136        IssmDouble  vz,vmag;
     2137        IssmDouble  Uder;
     2138
     2139        /*Recover parameters: */
     2140        Input* qinput = basalelement->GetInput(FrictionQEnum);
     2141        Input* cinput = basalelement->GetInput(FrictionCEnum);
     2142        Input* Asinput = basalelement->GetInput(FrictionAsEnum);
     2143        Input* Ninput = basalelement->GetInput(FrictionEffectivePressureEnum);
     2144        Input* nInput =basalelement->GetInput(MaterialsRheologyNEnum);
     2145       
     2146        /* Start  looping on the number of gaussian points: */
     2147        Gauss* gauss=basalelement->NewGauss(4);
     2148        for(int ig=gauss->begin();ig<gauss->end();ig++){
     2149                gauss->GaussPoint(ig);
     2150
     2151                adjointx_input->GetInputValue(&lambda, gauss);
     2152                adjointy_input->GetInputValue(&mu, gauss);
     2153                vx_input->GetInputValue(&vx,gauss);
     2154                vy_input->GetInputValue(&vy,gauss);
     2155
     2156                friction->GetAlphaComplement(&dalpha2dk,gauss);
     2157
     2158                basalelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
     2159                basalelement->NodalFunctionsP1(basis,gauss);
     2160
     2161                /*Dealing with dalpha/du*/
     2162                qinput->GetInputValue(&q_exp,gauss);
     2163                cinput->GetInputValue(&C_param,gauss);
     2164                Asinput->GetInputValue(&As,gauss);
     2165                Ninput->GetInputValue(&Neff,gauss);
     2166                nInput->GetInputValue(&n,gauss);
     2167
     2168                if (q_exp==1){
     2169                        alpha=1;
     2170                }
     2171                else{
     2172                        alpha=(pow(q_exp-1,q_exp-1))/pow(q_exp,q_exp);
     2173                }
     2174                Chi   = vmag/(pow(C_param,n)*pow(Neff,n)*As);
     2175                Gamma = (Chi/(1.+alpha*pow(Chi,q_exp)));
     2176               
     2177                Uder =Neff*C_param/(vmag*vmag*n) *
     2178                        (Gamma-alpha*q_exp*pow(Chi,q_exp-1.)*Gamma*Gamma* pow(Gamma,(1.-n)/n) -
     2179                         n* pow(Gamma,1./n));
     2180               
     2181                /*Build gradient vector (actually -dJ/dD): */
     2182                for(int i=0;i<numvertices;i++){
     2183                        ge[i]+=-dalpha2dk*((lambda*vx+mu*vy))*Jdet*gauss->weight*basis[i];
     2184                        _assert_(!xIsNan<IssmDouble>(ge[i]));
     2185                }
     2186        }
     2187        gradient->SetValues(numvertices,vertexpidlist,ge,ADD_VAL);
     2188
     2189        /*Clean up and return*/
     2190        xDelete<IssmDouble>(xyz_list);
     2191        xDelete<IssmDouble>(basis);
     2192        xDelete<IssmDouble>(ge);
     2193        xDelete<int>(vertexpidlist);
     2194        delete gauss;
     2195        delete friction;
     2196        if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
     2197}/*}}}*/
     2198
    18882199void           AdjointHorizAnalysis::GradientJDSSA(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/
    18892200
  • issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h

    r18930 r19002  
    5050                void           GradientJDragHO(Element* element,Vector<IssmDouble>* gradient,int control_index);
    5151                void           GradientJDragSSA(Element* element,Vector<IssmDouble>* gradient,int control_index);
     52                void           GradientJDragHydroFS(Element* element,Vector<IssmDouble>* gradient,int control_index);
     53                void           GradientJDragHydroL1L2(Element* element,Vector<IssmDouble>* gradient,int control_index);
     54                void           GradientJDragHydroHO(Element* element,Vector<IssmDouble>* gradient,int control_index);
     55                void           GradientJDragHydroSSA(Element* element,Vector<IssmDouble>* gradient,int control_index);
    5256                void           GradientJDSSA(Element* element,Vector<IssmDouble>* gradient,int control_index);
    5357                void           InputUpdateFromSolution(IssmDouble* solution,Element* element);
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r18959 r19002  
    11481148                                name==WatercolumnEnum ||
    11491149                                name==FrictionCoefficientEnum ||
     1150                                name==FrictionAsEnum ||
    11501151                                name==MaskGroundediceLevelsetEnum ||
    11511152                                name==MaskIceLevelsetEnum ||
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r18968 r19002  
    15741574                                case ThicknessEnum:
    15751575                                case FrictionCoefficientEnum:
     1576                          case FrictionAsEnum: 
    15761577                                case MaterialsRheologyBEnum:
    15771578                                        if(iomodel->Data(control)){
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r18976 r19002  
    17741774                                case BalancethicknessOmegaEnum:
    17751775                                case FrictionCoefficientEnum:
    1776                                 case MaterialsRheologyBEnum:
     1776                          case FrictionAsEnum:
     1777                          case MaterialsRheologyBEnum:
    17771778                                        if(iomodel->Data(control)){
    17781779                                                for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data(control)[tria_vertex_ids[j]-1];
  • issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h

    r18450 r19002  
    4949                void GetInputValue(bool* pvalue){_error_("not implemented yet");}
    5050                void GetInputValue(int* pvalue){_error_("not implemented yet");}
    51                 void GetInputValue(IssmDouble* pvalue){_error_("not implemented yet");}
     51                void GetInputValue(IssmDouble* pvalue){_error_("not implemented yet (Input is "<<EnumToStringx(this->enum_type)<<")");}//{_error_("not implemented yet");}
    5252                void GetInputValue(IssmDouble* pvalue,Gauss* gauss);
    5353                void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Loads/Friction.cpp

    r18992 r19002  
    126126        IssmDouble  n;
    127127        IssmDouble  alpha;
    128         IssmDouble  Chi;
     128        IssmDouble  Chi,Gamma;
    129129        IssmDouble  vx,vy,vz,vmag;
    130130        IssmDouble  alpha_complement;
     
    133133        element->GetInputValue(&q_exp,FrictionQEnum);
    134134        element->GetInputValue(&C_param,FrictionCEnum);
    135         element->GetInputValue(&As,FrictionAsEnum);
    136 
     135
     136        element->GetInputValue(&As,gauss,FrictionAsEnum);
    137137        element->GetInputValue(&Neff,gauss,FrictionEffectivePressureEnum);
    138138        element->GetInputValue(&n,gauss,MaterialsRheologyNEnum);
     
    160160                        _error_("not supported");
    161161        }
     162        //      vmag=100./(3600.*24.*365.);
     163
    162164        if (q_exp==1){
    163165                alpha=1;
     
    166168                alpha=(pow(q_exp-1,q_exp-1))/pow(q_exp,q_exp);
    167169        }
    168         Chi=vmag/(pow(C_param,n)*pow(Neff,n)*As);
    169 
     170        Chi   = vmag/(pow(C_param,n)*pow(Neff,n)*As);
     171        Gamma = (Chi/(1.+alpha*pow(Chi,q_exp)));
    170172        /*Check to prevent dividing by zero if vmag==0*/
    171173        if(vmag==0.) alpha_complement=0.;
    172         else if(Neff==0.) alpha_complement=0.;
    173         else alpha_complement=-(C_param*Neff/(vmag*n)) * pow((Chi/(alpha*pow(Chi,q_exp)+1)),((1-n)/n)) *(Chi/(As*(alpha*pow(Chi,q_exp)+1)))-(alpha*q_exp*pow(Chi,q_exp+1)/(As*(alpha*pow(Chi,q_exp)+1)));
     174        else    if(Neff==0.) alpha_complement=0.;
     175        else    alpha_complement=-(C_param*Neff/(n*vmag)) *
     176                                        pow(Gamma,((1.-n)/n)) *
     177                                        (Gamma/As - (alpha*q_exp*pow(Chi,q_exp-1.)* Gamma * Gamma/As));
     178
    174179        _assert_(!xIsNan<IssmDouble>(alpha_complement));
    175180        /*Assign output pointers:*/
     
    221226
    222227        IssmDouble  alpha;
    223         IssmDouble  Chi;
     228        IssmDouble  Chi,Gamma;
    224229
    225230        IssmDouble  vx,vy,vz,vmag;
     
    229234        element->GetInputValue(&q_exp,FrictionQEnum);
    230235        element->GetInputValue(&C_param,FrictionCEnum);
    231         element->GetInputValue(&As,FrictionAsEnum);
     236        element->GetInputValue(&As,gauss,FrictionAsEnum);
    232237
    233238        element->GetInputValue(&Neff,gauss,FrictionEffectivePressureEnum);
     
    256261        }
    257262
     263        //      vmag=100./(3600.*24.*365.);
    258264        //compute alpha and Chi coefficients: */
    259265        if (q_exp==1){
     
    264270        }
    265271        Chi=vmag/(pow(C_param,n)*pow(Neff,n)*As);
    266 
    267         /*Check to prevent dividing by zero if vmag==0*/
    268         if(vmag==0.) alpha2=0.;
    269         else if (Neff==0) alpha2=0.0;
    270         else alpha2= Neff * C_param * pow((Chi/(1 + alpha * pow(Chi,q_exp))),1/n) * 1/vmag;
     272        Gamma=(Chi/(1. + alpha * pow(Chi,q_exp)));
     273        /*Check to prevent dividing by zero if vmag==0*/
     274        if(vmag==0.) alpha2=0.;
     275        else    if (Neff==0) alpha2=0.0;
     276        else    alpha2=Neff * C_param * pow(Gamma,1./n) * 1/vmag;
     277
    271278        _assert_(!xIsNan<IssmDouble>(alpha2));
    272279        /*Assign output pointers:*/
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp

    r18830 r19002  
    4848                switch(control){
    4949                        /*List of supported controls*/
    50                         case BalancethicknessThickeningRateEnum:
     50                  case BalancethicknessThickeningRateEnum:
    5151                        case VxEnum:
    5252                        case VyEnum:
    5353                        case ThicknessEnum:
    54                         case FrictionCoefficientEnum:
    55                         case BalancethicknessApparentMassbalanceEnum:
     54                  case FrictionCoefficientEnum:
     55                  case FrictionAsEnum:
     56                  case BalancethicknessApparentMassbalanceEnum:
    5657                        case BalancethicknessOmegaEnum:
    5758                        case MaterialsRheologyBEnum:
Note: See TracChangeset for help on using the changeset viewer.