Changeset 16876


Ignore:
Timestamp:
11/21/13 20:55:55 (11 years ago)
Author:
Mathieu Morlighem
Message:

NEW: Adjoint SSA and SIA

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

Legend:

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

    r16863 r16876  
    2727/*Finite Element Analysis*/
    2828ElementMatrix* AdjointHorizAnalysis::CreateKMatrix(Element* element){/*{{{*/
    29         _error_("not implemented yet");
     29        int approximation;
     30        element->GetInputValue(&approximation,ApproximationEnum);
     31        switch(approximation){
     32                case SSAApproximationEnum:
     33                        return CreateKMatrixSSA(element);
     34                case HOApproximationEnum:
     35                        return CreateKMatrixHO(element);
     36                case FSApproximationEnum:
     37                        return CreateKMatrixFS(element);
     38                case NoneApproximationEnum:
     39                        return NULL;
     40                default:
     41                        _error_("Approximation "<<EnumToStringx(approximation)<<" not supported");
     42        }
     43}/*}}}*/
     44ElementMatrix* AdjointHorizAnalysis::CreateKMatrixSSA(Element* element){/*{{{*/
     45
     46        /*Intermediaries*/
     47        int      meshtype;
     48        Element* basalelement;
     49
     50        /*Get basal element*/
     51        element->FindParam(&meshtype,MeshTypeEnum);
     52        switch(meshtype){
     53                case Mesh2DhorizontalEnum:
     54                        basalelement = element;
     55                        break;
     56                case Mesh3DEnum:
     57                        if(!element->IsOnBed()) return NULL;
     58                        basalelement = element->SpawnBasalElement();
     59                        break;
     60                default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet");
     61        }
     62
     63        /*Intermediaries */
     64        bool        incomplete_adjoint;
     65        IssmDouble  Jdet,thickness,mu_prime;
     66        IssmDouble  eps1dotdphii,eps1dotdphij,eps2dotdphii,eps2dotdphij;
     67        IssmDouble  eps1[2],eps2[2],epsilon[3];
     68        IssmDouble *xyz_list = NULL;
     69
     70        /*Fetch number of nodes and dof for this finite element*/
     71        int numnodes = basalelement->GetNumberOfNodes();
     72
     73        /*Initialize Jacobian with regular SSA (first part of the Gateau derivative)*/
     74        basalelement->FindParam(&incomplete_adjoint,InversionIncompleteAdjointEnum);
     75        StressbalanceAnalysis* analysis = new StressbalanceAnalysis();
     76        ElementMatrix* Ke=analysis->CreateKMatrix(element);
     77        delete analysis;
     78        if(incomplete_adjoint) return Ke;
     79
     80        /*Retrieve all inputs and parameters*/
     81        basalelement->GetVerticesCoordinates(&xyz_list);
     82        Input* vx_input        = basalelement->GetInput(VxEnum);       _assert_(vx_input);
     83        Input* vy_input        = basalelement->GetInput(VyEnum);       _assert_(vy_input);
     84        Input* thickness_input = basalelement->GetInput(ThicknessEnum); _assert_(thickness_input);
     85
     86        /*Allocate dbasis*/
     87        IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes);
     88
     89        /* Start  looping on the number of gaussian points: */
     90        Gauss* gauss=basalelement->NewGauss(2);
     91        for(int ig=gauss->begin();ig<gauss->end();ig++){
     92                gauss->GaussPoint(ig);
     93
     94                basalelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
     95                basalelement->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
     96
     97                thickness_input->GetInputValue(&thickness, gauss);
     98                basalelement->StrainRateSSA(&epsilon[0],xyz_list,gauss,vx_input,vy_input);
     99                basalelement->ViscositySSADerivativeEpsSquare(&mu_prime,&epsilon[0]);
     100                eps1[0]=2.*epsilon[0]+epsilon[1]; eps2[0]=epsilon[2];
     101                eps1[1]=epsilon[2];               eps2[1]=epsilon[0]+2*epsilon[1];
     102
     103                for(int i=0;i<numnodes;i++){
     104                        for(int j=0;j<numnodes;j++){
     105                                eps1dotdphii=eps1[0]*dbasis[0*numnodes+i]+eps1[1]*dbasis[1*numnodes+i];
     106                                eps1dotdphij=eps1[0]*dbasis[0*numnodes+j]+eps1[1]*dbasis[1*numnodes+j];
     107                                eps2dotdphii=eps2[0]*dbasis[0*numnodes+i]+eps2[1]*dbasis[1*numnodes+i];
     108                                eps2dotdphij=eps2[0]*dbasis[0*numnodes+j]+eps2[1]*dbasis[1*numnodes+j];
     109
     110                                Ke->values[2*numnodes*(2*i+0)+2*j+0]+=gauss->weight*Jdet*2*mu_prime*thickness*eps1dotdphij*eps1dotdphii;
     111                                Ke->values[2*numnodes*(2*i+0)+2*j+1]+=gauss->weight*Jdet*2*mu_prime*thickness*eps2dotdphij*eps1dotdphii;
     112                                Ke->values[2*numnodes*(2*i+1)+2*j+0]+=gauss->weight*Jdet*2*mu_prime*thickness*eps1dotdphij*eps2dotdphii;
     113                                Ke->values[2*numnodes*(2*i+1)+2*j+1]+=gauss->weight*Jdet*2*mu_prime*thickness*eps2dotdphij*eps2dotdphii;
     114                        }
     115                }
     116        }
     117
     118        /*Transform Coordinate System*/
     119        basalelement->TransformStiffnessMatrixCoord(Ke,XYEnum);
     120
     121        /*Clean up and return*/
     122        delete gauss;
     123        xDelete<IssmDouble>(dbasis);
     124        xDelete<IssmDouble>(xyz_list);
     125        if(meshtype!=Mesh2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
     126        return Ke;
     127}/*}}}*/
     128ElementMatrix* AdjointHorizAnalysis::CreateKMatrixHO(Element* element){/*{{{*/
     129        _error_("S");
     130}/*}}}*/
     131ElementMatrix* AdjointHorizAnalysis::CreateKMatrixFS(Element* element){/*{{{*/
     132        _error_("S");
    30133}/*}}}*/
    31134ElementVector* AdjointHorizAnalysis::CreatePVector(Element* element){/*{{{*/
  • issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h

    r16847 r16876  
    2222                /*Finite element Analysis*/
    2323                ElementMatrix* CreateKMatrix(Element* element);
     24                ElementMatrix* CreateKMatrixSSA(Element* element);
     25                ElementMatrix* CreateKMatrixHO(Element* element);
     26                ElementMatrix* CreateKMatrixFS(Element* element);
    2427                ElementVector* CreatePVector(Element* element);
    2528                ElementVector* CreatePVectorSSA(Element* element);
  • issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp

    r16850 r16876  
    136136/*Finite Element Analysis*/
    137137ElementMatrix* StressbalanceSIAAnalysis::CreateKMatrix(Element* element){/*{{{*/
    138         _error_("not implemented yet");
     138        int meshtype;
     139        element->FindParam(&meshtype,MeshTypeEnum);
     140        switch(meshtype){
     141                case Mesh2DhorizontalEnum:
     142                        return CreateKMatrix2D(element);
     143                case Mesh3DEnum:
     144                        return CreateKMatrix3D(element);
     145                default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet");
     146        }
     147}/*}}}*/
     148ElementMatrix* StressbalanceSIAAnalysis::CreateKMatrix2D(Element* element){/*{{{*/
     149
     150        /*Intermediaries */
     151        IssmDouble connectivity;
     152
     153        /*Fetch number vertices for this element*/
     154        int numvertices = element->GetNumberOfVertices();
     155
     156        /*Initialize Element vector*/
     157        ElementMatrix* Ke=element->NewElementMatrix();
     158        for(int iv=0;iv<numvertices;iv++){
     159                connectivity=(IssmDouble)element->VertexConnectivity(iv);
     160                Ke->values[(2*iv+0)*2*numvertices+(2*iv+0)]=1./connectivity;
     161                Ke->values[(2*iv+1)*2*numvertices+(2*iv+1)]=1./connectivity;
     162        }
     163
     164        /*Clean up and return*/
     165        return Ke;
     166}/*}}}*/
     167ElementMatrix* StressbalanceSIAAnalysis::CreateKMatrix3D(Element* element){/*{{{*/
     168
     169        /*Intermediaries */
     170        int         i0,i1,j0,j1,nodeup,nodedown,numsegments;
     171        IssmDouble  slope[2],connectivity[2],one0,one1;
     172        int        *pairindices = NULL;
     173
     174        /*Fetch number vertices for this element*/
     175        int numvertices = element->GetNumberOfVertices();
     176        int numdof      = 2*numvertices;
     177
     178        /*Initialize Element vector*/
     179        ElementMatrix* Ke=element->NewElementMatrix();
     180
     181        element->VerticalSegmentIndices(&pairindices,&numsegments);
     182        for(int is=0;is<numsegments;is++){
     183                nodedown = pairindices[is*2+0];
     184                nodeup   = pairindices[is*2+1];
     185                connectivity[0]=(IssmDouble)element->VertexConnectivity(nodedown);
     186                connectivity[1]=(IssmDouble)element->VertexConnectivity(nodeup);
     187                one0=1./connectivity[0];
     188                one1=1./connectivity[1];
     189
     190                /*2 dofs of first node*/
     191                i0=2*nodedown;  i1=2*nodedown+1;
     192                /*2 dofs of second node*/
     193                j0=2*nodeup;    j1=2*nodeup+1;
     194
     195                /*Create matrix for these two nodes*/
     196                if(element->IsOnBed() && element->IsOnSurface()){
     197                        Ke->values[i0*numdof+i0] = +one0;
     198                        Ke->values[i1*numdof+i1] = +one0;
     199                        Ke->values[j0*numdof+i0] = -one1;
     200                        Ke->values[j0*numdof+j0] = +one1;
     201                        Ke->values[j1*numdof+i1] = -one1;
     202                        Ke->values[j1*numdof+j1] = +one1;
     203                }
     204                else if(element->IsOnBed()){
     205                        Ke->values[i0*numdof+i0] = one0;
     206                        Ke->values[i1*numdof+i1] = one0;
     207                        Ke->values[j0*numdof+i0] = -2.*one1;
     208                        Ke->values[j0*numdof+j0] = +2.*one1;
     209                        Ke->values[j1*numdof+i1] = -2.*one1;
     210                        Ke->values[j1*numdof+j1] = +2.*one1;
     211                }
     212                else if(element->IsOnSurface()){
     213                        Ke->values[j0*numdof+i0] = -one1;
     214                        Ke->values[j0*numdof+j0] = +one1;
     215                        Ke->values[j1*numdof+i1] = -one1;
     216                        Ke->values[j1*numdof+j1] = +one1;
     217                }
     218                else{ //node is on two horizontal layers and beams include the values only once, so the have to use half of the connectivity
     219                        Ke->values[j0*numdof+i0] = -2.*one1;
     220                        Ke->values[j0*numdof+j0] = +2.*one1;
     221                        Ke->values[j1*numdof+i1] = -2.*one1;
     222                        Ke->values[j1*numdof+j1] = +2.*one1;
     223                }
     224        }
     225
     226        /*Clean up and return*/
     227        xDelete<int>(pairindices);
     228        return Ke;
    139229}/*}}}*/
    140230ElementVector* StressbalanceSIAAnalysis::CreatePVector(Element* element){/*{{{*/
  • issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h

    r16849 r16876  
    2222                /*Finite element Analysis*/
    2323                ElementMatrix* CreateKMatrix(Element* element);
     24                ElementMatrix* CreateKMatrix2D(Element* element);
     25                ElementMatrix* CreateKMatrix3D(Element* element);
    2426                ElementVector* CreatePVector(Element* element);
    2527                ElementVector* CreatePVector2D(Element* element);
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r16873 r16876  
    5656                virtual IssmDouble EnthalpyDiffusionParameter(IssmDouble enthalpy,IssmDouble pressure)=0;
    5757                virtual IssmDouble EnthalpyDiffusionParameterVolume(int numvertices,IssmDouble* enthalpy,IssmDouble* pressure)=0;
     58                virtual void   FindParam(bool* pvalue,int paramenum)=0;
    5859                virtual void   FindParam(int* pvalue,int paramenum)=0;
    5960                virtual void   FindParam(IssmDouble* pvalue,int paramenum)=0;
     
    170171                virtual void   ViscosityHO(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0;
    171172                virtual void   ViscositySSA(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0;
     173                virtual void   ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon)=0;
     174                virtual void   StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0;
    172175                virtual int    VelocityInterpolation()=0;
    173176                virtual int    PressureInterpolation()=0;
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r16873 r16876  
    867867IssmDouble Penta::EnthalpyDiffusionParameterVolume(int numvertices,IssmDouble* enthalpy,IssmDouble* pressure){
    868868        return matpar->GetEnthalpyDiffusionParameterVolume(numvertices,enthalpy,pressure);
     869}
     870/*}}}*/
     871/*FUNCTION Penta::FindParam(bool* pvalue,int paramenum){{{*/
     872void Penta::FindParam(bool* pvalue,int paramenum){
     873        this->parameters->FindParam(pvalue,paramenum);
    869874}
    870875/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r16873 r16876  
    7878                void   DeleteMaterials(void){_error_("not implemented yet");};
    7979                void   ElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz);
     80                void   FindParam(bool* pvalue,int paramenum);
    8081                void   FindParam(int* pvalue,int paramenum);
    8182                void   FindParam(IssmDouble* pvalue,int paramenum);
     
    297298                void           ViscosityHO(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
    298299                void           ViscositySSA(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not implemented");};
     300                void           ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not implemented");};
     301                void           StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not implemented");};
    299302
    300303                #ifdef _HAVE_STRESSBALANCE_
  • issm/trunk-jpl/src/c/classes/Elements/Seg.cpp

    r16862 r16876  
    8888}
    8989/*}}}*/
     90/*FUNCTION Seg::FindParam(bool* pvalue,int paramenum){{{*/
     91void Seg::FindParam(bool* pvalue,int paramenum){
     92        this->parameters->FindParam(pvalue,paramenum);
     93}
     94/*}}}*/
    9095/*FUNCTION Seg::FindParam(int* pvalue,int paramenum){{{*/
    9196void Seg::FindParam(int* pvalue,int paramenum){
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r16873 r16876  
    9191                IssmDouble  EnthalpyDiffusionParameter(IssmDouble enthalpy,IssmDouble pressure){_error_("not implemented");};
    9292                IssmDouble  EnthalpyDiffusionParameterVolume(int numvertices,IssmDouble* enthalpy,IssmDouble* pressure){_error_("not implemented");};
     93                void        FindParam(bool* pvalue,int paramenum);
    9394                void        FindParam(int* pvalue,int paramenum);
    9495                void        FindParam(IssmDouble* pvalue,int paramenum);
     
    172173                void        ViscosityHO(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not implemented");};
    173174                void        ViscositySSA(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not implemented");};
     175                void        ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not implemented");};
     176                void        StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not implemented");};
    174177                bool        IsZeroLevelset(int levelset_enum){_error_("not implemented");};
    175178                void        ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum){_error_("not implemented");};
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r16873 r16876  
    663663
    664664                /*Compute strain rate viscosity and pressure: */
    665                 this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
     665                this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
    666666                material->GetViscosity2d(&viscosity,&epsilon[0]);
    667667                pressure_input->GetInputValue(&pressure,gauss);
     
    848848}
    849849/*}}}*/
     850/*FUNCTION Tria::FindParam(bool* pvalue,int paramenum){{{*/
     851void Tria::FindParam(bool* pvalue,int paramenum){
     852        this->parameters->FindParam(pvalue,paramenum);
     853}
     854/*}}}*/
    850855/*FUNCTION Tria::FindParam(int* pvalue,int paramenum){{{*/
    851856void Tria::FindParam(int* pvalue,int paramenum){
     
    15621567void  Tria::GetConnectivityList(int* connectivity){
    15631568        for(int i=0;i<NUMVERTICES;i++) connectivity[i]=vertices[i]->Connectivity();
    1564 }
    1565 /*}}}*/
    1566 /*FUNCTION Tria::GetStrainRate2d(IssmDouble* epsilon,IssmDouble* xyz_list, Gauss* gauss, Input* vx_input, Input* vy_input){{{*/
    1567 void Tria::GetStrainRate2d(IssmDouble* epsilon,IssmDouble* xyz_list, Gauss* gauss, Input* vx_input, Input* vy_input){
    1568         /*Compute the 2d Strain Rate (3 components):
    1569          * epsilon=[exx eyy exy] */
    1570 
    1571         int i;
    1572         IssmDouble epsilonvx[3];
    1573         IssmDouble epsilonvy[3];
    1574 
    1575         /*Check that both inputs have been found*/
    1576         if (!vx_input || !vy_input){
    1577                 _error_("Input missing. Here are the input pointers we have for vx: " << vx_input << ", vy: " << vy_input << "\n");
    1578         }
    1579 
    1580         /*Get strain rate assuming that epsilon has been allocated*/
    1581         vx_input->GetVxStrainRate2d(epsilonvx,xyz_list,gauss);
    1582         vy_input->GetVyStrainRate2d(epsilonvy,xyz_list,gauss);
    1583 
    1584         /*Sum all contributions*/
    1585         for(i=0;i<3;i++) epsilon[i]=epsilonvx[i]+epsilonvy[i];
    15861569}
    15871570/*}}}*/
     
    30733056        IssmDouble epsilon[3];/* epsilon=[exx,eyy,exy];    */
    30743057
    3075         this->GetStrainRate2d(&epsilon[0],xyz_list,gauss,vx_input,vy_input);
     3058        this->StrainRateSSA(&epsilon[0],xyz_list,gauss,vx_input,vy_input);
    30763059        material->GetViscosity2dvertical(&viscosity, &epsilon[0]);
    30773060
     
    30873070        IssmDouble epsilon[3];/* epsilon=[exx,eyy,exy];    */
    30883071
    3089         this->GetStrainRate2d(&epsilon[0],xyz_list,gauss,vx_input,vy_input);
     3072        this->StrainRateSSA(&epsilon[0],xyz_list,gauss,vx_input,vy_input);
    30903073        material->GetViscosity2d(&viscosity, &epsilon[0]);
    30913074
    30923075        /*Assign output pointer*/
    30933076        *pviscosity=viscosity;
     3077}
     3078/*}}}*/
     3079/*FUNCTION Tria::ViscositySSADerivativeEpsSquare{{{*/
     3080void Tria::ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){
     3081        this->material->GetViscosity2dDerivativeEpsSquare(pmu_prime,epsilon);
     3082}
     3083/*}}}*/
     3084/*FUNCTION Tria::StrainRateSSA{{{*/
     3085void Tria::StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){
     3086
     3087        int i;
     3088        IssmDouble epsilonvx[3];
     3089        IssmDouble epsilonvy[3];
     3090
     3091        /*Check that both inputs have been found*/
     3092        if (!vx_input || !vy_input){
     3093                _error_("Input missing. Here are the input pointers we have for vx: " << vx_input << ", vy: " << vy_input << "\n");
     3094        }
     3095
     3096        /*Get strain rate assuming that epsilon has been allocated*/
     3097        vx_input->GetVxStrainRate2d(epsilonvx,xyz_list,gauss);
     3098        vy_input->GetVyStrainRate2d(epsilonvy,xyz_list,gauss);
     3099
     3100        /*Sum all contributions*/
     3101        for(i=0;i<3;i++) epsilon[i]=epsilonvx[i]+epsilonvy[i];
    30943102}
    30953103/*}}}*/
     
    37473755                GetBprimeFS(Bprime,&xyz_list[0][0],gauss);
    37483756
    3749                 this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
     3757                this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
    37503758                material->GetViscosity2dvertical(&viscosity,&epsilon[0]);
    37513759
     
    38973905                GetBprimeSSA(&Bprime[0], &xyz_list[0][0], gauss);
    38983906
    3899                 this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
    3900                 this->GetStrainRate2d(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
     3907                this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
     3908                this->StrainRateSSA(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
    39013909                material->GetViscosity2d(&viscosity, &epsilon[0]);
    39023910                material->GetViscosity2d(&oldviscosity, &oldepsilon[0]);
     
    44864494
    44874495                thickness_input->GetInputValue(&thickness, gauss);
    4488                 this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
     4496                this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
    44894497                material->GetViscosity2dDerivativeEpsSquare(&mu_prime,&epsilon[0]);
    44904498                eps1[0]=2*epsilon[0]+epsilon[1];   eps2[0]=epsilon[2];
     
    48694877                adjointy_input->GetInputDerivativeValue(&dadjy[0],&xyz_list[0][0],gauss);
    48704878
    4871                 this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
     4879                this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
    48724880                material->GetViscosityComplement(&viscosity_complement,&epsilon[0]);
    48734881
     
    49254933                adjointy_input->GetInputDerivativeValue(&dadjy[0],&xyz_list[0][0],gauss);
    49264934
    4927                 this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
     4935                this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
    49284936                material->GetViscosityDComplement(&viscosity_complement,&epsilon[0]);
    49294937
     
    62036211
    62046212                thickness_input->GetInputValue(&thickness, gauss);
    6205                 this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
     6213                this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
    62066214                material->GetViscosity2dDerivativeEpsSquare(&mu_prime,&epsilon[0]);
    62076215                eps1[0]=2*epsilon[0]+epsilon[1];   eps2[0]=epsilon[2];
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r16873 r16876  
    8383                void        ElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz){_error_("not implemented yet");};
    8484                void        EnthalpyToThermal(IssmDouble* ptemperature,IssmDouble* pwaterfraction,IssmDouble enthalpy,IssmDouble pressure){_error_("not implemented yet");};
     85                void        FindParam(bool* pvalue,int paramenum);
    8586                void        FindParam(int* pvalue,int paramenum);
    8687                void        FindParam(IssmDouble* pvalue,int paramenum);
     
    285286                void           GetInputValue(IssmDouble* pvalue,Gauss* gauss,int enum_type);
    286287                void           GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype);
    287                 void           GetStrainRate2d(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss, Input* vx_input, Input* vy_input);
    288288                void             InputChangeName(int enum_type,int enum_type_old);
    289289                void             InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type);
     
    330330                void           ViscosityHO(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not implemented yet");};
    331331                void           ViscositySSA(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
     332                void           ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon);
     333                void           StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
    332334
    333335                #ifdef _HAVE_STRESSBALANCE_
Note: See TracChangeset for help on using the changeset viewer.