Changeset 1185


Ignore:
Timestamp:
06/30/09 13:49:49 (16 years ago)
Author:
Mathieu Morlighem
Message:

moved u_g to inputs in control methods

Location:
issm/trunk/src
Files:
27 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/DataSet/DataSet.cpp

    r1184 r1185  
    12431243
    12441244
    1245 void  DataSet::Du(Vec du_g,double*  u_g,void* inputs,int analysis_type,int sub_analysis_type){
     1245void  DataSet::Du(Vec du_g,void* inputs,int analysis_type,int sub_analysis_type){
    12461246
    12471247
     
    12541254
    12551255                        element=(Element*)(*object);
    1256                         element->Du(du_g,u_g,inputs,analysis_type,sub_analysis_type);
    1257                 }
    1258         }
    1259 
    1260 
    1261 }
    1262 
    1263 void  DataSet::Gradj(Vec grad_g,double*  u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){
     1256                        element->Du(du_g,inputs,analysis_type,sub_analysis_type);
     1257                }
     1258        }
     1259
     1260
     1261}
     1262
     1263void  DataSet::Gradj(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){
    12641264
    12651265
     
    12721272
    12731273                        element=(Element*)(*object);
    1274                         element->Gradj(grad_g,u_g,lambda_g,inputs,analysis_type,sub_analysis_type,control_type);
     1274                        element->Gradj(grad_g,lambda_g,inputs,analysis_type,sub_analysis_type,control_type);
    12751275                }
    12761276        }
     
    12791279}               
    12801280               
    1281 void  DataSet::Misfit(double* pJ, double* u_g,void* inputs,int analysis_type,int sub_analysis_type){
     1281void  DataSet::Misfit(double* pJ,void* inputs,int analysis_type,int sub_analysis_type){
    12821282
    12831283        double J=0;;
     
    12911291
    12921292                        element=(Element*)(*object);
    1293                         J+=element->Misfit(u_g,inputs,analysis_type,sub_analysis_type);
     1293                        J+=element->Misfit(inputs,analysis_type,sub_analysis_type);
    12941294
    12951295                }
  • issm/trunk/src/c/DataSet/DataSet.h

    r1184 r1185  
    7373                void  MeltingConstraints(int* pnum_unstable_constraints,void* inputs,int analysis_type,int sub_analysis_type);
    7474                DataSet* Copy(void);
    75                 void  Du(Vec du_g,double*  u_g,void* inputs,int analysis_type,int sub_analysis_type);
    76                 void  Gradj(Vec grad_g,double*  u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);
    77                 void  Misfit(double* pJ, double* u_g,void* inputs,int analysis_type,int sub_analysis_type);
     75                void  Du(Vec du_g,void* inputs,int analysis_type,int sub_analysis_type);
     76                void  Gradj(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);
     77                void  Misfit(double* pJ, void* inputs,int analysis_type,int sub_analysis_type);
    7878                void  FieldDepthAverageAtBase(Vec field,double* field_serial,char* fieldname);
    7979                int   DeleteObject(Object* object);
  • issm/trunk/src/c/Dux/Dux.cpp

    r1184 r1185  
    1414
    1515void Dux( Vec* pdu_g, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials,
    16                 double* u_g,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
     16                        ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
    1717
    1818        int i;
     
    3333
    3434        /*Compute velocity difference: */
    35         elements->Du(du_g, u_g,inputs,analysis_type,sub_analysis_type);
     35        elements->Du(du_g,inputs,analysis_type,sub_analysis_type);
    3636
    3737        /*Assemble vector: */
  • issm/trunk/src/c/Dux/Dux.h

    r1184 r1185  
    1010/* local prototypes: */
    1111void Dux( Vec* pdu_g, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials,
    12                 double* u_g,ParameterInputs* inputs,int analysis_type,int sub_analysis_type);
     12                        ParameterInputs* inputs,int analysis_type,int sub_analysis_type);
    1313
    1414#endif  /* _DUX_H */
  • issm/trunk/src/c/Gradjx/Gradjx.cpp

    r1046 r1185  
    1414
    1515void Gradjx( Vec* pgrad_g, int numberofnodes, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials,
    16                 double* u_g, double* lambda_g, ParameterInputs* inputs,int analysis_type,int sub_analysis_type,char* control_type){
     16                double* lambda_g, ParameterInputs* inputs,int analysis_type,int sub_analysis_type,char* control_type){
    1717
    1818        /*output: */
     
    2626
    2727        /*Compute gradients: */
    28         elements->Gradj(grad_g, u_g,lambda_g,inputs,analysis_type,sub_analysis_type,control_type);
     28        elements->Gradj(grad_g,lambda_g,inputs,analysis_type,sub_analysis_type,control_type);
    2929
    3030        /*Assemble vector: */
  • issm/trunk/src/c/Gradjx/Gradjx.h

    r1046 r1185  
    1010/* local prototypes: */
    1111void Gradjx( Vec* pgrad_g, int numberofnodes, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials,
    12                 double* u_g, double* lambda_g, ParameterInputs* inputs,int analysis_type,int sub_analysis_type,char* control_type);
     12                        double* lambda_g, ParameterInputs* inputs,int analysis_type,int sub_analysis_type,char* control_type);
    1313
    1414#endif  /* _GRADJX_H */
  • issm/trunk/src/c/Misfitx/Misfitx.cpp

    r1184 r1185  
    1414
    1515void Misfitx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials,
    16                 double* u_g, ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
     16                        ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
    1717       
    1818        /*output: */
     
    2424
    2525        /*Compute gradients: */
    26         elements->Misfit(&J, u_g,inputs,analysis_type,sub_analysis_type);
     26        elements->Misfit(&J,inputs,analysis_type,sub_analysis_type);
    2727
    2828        /*Sum all J from all cpus of the cluster:*/
  • issm/trunk/src/c/Misfitx/Misfitx.h

    r1184 r1185  
    1010/* local prototypes: */
    1111void Misfitx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials,
    12                         double* u_g, ParameterInputs* inputs,int analysis_type,int sub_analysis_type);
     12                        ParameterInputs* inputs,int analysis_type,int sub_analysis_type);
    1313
    1414#endif  /* _MISFITX_H */
  • issm/trunk/src/c/objects/Beam.cpp

    r1184 r1185  
    566566#undef __FUNCT__
    567567#define __FUNCT__ "Beam::Du"
    568 void  Beam::Du(_p_Vec*, double*, void*, int,int){
     568void  Beam::Du(_p_Vec*,void*,int,int){
    569569        throw ErrorException(__FUNCT__," not supported yet!");
    570570}
    571571#undef __FUNCT__
    572572#define __FUNCT__ "Beam::Gradj"
    573 void  Beam::Gradj(_p_Vec*, double*, double*, void*, int, int,char*){
     573void  Beam::Gradj(_p_Vec*, double*, void*, int, int,char*){
    574574        throw ErrorException(__FUNCT__," not supported yet!");
    575575}
    576576#undef __FUNCT__
    577577#define __FUNCT__ "Beam::GradjDrag"
    578 void  Beam::GradjDrag(_p_Vec*, double*, double*, void*, int,int ){
     578void  Beam::GradjDrag(_p_Vec*, double*, void*, int,int ){
    579579        throw ErrorException(__FUNCT__," not supported yet!");
    580580}
    581581#undef __FUNCT__
    582582#define __FUNCT__ "Beam::GradjB"
    583 void  Beam::GradjB(_p_Vec*, double*, double*, void*, int, int){
     583void  Beam::GradjB(_p_Vec*, double*, void*, int, int){
    584584        throw ErrorException(__FUNCT__," not supported yet!");
    585585}
    586586#undef __FUNCT__
    587587#define __FUNCT__ "Beam::Misfit"
    588 double Beam::Misfit(double*, void*, int,int ){
     588double Beam::Misfit(void*,int,int ){
    589589        throw ErrorException(__FUNCT__," not supported yet!");
    590590}
  • issm/trunk/src/c/objects/Beam.h

    r1184 r1185  
    7979                void  GetBedList(double*);
    8080                void  GetThicknessList(double* thickness_list);
    81                 void  Du(_p_Vec*, double*, void*, int,int);
    82                 void  Gradj(_p_Vec*, double*, double*, void*, int, int,char*);
    83                 void  GradjDrag(_p_Vec*, double*, double*, void*, int,int );
    84                 void  GradjB(_p_Vec*, double*, double*, void*, int,int );
    85                 double Misfit(double*, void*, int,int );
     81                void  Du(_p_Vec*,void*, int,int);
     82                void  Gradj(_p_Vec*, double*, void*, int, int,char*);
     83                void  GradjDrag(_p_Vec*, double*, void*, int,int );
     84                void  GradjB(_p_Vec*, double*, void*, int,int );
     85                double Misfit(void*,int,int );
    8686                void  GetNodalFunctions(double* l1l2, double gauss_coord);
    8787                void  GetParameterValue(double* pvalue, double* value_list,double gauss_coord);
  • issm/trunk/src/c/objects/Element.h

    r1184 r1185  
    3434                virtual void  GetThicknessList(double* thickness_list)=0;
    3535                virtual void  GetBedList(double* bed_list)=0;
    36                 virtual void  Du(Vec du_g,double* u_g,void* inputs,int analysis_type,int sub_analysis_type)=0;
    37                 virtual void  Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type)=0;
    38                 virtual void  GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type)=0;
    39                 virtual void  GradjB(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type)=0;
    40                 virtual double Misfit(double* u_g,void* inputs,int analysis_type,int sub_analysis_type)=0;
     36                virtual void  Du(Vec du_g,void* inputs,int analysis_type,int sub_analysis_type)=0;
     37                virtual void  Gradj(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type)=0;
     38                virtual void  GradjDrag(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type)=0;
     39                virtual void  GradjB(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type)=0;
     40                virtual double Misfit(void* inputs,int analysis_type,int sub_analysis_type)=0;
    4141                virtual void  ComputePressure(Vec p_g)=0;
    4242
  • issm/trunk/src/c/objects/Penta.cpp

    r1184 r1185  
    11761176#undef __FUNCT__
    11771177#define __FUNCT__ "Penta::Du"
    1178 void  Penta::Du(Vec du_g,double* u_g,void* inputs,int analysis_type,int sub_analysis_type){
     1178void  Penta::Du(Vec du_g,void* inputs,int analysis_type,int sub_analysis_type){
    11791179
    11801180        int i;
     
    11921192                 * and compute Du*/
    11931193                tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria (lower face).
    1194                 tria->Du(du_g,u_g,inputs,analysis_type,sub_analysis_type);
     1194                tria->Du(du_g,inputs,analysis_type,sub_analysis_type);
    11951195                delete tria;
    11961196                return;
     
    11991199               
    12001200                tria=(Tria*)SpawnTria(3,4,5); //grids 3, 4 and 5 make the new tria (upper face).
    1201                 tria->Du(du_g,u_g,inputs,analysis_type,sub_analysis_type);
     1201                tria->Du(du_g,inputs,analysis_type,sub_analysis_type);
    12021202                delete tria;
    12031203                return;
     
    12071207#undef __FUNCT__
    12081208#define __FUNCT__ "Penta::Gradj"
    1209 void  Penta::Gradj(Vec grad_g,double* velocity,double* adjoint,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){
     1209void  Penta::Gradj(Vec grad_g,double* adjoint,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){
    12101210
    12111211        if (strcmp(control_type,"drag")==0){
    1212                 GradjDrag( grad_g,velocity,adjoint,inputs,analysis_type,sub_analysis_type);
     1212                GradjDrag( grad_g,adjoint,inputs,analysis_type,sub_analysis_type);
    12131213        }
    12141214        else if (strcmp(control_type,"B")==0){
    1215                 GradjB( grad_g, velocity, adjoint, inputs,analysis_type,sub_analysis_type);
     1215                GradjB( grad_g,adjoint, inputs,analysis_type,sub_analysis_type);
    12161216        }
    12171217        else throw ErrorException(__FUNCT__,exprintf("%s%s","control type not supported yet: ",control_type));
     
    12201220#undef __FUNCT__
    12211221#define __FUNCT__ "Penta::GradjDrag"
    1222 void  Penta::GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type){
     1222void  Penta::GradjDrag(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type){
    12231223       
    12241224       
     
    12321232               
    12331233                tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria.
    1234                 tria->GradjDrag( grad_g,u_g,lambda_g,inputs,analysis_type,sub_analysis_type);
     1234                tria->GradjDrag( grad_g,lambda_g,inputs,analysis_type,sub_analysis_type);
    12351235                delete tria;
    12361236                return;
     
    12401240#undef __FUNCT__
    12411241#define __FUNCT__ "Penta::GradjB"
    1242 void  Penta::GradjB(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type){
     1242void  Penta::GradjB(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type){
    12431243        throw ErrorException(__FUNCT__," not supported yet!");
    12441244}
     
    12461246#undef __FUNCT__
    12471247#define __FUNCT__ "Penta::Misfit"
    1248 double Penta::Misfit(double* velocity,void* inputs,int analysis_type,int sub_analysis_type){
     1248double Penta::Misfit(void* inputs,int analysis_type,int sub_analysis_type){
    12491249       
    12501250        double J;
     
    12621262                 * and compute Misfit*/
    12631263                tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria (lower face).
    1264                 J=tria->Misfit( velocity,inputs,analysis_type,sub_analysis_type);
     1264                J=tria->Misfit(inputs,analysis_type,sub_analysis_type);
    12651265                delete tria;
    12661266                return J;
     
    12691269
    12701270                tria=(Tria*)SpawnTria(3,4,5); //grids 3, 4 and 5 make the new tria (upper face).
    1271                 J=tria->Misfit( velocity,inputs,analysis_type,sub_analysis_type);
     1271                J=tria->Misfit(inputs,analysis_type,sub_analysis_type);
    12721272                delete tria;
    12731273                return J;
  • issm/trunk/src/c/objects/Penta.h

    r1184 r1185  
    8686                void  GetNodes(void** nodes);
    8787                int   GetOnBed();
    88                 void  Du(Vec du_g,double* u_g,void* inputs,int analysis_type,int sub_analysis_type);
    89                 void  Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);
    90                 void  GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type);
    91                 void  GradjB(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type);
    92                 double Misfit(double* u_g,void* inputs,int analysis_type,int sub_analysis_type);
     88                void  Du(Vec du_g,void* inputs,int analysis_type,int sub_analysis_type);
     89                void  Gradj(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);
     90                void  GradjDrag(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type);
     91                void  GradjB(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type);
     92                double Misfit(void* inputs,int analysis_type,int sub_analysis_type);
    9393               
    9494                void          GetThicknessList(double* thickness_list);
  • issm/trunk/src/c/objects/Sing.cpp

    r1184 r1185  
    450450#undef __FUNCT__
    451451#define __FUNCT__ "Sing::Du"
    452 void  Sing::Du(_p_Vec*, double*, void*, int,int){
     452void  Sing::Du(_p_Vec*,void*,int,int){
    453453        throw ErrorException(__FUNCT__," not supported yet!");
    454454}
    455455#undef __FUNCT__
    456456#define __FUNCT__ "Sing::Gradj"
    457 void  Sing::Gradj(_p_Vec*, double*, double*, void*, int, int ,char*){
     457void  Sing::Gradj(_p_Vec*, double*, void*, int, int ,char*){
    458458        throw ErrorException(__FUNCT__," not supported yet!");
    459459}
    460460#undef __FUNCT__
    461461#define __FUNCT__ "Sing::GradjDrag"
    462 void  Sing::GradjDrag(_p_Vec*, double*, double*, void*, int,int){
     462void  Sing::GradjDrag(_p_Vec*, double*, void*, int,int){
    463463        throw ErrorException(__FUNCT__," not supported yet!");
    464464}
    465465#undef __FUNCT__
    466466#define __FUNCT__ "Sing::GradjB"
    467 void  Sing::GradjB(_p_Vec*, double*, double*, void*, int,int){
     467void  Sing::GradjB(_p_Vec*, double*, void*, int,int){
    468468        throw ErrorException(__FUNCT__," not supported yet!");
    469469}
    470470#undef __FUNCT__
    471471#define __FUNCT__ "Sing::Misfit"
    472 double Sing::Misfit(double*, void*, int,int){
     472double Sing::Misfit(void*, int,int){
    473473        throw ErrorException(__FUNCT__," not supported yet!");
    474474}
  • issm/trunk/src/c/objects/Sing.h

    r1184 r1185  
    7474                void  GetBedList(double*);
    7575                void  GetThicknessList(double* thickness_list);
    76                 void  Du(_p_Vec*, double*, void*, int,int);
    77                 void  Gradj(_p_Vec*, double*, double*, void*, int, int,char*);
    78                 void  GradjDrag(_p_Vec*, double*, double*, void*, int,int);
    79                 void  GradjB(_p_Vec*, double*, double*, void*, int,int);
    80                 double Misfit(double*, void*, int,int);
     76                void  Du(_p_Vec*,void*,int,int);
     77                void  Gradj(_p_Vec*, double*, void*, int, int,char*);
     78                void  GradjDrag(_p_Vec*, double*, void*, int,int);
     79                void  GradjB(_p_Vec*, double*, void*, int,int);
     80                double Misfit(void*,int,int);
    8181
    8282
  • issm/trunk/src/c/objects/Tria.cpp

    r1184 r1185  
    20072007#undef __FUNCT__
    20082008#define __FUNCT__ "Tria::Du"
    2009 void Tria::Du(Vec du_g,double* velocity,void* vinputs,int analysis_type,int sub_analysis_type){
     2009void Tria::Du(Vec du_g,void* vinputs,int analysis_type,int sub_analysis_type){
    20102010
    20112011        int i;
     
    20802080                throw ErrorException(__FUNCT__,"missing velocity_obs input parameter");
    20812081        }
     2082        if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){
     2083                throw ErrorException(__FUNCT__,"missing velocity input parameter");
     2084        }
    20822085
    20832086        for(i=0;i<numgrids;i++){
    20842087                obs_vx_list[i]=obs_vxvy_list[i][0];
    20852088                obs_vy_list[i]=obs_vxvy_list[i][1];
    2086         }
    2087 
    2088         /*Initialize velocities: */
    2089         for(i=0;i<numgrids;i++){
    2090                 vx_list[i]=velocity[doflist[i*numberofdofspernode+0]];
    2091                 vy_list[i]=velocity[doflist[i*numberofdofspernode+1]];
    2092                 //obs_vx_list[i]=obs_velocity[doflist[i*numberofdofspernode+0]];
    2093                 //obs_vy_list[i]=obs_velocity[doflist[i*numberofdofspernode+1]];
     2089                vx_list[i]=vxvy_list[i][0];
     2090                vy_list[i]=vxvy_list[i][1];
    20942091        }
    20952092
     
    22202217#undef __FUNCT__
    22212218#define __FUNCT__ "Tria::Gradj"
    2222 void  Tria::Gradj(Vec grad_g,double* velocity,double* adjoint,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){
     2219void  Tria::Gradj(Vec grad_g,double* adjoint,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){
    22232220
    22242221        if (strcmp(control_type,"drag")==0){
    2225                 GradjDrag( grad_g,velocity,adjoint,inputs,analysis_type,sub_analysis_type);
     2222                GradjDrag( grad_g,adjoint,inputs,analysis_type,sub_analysis_type);
    22262223        }
    22272224        else if (strcmp(control_type,"B")==0){
    2228                 GradjB( grad_g, velocity, adjoint, inputs,analysis_type,sub_analysis_type);
     2225                GradjB( grad_g,adjoint,inputs,analysis_type,sub_analysis_type);
    22292226        }
    22302227        else throw ErrorException(__FUNCT__,exprintf("%s%s","control type not supported yet: ",control_type));
     
    22332230#undef __FUNCT__
    22342231#define __FUNCT__ "Tria::GradjDrag"
    2235 void  Tria::GradjDrag(Vec grad_g,double* velocity,double* adjoint,void* vinputs,int analysis_type,int sub_analysis_type){
     2232void  Tria::GradjDrag(Vec grad_g,double* adjoint,void* vinputs,int analysis_type,int sub_analysis_type){
    22362233
    22372234
     
    22532250        double adjx_list[numgrids];
    22542251        double adjy_list[numgrids];
     2252        double adjxadjy_list[numgrids][2];
    22552253
    22562254        double drag;
    2257         int    dofs[1]={0};
     2255        int    dofs1[1]={0};
     2256        int    dofs2[2]={0,1};
    22582257
    22592258        /* gaussian points: */
     
    22812280        double alpha_complement;
    22822281
    2283 
    22842282        /*element vector at the gaussian points: */
    22852283        double  grade_g[numgrids];
     
    23092307
    23102308        /* recover input parameters: */
    2311         inputs->Recover("drag",&k[0],1,dofs,numgrids,(void**)nodes);
    2312         inputs->Recover("bed",&b[0],1,dofs,numgrids,(void**)nodes);
    2313         inputs->Recover("thickness",&h[0],1,dofs,numgrids,(void**)nodes);
     2309        inputs->Recover("drag",&k[0],1,dofs1,numgrids,(void**)nodes);
     2310        inputs->Recover("bed",&b[0],1,dofs1,numgrids,(void**)nodes);
     2311        inputs->Recover("thickness",&h[0],1,dofs1,numgrids,(void**)nodes);
     2312        if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){
     2313                throw ErrorException(__FUNCT__,"missing velocity input parameter");
     2314        }
     2315
     2316        for(i=0;i<numgrids;i++){
     2317                vx_list[i]=vxvy_list[i][0];
     2318                vy_list[i]=vxvy_list[i][1];
     2319        }
    23142320
    23152321        /*Initialize parameter lists: */
    23162322        for(i=0;i<numgrids;i++){
    2317                 vx_list[i]=velocity[doflist[i*numberofdofspernode+0]];
    2318                 vy_list[i]=velocity[doflist[i*numberofdofspernode+1]];
    2319                 vxvy_list[i][0]=vx_list[i];
    2320                 vxvy_list[i][1]=vy_list[i];
     2323                //vx_list[i]=velocity[doflist[i*numberofdofspernode+0]];
     2324                //vy_list[i]=velocity[doflist[i*numberofdofspernode+1]];
     2325                //vxvy_list[i][0]=vx_list[i];
     2326                //vxvy_list[i][1]=vy_list[i];
    23212327                adjx_list[i]=adjoint[doflist[i*numberofdofspernode+0]];
    23222328                adjy_list[i]=adjoint[doflist[i*numberofdofspernode+1]];
     
    24292435#undef __FUNCT__
    24302436#define __FUNCT__ "Tria::GradjB"
    2431 void  Tria::GradjB(Vec grad_g,double* velocity,double* adjoint,void* vinputs,int analysis_type,int sub_analysis_type){
     2437void  Tria::GradjB(Vec grad_g,double* adjoint,void* vinputs,int analysis_type,int sub_analysis_type){
    24322438
    24332439        int i;
     
    24492455        double adjx_list[numgrids];
    24502456        double adjy_list[numgrids];
     2457        double adjxadjy_list[numgrids][2];
     2458
     2459        int    dofs1[1]={0};
     2460        int    dofs2[2]={0,1};
    24512461
    24522462        /* gaussian points: */
     
    24712481        /* strain rate: */
    24722482        double epsilon[3]; /* epsilon=[exx,eyy,exy];*/
    2473 
    24742483
    24752484        /* parameters: */
     
    24992508        /* recover input parameters: */
    25002509        inputs->Recover("thickness",&h[0],1,dofs,numgrids,(void**)nodes);
     2510        if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){
     2511                throw ErrorException(__FUNCT__,"missing velocity input parameter");
     2512        }
     2513
     2514        for(i=0;i<numgrids;i++){
     2515                vx_list[i]=vxvy_list[i][0];
     2516                vy_list[i]=vxvy_list[i][1];
     2517        }
    25012518
    25022519        /*Initialize parameter lists: */
    25032520        for(i=0;i<numgrids;i++){
    2504                 vx_list[i]=velocity[doflist[i*numberofdofspernode+0]];
    2505                 vy_list[i]=velocity[doflist[i*numberofdofspernode+1]];
    2506                 vxvy_list[i][0]=vx_list[i];
    2507                 vxvy_list[i][1]=vy_list[i];
     2521                //vx_list[i]=velocity[doflist[i*numberofdofspernode+0]];
     2522                //vy_list[i]=velocity[doflist[i*numberofdofspernode+1]];
     2523                //vxvy_list[i][0]=vx_list[i];
     2524                //vxvy_list[i][1]=vy_list[i];
    25082525                adjx_list[i]=adjoint[doflist[i*numberofdofspernode+0]];
    25092526                adjy_list[i]=adjoint[doflist[i*numberofdofspernode+1]];
     
    25722589#undef __FUNCT__
    25732590#define __FUNCT__ "Tria::Misfit"
    2574 double Tria::Misfit(double* velocity,void* vinputs,int analysis_type,int sub_analysis_type){
     2591double Tria::Misfit(void* vinputs,int analysis_type,int sub_analysis_type){
    25752592
    25762593        int i;
     
    26342651                throw ErrorException(__FUNCT__,"missing velocity_obs input parameter");
    26352652        }
    2636 
     2653        if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){
     2654                throw ErrorException(__FUNCT__,"missing velocity input parameter");
     2655        }
     2656
     2657        /*Initialize velocities: */
    26372658        for(i=0;i<numgrids;i++){
    26382659                obs_vx_list[i]=obs_vxvy_list[i][0];
    26392660                obs_vy_list[i]=obs_vxvy_list[i][1];
    2640         }
    2641 
    2642         /*Initialize velocities: */
    2643         for(i=0;i<numgrids;i++){
    2644                 vx_list[i]=velocity[doflist[i*numberofdofspernode+0]];
    2645                 vy_list[i]=velocity[doflist[i*numberofdofspernode+1]];
    2646         }
    2647        
     2661                vx_list[i]=vxvy_list[i][0];
     2662                vy_list[i]=vxvy_list[i][1];
     2663        }
     2664
    26482665        /*Compute Misfit at the 3 nodes (integration of the linearized function)*/
    26492666        if(fit==0){
  • issm/trunk/src/c/objects/Tria.h

    r1184 r1185  
    9393                void  GetJacobianInvert(double*  Jinv, double* xyz_list,double* gauss_l1l2l3);
    9494                void  GetJacobian(double* J, double* xyz_list,double* gauss_l1l2l3);
    95                 void  Du(Vec du_g,double* u_g,void* inputs,int analysis_type,int sub_analysis_type);
    96                 void  Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);
    97                 void  GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type);
    98                 void  GradjB(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type);
    99                 double Misfit(double* u_g,void* inputs,int analysis_type,int sub_analysis_type);
     95                void  Du(Vec du_g,void* inputs,int analysis_type,int sub_analysis_type);
     96                void  Gradj(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);
     97                void  GradjDrag(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type);
     98                void  GradjB(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type);
     99                double Misfit(void* inputs,int analysis_type,int sub_analysis_type);
    100100
    101101                void  CreatePVectorDiagnosticHoriz(Vec pg,void* inputs,int analysis_type,int sub_analysis_type);
  • issm/trunk/src/c/parallel/GradJCompute.cpp

    r1184 r1185  
    5252        diagnostic_core_nonlinear(&u_g,&K_ff0,&K_fs0,femmodel,inputs,analysis_type,sub_analysis_type);
    5353        VecToMPISerial(&u_g_double,u_g); VecFree(&u_g);
     54        inputs->Add("velocity",u_g_double,2,numberofnodes);
    5455
    5556        _printf_("%s\n","      buid Du, difference between observed velocity and model velocity:");
    56         Dux( &du_g, femmodel->elements,femmodel->nodes,femmodel->loads,femmodel->materials,u_g_double,inputs,analysis_type,sub_analysis_type);
     57        Dux( &du_g, femmodel->elements,femmodel->nodes,femmodel->loads,femmodel->materials,inputs,analysis_type,sub_analysis_type);
    5758
    5859        _printf_("%s\n","      reduce adjoint load from g-set to f-set:");
     
    7273
    7374        Gradjx( &grad_g, numberofnodes,femmodel->elements,femmodel->nodes, femmodel->loads, femmodel->materials,
    74                 u_g_double,lambda_g_double, inputs,analysis_type,sub_analysis_type,control_type);
     75                                lambda_g_double, inputs,analysis_type,sub_analysis_type,control_type);
    7576       
    7677        /*Free ressources:*/
  • issm/trunk/src/c/parallel/objectivefunctionC.cpp

    r1184 r1185  
    7777        diagnostic_core_nonlinear(&u_g,NULL,NULL,femmodel,inputs,analysis_type,sub_analysis_type);
    7878        VecToMPISerial(&u_g_double,u_g); VecFree(&u_g);
     79        inputs->Add("velocity",u_g_double,2,numberofnodes);
    7980
    8081        //Compute misfit for this velocity field.
    8182        inputs->Add("fit",fit[n]);
    8283        Misfitx( &J, femmodel->elements,femmodel->nodes, femmodel->loads, femmodel->materials,
    83                 u_g_double,inputs,analysis_type,sub_analysis_type);
     84                                inputs,analysis_type,sub_analysis_type);
    8485
    8586        /*Free ressources:*/
  • issm/trunk/src/m/solutions/cielo/GradJCompute.m

    r1184 r1185  
    44displaystring(m.parameters.debug,'%s','         computing velocities...');
    55[u_g K_ff0 K_fs0 ]=diagnostic_core_nonlinear(m,inputs,analysis_type,sub_analysis_type);
     6inputs=add(inputs,'velocity',u_g,'doublevec',2,m.parameters.numberofnodes);
    67
    78%Buid Du, difference between observed velocity and model velocity.
    89displaystring(m.parameters.debug,'%s','          computing Du...');
    9 [Du_g]=Du(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g,inputs,analysis_type,sub_analysis_type);
     10[Du_g]=Du(m.elements,m.nodes,m.loads,m.materials,m.parameters,inputs,analysis_type,sub_analysis_type);
    1011
    1112%Reduce adjoint load from g-set to f-set
     
    1819%Merge back to g set
    1920lambda_g= Mergesolutionfromftog( lambda_f, m.Gmn, m.ys0, m.nodesets );
     21inputs=add(inputs,'adjoint',lambda_g,'doublevec',2,m.parameters.numberofnodes);
    2022
    2123%Compute gradJ
    22 grad_g=Gradj(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g, lambda_g,inputs,analysis_type,sub_analysis_type);
     24grad_g=Gradj(m.elements,m.nodes,m.loads,m.materials,m.parameters,lambda_g,inputs,analysis_type,sub_analysis_type);
  • issm/trunk/src/m/solutions/cielo/objectivefunctionC.m

    r1184 r1185  
    1414%Run diagnostic with updated parameters.
    1515u_g=diagnostic_core_nonlinear(m,inputs,analysis_type,sub_analysis_type);
     16inputs=add(inputs,'velocity',u_g,'doublevec',2,m.parameters.numberofnodes);
    1617
    1718%Compute misfit for this velocity field.
    18 J=Misfit(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g,inputs,analysis_type,sub_analysis_type);
     19J=Misfit(m.elements,m.nodes,m.loads,m.materials,m.parameters,inputs,analysis_type,sub_analysis_type);
  • issm/trunk/src/mex/Du/Du.cpp

    r1184 r1185  
    1515        DataSet* loads=NULL;
    1616        DataSet* materials=NULL;
    17         double*  u_g=NULL;
    1817        ParameterInputs* inputs=NULL;
    1918        char*             analysis_type_string=NULL;
     
    3736        FetchData((void**)&loads,NULL,NULL,LOADS,"DataSet",NULL);
    3837        FetchData((void**)&materials,NULL,NULL,MATERIALS,"DataSet",NULL);
    39         FetchData((void**)&u_g,NULL,NULL,UG,"Vector","Vec");
    4038        FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL);
    4139        analysis_type=AnalysisTypeAsEnum(analysis_type_string);
     
    4846
    4947        /*!Call core code: */
    50         Dux(&du_g, elements,nodes,loads,materials,u_g,inputs,analysis_type,sub_analysis_type);
     48        Dux(&du_g, elements,nodes,loads,materials,inputs,analysis_type,sub_analysis_type);
    5149
    5250        /*write output : */
     
    5856        delete loads;
    5957        delete materials;
    60         xfree((void**)&u_g);
    6158        VecFree(&du_g);
    6259        delete inputs;
     
    7168{
    7269        _printf_("\n");
    73         _printf_("   usage: [du_g] = %s(lements, nodes,loads, materials, parameters, u_g,inputs);\n",__FUNCT__);
     70        _printf_("   usage: [du_g] = %s(lements, nodes,loads, materials, parameters,inputs);\n",__FUNCT__);
    7471        _printf_("\n");
    7572}
  • issm/trunk/src/mex/Du/Du.h

    r1184 r1185  
    2222#define MATERIALS (mxArray*)prhs[3]
    2323#define PARAMETERS (mxArray*)prhs[4]
    24 #define UG (mxArray*)prhs[5]
    25 #define INPUTS (mxArray*)prhs[6]
    26 #define ANALYSIS (mxArray*)prhs[7]
    27 #define SUBANALYSIS (mxArray*)prhs[8]
     24#define INPUTS (mxArray*)prhs[5]
     25#define ANALYSIS (mxArray*)prhs[6]
     26#define SUBANALYSIS (mxArray*)prhs[7]
    2827
    2928/* serial output macros: */
     
    3433#define NLHS  1
    3534#undef NRHS
    36 #define NRHS  9
     35#define NRHS  8
    3736
    3837
  • issm/trunk/src/mex/Gradj/Gradj.cpp

    r1046 r1185  
    1616        DataSet* materials=NULL;
    1717        char*    control_type=NULL;
    18         double*  u_g=NULL;
    1918        double*  lambda_g=NULL;
    2019        ParameterInputs* inputs=NULL;
     
    4241        FetchData((void**)&numberofnodes,NULL,NULL,mxGetField(PARAMETERS,0,"numberofnodes"),"Integer",NULL);
    4342        FetchData((void**)&control_type,NULL,NULL,mxGetField(PARAMETERS,0,"control_type"),"String",NULL);
    44         FetchData((void**)&u_g,NULL,NULL,UG,"Vector","Vec");
    4543        FetchData((void**)&lambda_g,NULL,NULL,LAMBDAG,"Vector","Vec");
    4644        FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL);
     
    5452
    5553        /*!Call core code: */
    56         Gradjx(&grad_g,numberofnodes,elements,nodes,loads,materials,u_g,lambda_g,inputs,analysis_type,sub_analysis_type,control_type);
     54        Gradjx(&grad_g,numberofnodes,elements,nodes,loads,materials,lambda_g,inputs,analysis_type,sub_analysis_type,control_type);
    5755
    5856        /*write output : */
     
    6462        delete loads;
    6563        delete materials;
    66         xfree((void**)&u_g);
    6764        xfree((void**)&lambda_g);
    6865        xfree((void**)&control_type);
     
    7976{
    8077        _printf_("\n");
    81         _printf_("   usage: [grad_g] = %s(elements, nodes,loads, materials, parameters, u_g, lambda_g,inputs);\n",__FUNCT__);
     78        _printf_("   usage: [grad_g] = %s(elements, nodes,loads, materials, parameters, lambda_g,inputs);\n",__FUNCT__);
    8279        _printf_("\n");
    8380}
  • issm/trunk/src/mex/Gradj/Gradj.h

    r465 r1185  
    2222#define MATERIALS (mxArray*)prhs[3]
    2323#define PARAMETERS (mxArray*)prhs[4]
    24 #define UG (mxArray*)prhs[5]
    25 #define LAMBDAG (mxArray*)prhs[6]
    26 #define INPUTS (mxArray*)prhs[7]
    27 #define ANALYSIS (mxArray*)prhs[8]
    28 #define SUBANALYSIS (mxArray*)prhs[9]
     24#define LAMBDAG (mxArray*)prhs[5]
     25#define INPUTS (mxArray*)prhs[6]
     26#define ANALYSIS (mxArray*)prhs[7]
     27#define SUBANALYSIS (mxArray*)prhs[8]
    2928
    3029/* serial output macros: */
     
    3534#define NLHS  1
    3635#undef NRHS
    37 #define NRHS  10
     36#define NRHS  9
    3837
    3938
  • issm/trunk/src/mex/Misfit/Misfit.cpp

    r1184 r1185  
    1515        DataSet* loads=NULL;
    1616        DataSet* materials=NULL;
    17         double*  u_g=NULL;
    1817        ParameterInputs* inputs=NULL;
    1918        char*             analysis_type_string=NULL;
     
    3635        FetchData((void**)&loads,NULL,NULL,LOADS,"DataSet",NULL);
    3736        FetchData((void**)&materials,NULL,NULL,MATERIALS,"DataSet",NULL);
    38         FetchData((void**)&u_g,NULL,NULL,UG,"Vector","Vec");
    3937        FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL);
    4038        analysis_type=AnalysisTypeAsEnum(analysis_type_string);
     
    4745
    4846        /*!Call core code: */
    49         Misfitx(&J, elements,nodes,loads,materials,u_g,inputs,analysis_type,sub_analysis_type);
     47        Misfitx(&J, elements,nodes,loads,materials,inputs,analysis_type,sub_analysis_type);
    5048
    5149        /*write output : */
     
    5755        delete loads;
    5856        delete materials;
    59         xfree((void**)&u_g);
    6057        delete inputs;
    6158        xfree((void**)&analysis_type_string);
     
    6966{
    7067        _printf_("\n");
    71         _printf_("   usage: [J] = %s(elements, nodes,loads, materials, parameters, u_g,inputs);\n",__FUNCT__);
     68        _printf_("   usage: [J] = %s(elements, nodes,loads, materials, parameters, inputs);\n",__FUNCT__);
    7269        _printf_("\n");
    7370}
  • issm/trunk/src/mex/Misfit/Misfit.h

    r1184 r1185  
    2222#define MATERIALS (mxArray*)prhs[3]
    2323#define PARAMETERS (mxArray*)prhs[4]
    24 #define UG (mxArray*)prhs[5]
    25 #define INPUTS (mxArray*)prhs[6]
    26 #define ANALYSIS (mxArray*)prhs[7]
    27 #define SUBANALYSIS (mxArray*)prhs[8]
     24#define INPUTS (mxArray*)prhs[5]
     25#define ANALYSIS (mxArray*)prhs[6]
     26#define SUBANALYSIS (mxArray*)prhs[7]
    2827
    2928/* serial output macros: */
     
    3433#define NLHS  1
    3534#undef NRHS
    36 #define NRHS  9
     35#define NRHS  8
    3736
    3837
Note: See TracChangeset for help on using the changeset viewer.