Changeset 1188


Ignore:
Timestamp:
06/30/09 14:39:58 (16 years ago)
Author:
Mathieu Morlighem
Message:

moved adjoint to inputs

Location:
issm/trunk/src
Files:
17 edited

Legend:

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

    r1185 r1188  
    12611261}
    12621262
    1263 void  DataSet::Gradj(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){
     1263void  DataSet::Gradj(Vec grad_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,lambda_g,inputs,analysis_type,sub_analysis_type,control_type);
     1274                        element->Gradj(grad_g,inputs,analysis_type,sub_analysis_type,control_type);
    12751275                }
    12761276        }
  • issm/trunk/src/c/DataSet/DataSet.h

    r1185 r1188  
    7474                DataSet* Copy(void);
    7575                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);
     76                void  Gradj(Vec grad_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);
    7777                void  Misfit(double* pJ, void* inputs,int analysis_type,int sub_analysis_type);
    7878                void  FieldDepthAverageAtBase(Vec field,double* field_serial,char* fieldname);
  • issm/trunk/src/c/Gradjx/Gradjx.cpp

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

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

    r1185 r1188  
    571571#undef __FUNCT__
    572572#define __FUNCT__ "Beam::Gradj"
    573 void  Beam::Gradj(_p_Vec*, double*, void*, int, int,char*){
     573void  Beam::Gradj(_p_Vec*, 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*, void*, int,int ){
     578void  Beam::GradjDrag(_p_Vec*, 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*, void*, int, int){
     583void  Beam::GradjB(_p_Vec*, void*, int, int){
    584584        throw ErrorException(__FUNCT__," not supported yet!");
    585585}
  • issm/trunk/src/c/objects/Beam.h

    r1185 r1188  
    8080                void  GetThicknessList(double* thickness_list);
    8181                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 );
     82                void  Gradj(_p_Vec*, void*, int, int,char*);
     83                void  GradjDrag(_p_Vec*, void*, int,int );
     84                void  GradjB(_p_Vec*, void*, int,int );
    8585                double Misfit(void*,int,int );
    8686                void  GetNodalFunctions(double* l1l2, double gauss_coord);
  • issm/trunk/src/c/objects/Element.h

    r1185 r1188  
    3535                virtual void  GetBedList(double* bed_list)=0;
    3636                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;
     37                virtual void  Gradj(Vec grad_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type)=0;
     38                virtual void  GradjDrag(Vec grad_g,void* inputs,int analysis_type,int sub_analysis_type)=0;
     39                virtual void  GradjB(Vec grad_g,void* inputs,int analysis_type,int sub_analysis_type)=0;
    4040                virtual double Misfit(void* inputs,int analysis_type,int sub_analysis_type)=0;
    4141                virtual void  ComputePressure(Vec p_g)=0;
  • issm/trunk/src/c/objects/Penta.cpp

    r1185 r1188  
    12071207#undef __FUNCT__
    12081208#define __FUNCT__ "Penta::Gradj"
    1209 void  Penta::Gradj(Vec grad_g,double* adjoint,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){
     1209void  Penta::Gradj(Vec grad_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){
    12101210
    12111211        if (strcmp(control_type,"drag")==0){
    1212                 GradjDrag( grad_g,adjoint,inputs,analysis_type,sub_analysis_type);
     1212                GradjDrag( grad_g,inputs,analysis_type,sub_analysis_type);
    12131213        }
    12141214        else if (strcmp(control_type,"B")==0){
    1215                 GradjB( grad_g,adjoint, inputs,analysis_type,sub_analysis_type);
     1215                GradjB( grad_g, 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* lambda_g,void* inputs,int analysis_type,int sub_analysis_type){
     1222void  Penta::GradjDrag(Vec grad_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,lambda_g,inputs,analysis_type,sub_analysis_type);
     1234                tria->GradjDrag( grad_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* lambda_g,void* inputs,int analysis_type,int sub_analysis_type){
     1242void  Penta::GradjB(Vec grad_g,void* inputs,int analysis_type,int sub_analysis_type){
    12431243        throw ErrorException(__FUNCT__," not supported yet!");
    12441244}
  • issm/trunk/src/c/objects/Penta.h

    r1185 r1188  
    8787                int   GetOnBed();
    8888                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);
     89                void  Gradj(Vec grad_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);
     90                void  GradjDrag(Vec grad_g,void* inputs,int analysis_type,int sub_analysis_type);
     91                void  GradjB(Vec grad_g,void* inputs,int analysis_type,int sub_analysis_type);
    9292                double Misfit(void* inputs,int analysis_type,int sub_analysis_type);
    9393               
  • issm/trunk/src/c/objects/Sing.cpp

    r1185 r1188  
    455455#undef __FUNCT__
    456456#define __FUNCT__ "Sing::Gradj"
    457 void  Sing::Gradj(_p_Vec*, double*, void*, int, int ,char*){
     457void  Sing::Gradj(_p_Vec*, 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*, void*, int,int){
     462void  Sing::GradjDrag(_p_Vec*, 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*, void*, int,int){
     467void  Sing::GradjB(_p_Vec*, void*, int,int){
    468468        throw ErrorException(__FUNCT__," not supported yet!");
    469469}
  • issm/trunk/src/c/objects/Sing.h

    r1185 r1188  
    7575                void  GetThicknessList(double* thickness_list);
    7676                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);
     77                void  Gradj(_p_Vec*, void*, int, int,char*);
     78                void  GradjDrag(_p_Vec*, void*, int,int);
     79                void  GradjB(_p_Vec*, void*, int,int);
    8080                double Misfit(void*,int,int);
    8181
  • issm/trunk/src/c/objects/Tria.cpp

    r1185 r1188  
    22172217#undef __FUNCT__
    22182218#define __FUNCT__ "Tria::Gradj"
    2219 void  Tria::Gradj(Vec grad_g,double* adjoint,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){
     2219void  Tria::Gradj(Vec grad_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){
    22202220
    22212221        if (strcmp(control_type,"drag")==0){
    2222                 GradjDrag( grad_g,adjoint,inputs,analysis_type,sub_analysis_type);
     2222                GradjDrag( grad_g,inputs,analysis_type,sub_analysis_type);
    22232223        }
    22242224        else if (strcmp(control_type,"B")==0){
    2225                 GradjB( grad_g,adjoint,inputs,analysis_type,sub_analysis_type);
     2225                GradjB( grad_g,inputs,analysis_type,sub_analysis_type);
    22262226        }
    22272227        else throw ErrorException(__FUNCT__,exprintf("%s%s","control type not supported yet: ",control_type));
     
    22302230#undef __FUNCT__
    22312231#define __FUNCT__ "Tria::GradjDrag"
    2232 void  Tria::GradjDrag(Vec grad_g,double* adjoint,void* vinputs,int analysis_type,int sub_analysis_type){
     2232void  Tria::GradjDrag(Vec grad_g,void* vinputs,int analysis_type,int sub_analysis_type){
    22332233
    22342234
     
    23132313                throw ErrorException(__FUNCT__,"missing velocity input parameter");
    23142314        }
    2315 
     2315        if(!inputs->Recover("adjoint",&adjxadjy_list[0][0],2,dofs2,numgrids,(void**)nodes)){
     2316                throw ErrorException(__FUNCT__,"missing adjoint input parameter");
     2317        }
     2318
     2319        /*Initialize parameter lists: */
    23162320        for(i=0;i<numgrids;i++){
    23172321                vx_list[i]=vxvy_list[i][0];
    23182322                vy_list[i]=vxvy_list[i][1];
    2319         }
    2320 
    2321         /*Initialize parameter lists: */
    2322         for(i=0;i<numgrids;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];
    2327                 adjx_list[i]=adjoint[doflist[i*numberofdofspernode+0]];
    2328                 adjy_list[i]=adjoint[doflist[i*numberofdofspernode+1]];
    2329         }
    2330        
     2323                adjx_list[i]=adjxadjy_list[i][0];
     2324                adjy_list[i]=adjxadjy_list[i][1];
     2325        }
     2326
    23312327        /* Get gaussian points and weights (make this a statically initialized list of points? fstd): */
    23322328        GaussTria( &num_gauss, &first_gauss_area_coord, &second_gauss_area_coord, &third_gauss_area_coord, &gauss_weights, 4);
     
    24352431#undef __FUNCT__
    24362432#define __FUNCT__ "Tria::GradjB"
    2437 void  Tria::GradjB(Vec grad_g,double* adjoint,void* vinputs,int analysis_type,int sub_analysis_type){
     2433void  Tria::GradjB(Vec grad_g,void* vinputs,int analysis_type,int sub_analysis_type){
    24382434
    24392435        int i;
     
    25112507                throw ErrorException(__FUNCT__,"missing velocity input parameter");
    25122508        }
    2513 
     2509        if(!inputs->Recover("adjoint",&adjxadjy_list[0][0],2,dofs2,numgrids,(void**)nodes)){
     2510                throw ErrorException(__FUNCT__,"missing adjoint input parameter");
     2511        }
     2512
     2513        /*Initialize parameter lists: */
    25142514        for(i=0;i<numgrids;i++){
    25152515                vx_list[i]=vxvy_list[i][0];
    25162516                vy_list[i]=vxvy_list[i][1];
    2517         }
    2518 
    2519         /*Initialize parameter lists: */
    2520         for(i=0;i<numgrids;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];
    2525                 adjx_list[i]=adjoint[doflist[i*numberofdofspernode+0]];
    2526                 adjy_list[i]=adjoint[doflist[i*numberofdofspernode+1]];
     2517                adjx_list[i]=adjxadjy_list[i][0];
     2518                adjy_list[i]=adjxadjy_list[i][1];
    25272519        }
    25282520       
  • issm/trunk/src/c/objects/Tria.h

    r1185 r1188  
    9494                void  GetJacobian(double* J, double* xyz_list,double* gauss_l1l2l3);
    9595                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);
     96                void  Gradj(Vec grad_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);
     97                void  GradjDrag(Vec grad_g,void* inputs,int analysis_type,int sub_analysis_type);
     98                void  GradjB(Vec grad_g,void* inputs,int analysis_type,int sub_analysis_type);
    9999                double Misfit(void* inputs,int analysis_type,int sub_analysis_type);
    100100
  • issm/trunk/src/c/parallel/GradJCompute.cpp

    r1185 r1188  
    7171        _printf_("%s\n","      compute gradJ:");
    7272        VecToMPISerial(&lambda_g_double,lambda_g);VecFree(&lambda_g);
     73        inputs->Add("adjoint",lambda_g_double,2,numberofnodes);
    7374
    7475        Gradjx( &grad_g, numberofnodes,femmodel->elements,femmodel->nodes, femmodel->loads, femmodel->materials,
    75                                 lambda_g_double, inputs,analysis_type,sub_analysis_type,control_type);
     76                                inputs,analysis_type,sub_analysis_type,control_type);
    7677       
    7778        /*Free ressources:*/
  • issm/trunk/src/m/solutions/cielo/GradJCompute.m

    r1185 r1188  
    2222
    2323%Compute gradJ
    24 grad_g=Gradj(m.elements,m.nodes,m.loads,m.materials,m.parameters,lambda_g,inputs,analysis_type,sub_analysis_type);
     24grad_g=Gradj(m.elements,m.nodes,m.loads,m.materials,m.parameters,inputs,analysis_type,sub_analysis_type);
  • issm/trunk/src/mex/Gradj/Gradj.cpp

    r1185 r1188  
    1616        DataSet* materials=NULL;
    1717        char*    control_type=NULL;
    18         double*  lambda_g=NULL;
    1918        ParameterInputs* inputs=NULL;
    2019        char*    analysis_type_string=NULL;
     
    4140        FetchData((void**)&numberofnodes,NULL,NULL,mxGetField(PARAMETERS,0,"numberofnodes"),"Integer",NULL);
    4241        FetchData((void**)&control_type,NULL,NULL,mxGetField(PARAMETERS,0,"control_type"),"String",NULL);
    43         FetchData((void**)&lambda_g,NULL,NULL,LAMBDAG,"Vector","Vec");
    4442        FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL);
    4543        analysis_type=AnalysisTypeAsEnum(analysis_type_string);
     
    5250
    5351        /*!Call core code: */
    54         Gradjx(&grad_g,numberofnodes,elements,nodes,loads,materials,lambda_g,inputs,analysis_type,sub_analysis_type,control_type);
     52        Gradjx(&grad_g,numberofnodes,elements,nodes,loads,materials,inputs,analysis_type,sub_analysis_type,control_type);
    5553
    5654        /*write output : */
     
    6260        delete loads;
    6361        delete materials;
    64         xfree((void**)&lambda_g);
    6562        xfree((void**)&control_type);
    6663        delete inputs;
     
    7673{
    7774        _printf_("\n");
    78         _printf_("   usage: [grad_g] = %s(elements, nodes,loads, materials, parameters, lambda_g,inputs);\n",__FUNCT__);
     75        _printf_("   usage: [grad_g] = %s(elements, nodes,loads, materials, parameters,inputs);\n",__FUNCT__);
    7976        _printf_("\n");
    8077}
  • issm/trunk/src/mex/Gradj/Gradj.h

    r1185 r1188  
    2222#define MATERIALS (mxArray*)prhs[3]
    2323#define PARAMETERS (mxArray*)prhs[4]
    24 #define LAMBDAG (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.