Changeset 4382


Ignore:
Timestamp:
07/01/10 10:00:07 (15 years ago)
Author:
Mathieu Morlighem
Message:

Added control_parameter field to iomodel for CM

Location:
issm/trunk/src/c
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsControl.cpp

    r4365 r4382  
    2929        IoModelFetchData(&iomodel->vy_obs,NULL,NULL,iomodel_handle,"vy_obs");
    3030        IoModelFetchData(&iomodel->weights,NULL,NULL,iomodel_handle,"weights");
    31         IoModelFetchData(&control_parameter,NULL,NULL,iomodel_handle,iomodel->control_type);
     31        IoModelFetchData(&iomodel->control_parameter,NULL,NULL,iomodel_handle,iomodel->control_type); //copy the control parameter in iomodel
    3232
    3333        /*Update elements: */
     
    4747        xfree((void**)&iomodel->vy_obs);
    4848        xfree((void**)&iomodel->weights);
    49         xfree((void**)&control_parameter);
     49        xfree((void**)&iomodel->control_parameter);
    5050}
  • issm/trunk/src/c/objects/Elements/Penta.cpp

    r4381 r4382  
    15821582}
    15831583/*}}}*/
    1584 /*FUNCTION Penta::Update(IoModel* iomodel,int analysis_counter,int analysis_type) {{{1*/
     1584/*FUNCTION Penta::Update {{{1*/
    15851585void Penta::Update(int index,IoModel* iomodel,int analysis_counter,int analysis_type){
    15861586
     
    16321632                this->inputs->AddInput(new IntInput(DragTypeEnum,iomodel->drag_type));
    16331633
     1634        }
     1635        if (iomodel->rheology_B) {
     1636                for(i=0;i<6;i++)nodeinputs[i]=iomodel->rheology_B[penta_vertex_ids[i]-1];
     1637                this->inputs->AddInput(new PentaVertexInput(RheologyBEnum,nodeinputs));
     1638        }
     1639        if (iomodel->control_parameter) {
     1640                for(i=0;i<6;i++)nodeinputs[i]=iomodel->control_parameter[penta_vertex_ids[i]-1];
     1641                this->inputs->AddInput(new PentaVertexInput(ControlParameterEnum,nodeinputs));
    16341642        }
    16351643        if (iomodel->melting_rate) {
  • issm/trunk/src/c/objects/Elements/Tria.cpp

    r4375 r4382  
    992992        if (analysis_type==DiagnosticHorizAnalysisEnum)
    993993                GetSolutionFromInputsDiagnosticHoriz(solution);
     994        else if (analysis_type==AdjointAnalysisEnum)
     995         GetSolutionFromInputsAdjoint(solution);
    994996        else
    995          ISSMERROR("%s%i%s\n","analysis: ",analysis_type," not supported yet");
     997         ISSMERROR("analysis: %s not supported yet",EnumAsString(analysis_type));
    996998
    997999}
     
    22372239                this->inputs->AddInput(new TriaVertexInput(RheologyBEnum,nodeinputs));
    22382240        }
     2241        if (iomodel->control_parameter) {
     2242                for(i=0;i<3;i++)nodeinputs[i]=iomodel->control_parameter[tria_vertex_ids[i]-1];
     2243                this->inputs->AddInput(new TriaVertexInput(ControlParameterEnum,nodeinputs));
     2244        }
    22392245        if (iomodel->melting_rate) {
    22402246                for(i=0;i<3;i++)nodeinputs[i]=iomodel->melting_rate[tria_vertex_ids[i]-1]/iomodel->yts;
     
    51745180}
    51755181/*}}}*/
     5182/*FUNCTION Tria::GetSolutionFromInputsAdjoint(Vec solution){{{1*/
     5183void  Tria::GetSolutionFromInputsAdjoint(Vec solution){
     5184
     5185        int i;
     5186
     5187        const int    numvertices=3;
     5188        const int    numdofpervertex=2;
     5189        const int    numdof=numdofpervertex*numvertices;
     5190        double       gauss[numvertices][numvertices]={{1,0,0},{0,1,0},{0,0,1}};
     5191
     5192        int          doflist[numdof];
     5193        double       values[numdof];
     5194        double       lambdax;
     5195        double       lambday;
     5196
     5197        int          dummy;
     5198
     5199        /*Get dof list: */
     5200        GetDofList(&doflist[0],&dummy);
     5201
     5202        /*Ok, we have lambdax and lambday in values, fill in lambdax and lambday arrays: */
     5203        /*P1 element only for now*/
     5204        for(i=0;i<numvertices;i++){
     5205
     5206                /*Recover lambdax and lambday*/
     5207                inputs->GetParameterValue(&lambdax,&gauss[i][0],VxEnum);
     5208                inputs->GetParameterValue(&lambday,&gauss[i][0],VyEnum);
     5209                values[i*numdofpervertex+0]=lambdax;
     5210                values[i*numdofpervertex+1]=lambday;
     5211        }
     5212
     5213        /*Add value to global vector*/
     5214        VecSetValues(solution,numdof,doflist,(const double*)values,INSERT_VALUES);
     5215
     5216}
     5217/*}}}*/
    51765218/*FUNCTION Tria::GradjDragStokes {{{1*/
    51775219void  Tria::GradjDragStokes(Vec gradient){
  • issm/trunk/src/c/objects/Elements/Tria.h

    r4375 r4382  
    151151                void      GetParameterValue(double* pp, double* plist, double* gauss_l1l2l3);
    152152                void      GetSolutionFromInputsDiagnosticHoriz(Vec solution);
     153                void      GetSolutionFromInputsAdjoint(Vec solution);
    153154                void      GradjDragStokes(Vec gradient);
    154155                void      InputUpdateFromSolutionAdjoint( double* solution);
  • issm/trunk/src/c/objects/IoModel.cpp

    r4002 r4382  
    104104       
    105105        xfree((void**)&this->control_type);
     106        xfree((void**)&this->control_parameter);
    106107       
    107108        /*exterior data: */
     
    230231        this->qmu_analysis=0;
    231232        this->control_analysis=0;
     233        this->control_parameter=NULL;
    232234        this->solverstring=NULL;
    233235        this->numberofresponses=0;
  • issm/trunk/src/c/objects/IoModel.h

    r4002 r4382  
    124124                /*control methods: */
    125125                char*   control_type;
     126                double* control_parameter;
    126127
    127128                /*solution parameters: */
Note: See TracChangeset for help on using the changeset viewer.