source: issm/oecreview/Archive/18296-19100/ISSM-18568-18569.diff

Last change on this file was 19102, checked in by Mathieu Morlighem, 10 years ago

NEW: added 18296-19100

File size: 2.7 KB
  • ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp

     
    136136
    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        }
    142143
     
    191192        xDelete<int>(vertexpidlist);
    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);
    196221}/*}}}*/
  • ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h

     
    2828                void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
    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);
    3334};
Note: See TracBrowser for help on using the repository browser.