Changeset 11318


Ignore:
Timestamp:
02/03/12 14:13:19 (13 years ago)
Author:
Mathieu Morlighem
Message:

Added support for bounds on control parameters for TAO

Location:
issm/trunk-jpl/src/c
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp

    r11317 r11318  
    99#include "../../EnumDefinitions/EnumDefinitions.h"
    1010
    11 void GetVectorFromControlInputsx(Vec* pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters){
     11void GetVectorFromControlInputsx(Vec* pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data){
    1212
    1313        int  num_controls;
     
    2525                for(int j=0;j<elements->Size();j++){
    2626                        Element* element=(Element*)elements->GetObjectByOffset(j);
    27                         element->GetVectorFromControlInputs(vector,control_type[i],i);
     27                        element->GetVectorFromControlInputs(vector,control_type[i],i,data);
    2828                }
    2929        }
     
    3737}
    3838
    39 void GetVectorFromControlInputsx( double** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters){
     39void GetVectorFromControlInputsx( double** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){
    4040       
    4141        /*output: */
     
    4545        Vec vec_vector=NULL;
    4646
    47         GetVectorFromControlInputsx( &vec_vector, elements,nodes, vertices, loads, materials, parameters);
     47        GetVectorFromControlInputsx( &vec_vector, elements,nodes, vertices, loads, materials, parameters,data);
    4848        VecToMPISerial(&vector,vec_vector);
    4949
  • issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h

    r11317 r11318  
    99
    1010/* local prototypes: */
    11 void    GetVectorFromControlInputsx( Vec* pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters);
    12 void    GetVectorFromControlInputsx( double** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters);
     11void    GetVectorFromControlInputsx( Vec* pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value");
     12void    GetVectorFromControlInputsx( double** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value");
    1313
    1414#endif  /* _GETVECTORFROMCONTROLINPUTSXX_H */
  • issm/trunk-jpl/src/c/objects/Elements/Element.h

    r11317 r11318  
    103103                virtual void   ControlInputSetGradient(double* gradient,int enum_type,int control_index)=0;
    104104                virtual void   ControlInputScaleGradient(int enum_type, double scale)=0;
    105                 virtual void   GetVectorFromControlInputs(Vec gradient,int control_enum,int control_index)=0;
     105                virtual void   GetVectorFromControlInputs(Vec gradient,int control_enum,int control_index,const char* data)=0;
    106106                virtual void   SetControlInputsFromVector(double* vector,int control_enum,int control_index)=0;
    107107                virtual void   InputControlUpdate(double scalar,bool save_parameter)=0;
  • issm/trunk-jpl/src/c/objects/Elements/Penta.cpp

    r11317 r11318  
    51325132/*}}}*/
    51335133/*FUNCTION Penta::GetVectorFromControlInputs{{{1*/
    5134 void  Penta::GetVectorFromControlInputs(Vec vector,int control_enum,int control_index){
     5134void  Penta::GetVectorFromControlInputs(Vec vector,int control_enum,int control_index,const char* data){
    51355135
    51365136        int doflist1[NUMVERTICES];
     
    51465146        if(!input) _error_("Input %s not found in element",EnumToStringx(control_enum));
    51475147
    5148         /*We found the enum.  Use its values to fill into the vector, using the vertices ids: */
    5149         input->GetVectorFromInputs(vector,&doflist1[0]);
     5148        /*Check that it is a ControlInput*/
     5149        if (input->ObjectEnum()!=ControlInputEnum){
     5150                _error_("input %s is not a ControlInput",EnumToStringx(control_enum));
     5151        }
     5152
     5153        ((ControlInput*)input)->GetVectorFromInputs(vector,&doflist1[0],data);
    51505154}
    51515155/*}}}*/
  • issm/trunk-jpl/src/c/objects/Elements/Penta.h

    r11317 r11318  
    149149                void   GradjBbarPattyn(Vec gradient,int control_index);
    150150                void   GradjBbarStokes(Vec gradient,int control_index);
    151                 void   GetVectorFromControlInputs(Vec gradient,int control_enum,int control_index);
     151                void   GetVectorFromControlInputs(Vec gradient,int control_enum,int control_index,const char* data);
    152152                void   SetControlInputsFromVector(double* vector,int control_enum,int control_index);
    153153                void   ControlInputGetGradient(Vec gradient,int enum_type,int control_index);
  • issm/trunk-jpl/src/c/objects/Elements/Tria.cpp

    r11317 r11318  
    47314731/*}}}*/
    47324732/*FUNCTION Tria::GetVectorFromControlInputs{{{1*/
    4733 void  Tria::GetVectorFromControlInputs(Vec vector,int control_enum,int control_index){
     4733void  Tria::GetVectorFromControlInputs(Vec vector,int control_enum,int control_index,const char* data){
    47344734
    47354735        int doflist1[NUMVERTICES];
     
    47454745        if(!input) _error_("Input %s not found in element",EnumToStringx(control_enum));
    47464746
    4747         /*We found the enum.  Use its values to fill into the vector, using the vertices ids: */
    4748         input->GetVectorFromInputs(vector,&doflist1[0]);
     4747        /*Check that it is a ControlInput*/
     4748        if (input->ObjectEnum()!=ControlInputEnum){
     4749                _error_("input %s is not a ControlInput",EnumToStringx(control_enum));
     4750        }
     4751
     4752        ((ControlInput*)input)->GetVectorFromInputs(vector,&doflist1[0],data);
    47494753}
    47504754/*}}}*/
  • issm/trunk-jpl/src/c/objects/Elements/Tria.h

    r11317 r11318  
    150150                void   GradjVxBalancedthickness(Vec gradient,int control_index);
    151151                void   GradjVyBalancedthickness(Vec gradient,int control_index);
    152                 void   GetVectorFromControlInputs(Vec gradient,int control_enum,int control_index);
     152                void   GetVectorFromControlInputs(Vec gradient,int control_enum,int control_index,const char* data);
    153153                void   SetControlInputsFromVector(double* vector,int control_enum,int control_index);
    154154                void   ControlInputGetGradient(Vec gradient,int enum_type,int control_index);
  • issm/trunk-jpl/src/c/objects/Inputs/ControlInput.cpp

    r11317 r11318  
    406406        return gradient->SpawnResult(step,time);
    407407}/*}}}*/
    408 /*FUNCTION ControlInput::GetInputValue(bool* pvalue){{{1*/
     408/*FUNCTION ControlInput::GetVectorFromInputs(Vec vector,int* doflist){{{1*/
    409409void ControlInput::GetVectorFromInputs(Vec vector,int* doflist){
    410410        values->GetVectorFromInputs(vector,doflist);
     411}/*}}}*/
     412/*FUNCTION ControlInput::GetVectorFromInputs(Vec vector,int* doflist,const char* data){{{1*/
     413void ControlInput::GetVectorFromInputs(Vec vector,int* doflist,const char* data){
     414         if(strcmp(data,"value")==0){
     415                 _assert_(values);
     416                 values->GetVectorFromInputs(vector,doflist);
     417         }
     418         else if (strcmp(data,"lowerbound")==0){
     419                 _assert_(minvalues);
     420                 minvalues->GetVectorFromInputs(vector,doflist);
     421         }
     422         else if (strcmp(data,"upperbound")==0){
     423                 _assert_(maxvalues);
     424                 maxvalues->GetVectorFromInputs(vector,doflist);
     425         }
     426         else if (strcmp(data,"gradient")==0){
     427                 _assert_(gradient);
     428                 gradient->GetVectorFromInputs(vector,doflist);
     429         }
     430         else{
     431                 _error_("Data %s not supported yet",data);
     432         }
    411433}/*}}}*/
    412434/*FUNCTION ControlInput::GetInputAverage(double* pvalue){{{1*/
  • issm/trunk-jpl/src/c/objects/Inputs/ControlInput.h

    r11317 r11318  
    8787                void Extrude(void);
    8888                void VerticallyIntegrate(Input* thickness_input);
     89                void GetVectorFromInputs(Vec vector,int* doflist,const char* data);
    8990                void GetVectorFromInputs(Vec vector,int* doflist);
    9091                void GetValuesPtr(double** pvalues,int* pnum_values){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/solutions/controltao_core.cpp

    r11317 r11318  
    5858        XL=NewVec(numberofvertices); VecSet(XL,1.);
    5959        XU=NewVec(numberofvertices); VecSet(XU,200.);
    60         //TaoSetVariableBounds(tao,XL,XU); VecFree(&XL); VecFree(&XU);
    6160
    62         GetVectorFromControlInputsx(&X,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
     61        GetVectorFromControlInputsx(&X, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
     62        GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
     63        GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
    6364        TaoSetInitialVector(tao,X);
     65        TaoSetVariableBounds(tao,XL,XU);
     66        VecFree(&XL);
     67        VecFree(&XU);
    6468
    6569        user.femmodel=femmodel;
Note: See TracChangeset for help on using the changeset viewer.