Changeset 4478


Ignore:
Timestamp:
07/08/10 15:34:15 (15 years ago)
Author:
Mathieu Morlighem
Message:

Added UpdateFromSolutionAdjointStokes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/objects/Elements/Penta.cpp

    r4475 r4478  
    374374                InputUpdateFromSolutionAdjointHoriz( solution);
    375375        }
     376        else if (analysis_type==AdjointStokesAnalysisEnum){
     377                InputUpdateFromSolutionAdjointStokes( solution);
     378        }
    376379        else if (analysis_type==BedSlopeXAnalysisEnum){
    377380                InputUpdateFromBedSlopeX( solution);
     
    979982        bool onbed;
    980983        bool shelf;
    981         int analysis_type,sub_analysis_type;
     984        int analysis_type;
    982985
    983986        /*retrieve parameters: */
    984987        parameters->FindParam(&analysis_type,AnalysisTypeEnum);
    985         parameters->FindParam(&sub_analysis_type,AnalysisTypeEnum);
    986988
    987989        /*retrieve inputs :*/
     
    9991001        if (!onbed) return;
    10001002
    1001         if (sub_analysis_type==HorizAnalysisEnum){
     1003        if (analysis_type==AdjointHorizAnalysisEnum){
    10021004
    10031005                /*MacAyeal or Pattyn*/
     
    10061008                delete tria;
    10071009        }
    1008         else if (sub_analysis_type==StokesAnalysisEnum){
     1010        else if (analysis_type==AdjointStokesAnalysisEnum){
    10091011
    10101012                /*Stokes*/
     
    10131015                delete tria;
    10141016        }
    1015         else ISSMERROR("%s%i%s\n","sub_analysis: ",sub_analysis_type," not supported yet");
     1017        else ISSMERROR("analysis %s not supported yet",EnumAsString(analysis_type));
    10161018
    10171019
     
    24412443        /*Add surfaceslopey as inputs to the tria element: */
    24422444        this->inputs->AddInput(new PentaVertexInput(SurfaceSlopeYEnum,values));
     2445}
     2446/*}}}*/
     2447/*FUNCTION Penta::InputUpdateFromSolutionAdjointStokes {{{1*/
     2448void  Penta::InputUpdateFromSolutionAdjointStokes(double* solution){
     2449
     2450        int i;
     2451
     2452        const int    numvertices=6;
     2453        const int    numdofpervertex=4;
     2454        const int    numdof=numdofpervertex*numvertices;
     2455
     2456        int          doflist[numdof];
     2457        double       values[numdof];
     2458        double       lambdax[numvertices];
     2459        double       lambday[numvertices];
     2460        double       lambdaz[numvertices];
     2461        double       lambdap[numvertices];
     2462
     2463        int          dummy;
     2464
     2465        /*Get dof list: */
     2466        GetDofList(&doflist[0],&dummy);
     2467
     2468        /*Use the dof list to index into the solution vector: */
     2469        for(i=0;i<numdof;i++){
     2470                values[i]=solution[doflist[i]];
     2471        }
     2472
     2473        /*Ok, we have vx and vy in values, fill in vx and vy arrays: */
     2474        for(i=0;i<numvertices;i++){
     2475                lambdax[i]=values[i*numdofpervertex+0];
     2476                lambday[i]=values[i*numdofpervertex+1];
     2477                lambdaz[i]=values[i*numdofpervertex+2];
     2478                lambdap[i]=values[i*numdofpervertex+3];
     2479        }
     2480
     2481        /*Add vx and vy as inputs to the tria element: */
     2482        this->inputs->AddInput(new PentaVertexInput(AdjointxEnum,lambdax));
     2483        this->inputs->AddInput(new PentaVertexInput(AdjointyEnum,lambday));
     2484        this->inputs->AddInput(new PentaVertexInput(AdjointzEnum,lambdaz));
     2485        this->inputs->AddInput(new PentaVertexInput(AdjointpEnum,lambdap));
     2486
    24432487}
    24442488/*}}}*/
Note: See TracChangeset for help on using the changeset viewer.