Changeset 18569


Ignore:
Timestamp:
10/03/14 11:35:03 (10 years ago)
Author:
Mathieu Morlighem
Message:

CHG: added gradient on adot

Location:
issm/trunk-jpl/src/c/analyses
Files:
2 edited

Legend:

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

    r18567 r18569  
    137137        /*Deal with second term*/
    138138        switch(control_type){
    139                 case BalancethicknessOmegaEnum:  GradientJOmega(element,gradient,control_index); break;
     139                case BalancethicknessOmegaEnum:           GradientJOmega(element,gradient,control_index); break;
     140                case BalancethicknessThickeningRateEnum:  GradientJdHdt( element,gradient,control_index); break;
    140141                default: _error_("control type not supported yet: " << EnumToStringx(control_type));
    141142        }
     
    192193        delete gauss;
    193194}/*}}}*/
     195void AdjointBalancethickness2Analysis::GradientJdHdt(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/
     196
     197        /*Fetch number of vertices for this finite element*/
     198        int numvertices = element->GetNumberOfVertices();
     199
     200        /*Initialize some vectors*/
     201        IssmDouble* ge            = xNewZeroInit<IssmDouble>(numvertices);
     202        IssmDouble* lambda        = xNew<IssmDouble>(numvertices);
     203        int*        vertexpidlist = xNew<int>(numvertices);
     204
     205        /*Retrieve all inputs we will be needing: */
     206        element->GradientIndexing(&vertexpidlist[0],control_index);
     207        element->GetInputListOnVertices(lambda,AdjointEnum);
     208        for(int i=0;i<numvertices;i++){
     209                ge[i]= - lambda[i];
     210                _assert_(!xIsNan<IssmDouble>(ge[i]));
     211        }
     212        gradient->SetValues(numvertices,vertexpidlist,ge,INS_VAL);
     213
     214        /*Clean up and return*/
     215        xDelete<IssmDouble>(ge);
     216        xDelete<IssmDouble>(lambda);
     217        xDelete<int>(vertexpidlist);
     218}/*}}}*/
    194219void AdjointBalancethickness2Analysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
    195220        element->InputUpdateFromSolutionOneDof(solution,AdjointEnum);
  • issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h

    r18565 r18569  
    2929                void GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index);
    3030                void GradientJOmega(Element* element,Vector<IssmDouble>* gradient,int control_index);
     31                void GradientJdHdt(Element* element,Vector<IssmDouble>* gradient,int control_index);
    3132                void InputUpdateFromSolution(IssmDouble* solution,Element* element);
    3233                void UpdateConstraints(FemModel* femmodel);
Note: See TracChangeset for help on using the changeset viewer.