Changeset 16751


Ignore:
Timestamp:
11/13/13 20:50:52 (11 years ago)
Author:
seroussi
Message:

NEW: added InputUpdateFromSolution for AdjointHoriz

File:
1 edited

Legend:

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

    r16684 r16751  
    3030}/*}}}*/
    3131void AdjointHorizAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
    32         _error_("not implemented yet");
     32        int  i;
     33        int* doflist=NULL;
     34
     35        /*Fetch number of nodes and dof for this finite element*/
     36        int numnodes = element->GetNumberOfNodes();
     37        int numdof   = numnodes*2;
     38
     39        /*Fetch dof list and allocate solution vectors*/
     40        element->GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
     41        IssmDouble* values  = xNew<IssmDouble>(numdof);
     42        IssmDouble* lambdax = xNew<IssmDouble>(numnodes);
     43        IssmDouble* lambday = xNew<IssmDouble>(numnodes);
     44
     45        /*Use the dof list to index into the solution vector: */
     46        for(i=0;i<numdof;i++) values[i]=solution[doflist[i]];
     47
     48        /*Transform solution in Cartesian Space*/
     49        element->TransformSolutionCoord(&values[0],XYEnum);
     50
     51        /*Ok, we have vx and vy in values, fill in vx and vy arrays: */
     52        for(i=0;i<numnodes;i++){
     53                lambdax[i]=values[i*NDOF2+0];
     54                lambday[i]=values[i*NDOF2+1];
     55
     56                /*Check solution*/
     57                if(xIsNan<IssmDouble>(lambdax[i])) _error_("NaN found in solution vector");
     58                if(xIsNan<IssmDouble>(lambday[i])) _error_("NaN found in solution vector");
     59        }
     60
     61        /*Add vx and vy as inputs to the tria element: */
     62        element->AddInput(AdjointxEnum,lambdax,P1Enum);
     63        element->AddInput(AdjointyEnum,lambday,P1Enum);
     64
     65        /*Free ressources:*/
     66        xDelete<IssmDouble>(values);
     67        xDelete<IssmDouble>(lambdax);
     68        xDelete<IssmDouble>(lambday);
     69        xDelete<int>(doflist);
    3370}/*}}}*/
Note: See TracChangeset for help on using the changeset viewer.