Changeset 4970


Ignore:
Timestamp:
08/04/10 11:21:36 (15 years ago)
Author:
Mathieu Morlighem
Message:

Some cleaning: InputAXPY and InputDuplicate are INPUTS methods, not element (so that any object having inputs can use it)

Location:
issm/trunk/src/c/objects/Elements
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/objects/Elements/Element.h

    r4967 r4970  
    7171                virtual void   InputScale(int enum_type,double scale_factor)=0;
    7272                virtual void   GetVectorFromInputs(Vec vector,int NameEnum)=0;
    73                 virtual void   InputAXPY(int YEnum, double scalar, int XEnum)=0;
    7473                virtual void   InputControlUpdate(double scalar,bool save_parameter)=0;
    75                 virtual void   InputControlConstrain(int control_type,double cm_min, double cm_max)=0;
    7674                virtual bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums)=0;
    7775
  • issm/trunk/src/c/objects/Elements/Penta.cpp

    r4967 r4970  
    954954}
    955955/*}}}*/
    956 /*FUNCTION Penta::InputAXPY{{{1*/
    957 void  Penta::InputAXPY(int YEnum, double scalar, int XEnum){
    958 
    959         Input* xinput=NULL;
    960         Input* yinput=NULL;
    961 
    962         /*Find x and y inputs: */
    963         xinput=(Input*)this->inputs->GetInput(XEnum);
    964         yinput=(Input*)this->inputs->GetInput(YEnum);
    965 
    966         /*some checks: */
    967         if(!xinput || !yinput)ISSMERROR("%s%s%s%s%s"," input ",EnumAsString(XEnum)," or input ",EnumAsString(YEnum)," could not be found!");
    968         if(xinput->Enum()!=yinput->Enum())ISSMERROR("%s%s%s%s%s"," input ",EnumAsString(XEnum)," and input ",EnumAsString(YEnum)," are not of the same type!");
    969 
    970         /*Scale: */
    971         yinput->AXPY(xinput,scalar);
    972 
    973         /*Move input to Material if required (needed if control method) TO BE IMPROVED*/
    974         if (YEnum==RheologyBEnum){
    975                 this->matice->inputs->AddInput((Input*)yinput->copy());
    976         }
    977 }
    978 /*}}}*/
    979 /*FUNCTION Penta::InputControlConstrain{{{1*/
    980 void  Penta::InputControlConstrain(int control_type, double cm_min, double cm_max){
    981 
    982         Input* input=NULL;
    983 
    984         /*Find input: */
    985         input=(Input*)this->inputs->GetInput(control_type);
    986        
    987         /*Do nothing if we  don't find it: */
    988         if(!input) return;
    989 
    990         /*Constrain input using cm_min and cm_max: */
    991         input->Constrain(cm_min,cm_max);
    992 
    993 }
    994 /*}}}*/
    995956/*FUNCTION Penta::InputConvergence{{{1*/
    996957bool Penta::InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
     
    11871148
    11881149        /*Call inputs method*/
    1189         inputs->DuplicateInput(original_enum,new_enum);
     1150        if (IsInput(original_enum)) inputs->DuplicateInput(original_enum,new_enum);
    11901151
    11911152}
     
    19491910
    19501911                /*Create New Surface: s = (1-rho_ice/rho_water) h*/
    1951                 InputDuplicate(ThicknessEnum,SurfaceEnum);     //1: copy thickness into surface
     1912                this->inputs->DuplicateInput(ThicknessEnum,SurfaceEnum);     //1: copy thickness into surface
    19521913                InputScale(SurfaceEnum,(1-rho_ice/rho_water)); //2: surface = surface * (1-di)
    19531914
    19541915                /*Create New Bed b = -rho_ice/rho_water h*/
    1955                 InputDuplicate(ThicknessEnum,BedEnum);         //1: copy thickness into bed
     1916                this->inputs->DuplicateInput(ThicknessEnum,BedEnum);         //1: copy thickness into bed
    19561917                InputScale(BedEnum, -rho_ice/rho_water);       //2: bed = bed * (-di)
    19571918        }
     
    19611922
    19621923                /*The bed does not change, update surface only s = b + h*/
    1963                 InputDuplicate(BedEnum,SurfaceEnum);          //1: copy bed into surface
    1964                 InputAXPY(SurfaceEnum,1.0,ThicknessEnum);     //2: surface = surface + 1 * thickness
     1924                this->inputs->DuplicateInput(BedEnum,SurfaceEnum);          //1: copy bed into surface
     1925                this->inputs->AXPY(SurfaceEnum,1.0,ThicknessEnum);     //2: surface = surface + 1 * thickness
    19651926        }
    19661927
     
    54435404                                name==VyEnum ||
    54445405                                name==VzEnum ||
     5406                                name==VxObsEnum ||
     5407                                name==VyObsEnum ||
     5408                                name==VzObsEnum ||
    54455409                                name==TemperatureEnum ||
    54465410                                name==ControlParameterEnum ||
  • issm/trunk/src/c/objects/Elements/Penta.h

    r4967 r4970  
    8686                void   GradjB(Vec gradient);
    8787                void   GradjDrag(Vec gradient);
    88                 void   InputAXPY(int YEnum, double scalar, int XEnum);
    8988                void   InputControlUpdate(double scalar,bool save_parameter);
    90                 void   InputControlConstrain(int control_type,double cm_min, double cm_max);
    9189                bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
    9290                void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=ElementsEnum);
  • issm/trunk/src/c/objects/Elements/Tria.cpp

    r4967 r4970  
    12181218}
    12191219/*}}}*/
    1220 /*FUNCTION Tria::InputAXPY{{{1*/
    1221 void  Tria::InputAXPY(int YEnum, double scalar, int XEnum){
    1222 
    1223         Input* xinput=NULL;
    1224         Input* yinput=NULL;
    1225 
    1226         /*Find x and y inputs: */
    1227         xinput=(Input*)this->inputs->GetInput(XEnum);
    1228         yinput=(Input*)this->inputs->GetInput(YEnum);
    1229 
    1230         /*some checks: */
    1231         if(!xinput || !yinput) ISSMERROR("%s%s%s%s%s"," input ",EnumAsString(XEnum)," or input ",EnumAsString(YEnum)," could not be found!");
    1232 
    1233         /*Scale: */
    1234         yinput->AXPY(xinput,scalar);
    1235 
    1236 }
    1237 /*}}}*/
    12381220/*FUNCTION Tria::InputControlUpdate{{{1*/
    12391221void  Tria::InputControlUpdate(double scalar,bool save_parameter){
     
    12891271                ISSMERROR("control type %s not implemented yet",EnumAsString(control_type));
    12901272        }
    1291 
    1292 }
    1293 /*}}}*/
    1294 /*FUNCTION Tria::InputControlConstrain{{{1*/
    1295 void  Tria::InputControlConstrain(int control_type, double cm_min, double cm_max){
    1296 
    1297         Input* input=NULL;
    1298 
    1299         /*Find input: */
    1300         input=(Input*)this->inputs->GetInput(control_type);
    1301        
    1302         /*Do nothing if we  don't find it: */
    1303         if(!input) return;
    1304 
    1305         /*Constrain input using cm_min and cm_max: */
    1306         input->Constrain(cm_min,cm_max);
    13071273
    13081274}
     
    23072273
    23082274                /*Create New Surface: s = (1-rho_ice/rho_water) h*/
    2309                 InputDuplicate(ThicknessEnum,SurfaceEnum);     //1: copy thickness into surface
     2275                this->inputs->DuplicateInput(ThicknessEnum,SurfaceEnum);     //1: copy thickness into surface
    23102276                InputScale(SurfaceEnum,(1.0-rho_ice/rho_water)); //2: surface = surface * (1-di)
    23112277
    23122278                /*Create New Bed b = -rho_ice/rho_water h*/
    2313                 InputDuplicate(ThicknessEnum,BedEnum);         //1: copy thickness into bed
     2279                this->inputs->DuplicateInput(ThicknessEnum,BedEnum);         //1: copy thickness into bed
    23142280                InputScale(BedEnum, -rho_ice/rho_water);       //2: bed = bed * (-di)
    23152281        }
     
    23192285
    23202286                /*The bed does not change, update surface only s = b + h*/
    2321                 InputDuplicate(BedEnum,SurfaceEnum);          //1: copy bed into surface
    2322                 InputAXPY(SurfaceEnum,1.0,ThicknessEnum);     //2: surface = surface + 1 * thickness
     2287                this->inputs->DuplicateInput(BedEnum,SurfaceEnum);          //1: copy bed into surface
     2288                this->inputs->AXPY(SurfaceEnum,1.0,ThicknessEnum);     //2: surface = surface + 1 * thickness
    23232289        }
    23242290
     
    60986064                                name==VxEnum ||
    60996065                                name==VyEnum ||
     6066                                name==VxObsEnum ||
     6067                                name==VyObsEnum ||
    61006068                                name==FitEnum ||
    61016069                                name==DragCoefficientEnum ||
  • issm/trunk/src/c/objects/Elements/Tria.h

    r4967 r4970  
    8282                void   GradjB(Vec gradient);
    8383                void   GradjDrag(Vec gradient);
    84                 void   InputAXPY(int YEnum, double scalar, int XEnum);
    8584                void   InputControlUpdate(double scalar,bool save_parameter);
    86                 void   InputControlConstrain(int control_type,double cm_min, double cm_max);
    8785                bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
    8886                void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=ElementsEnum);
Note: See TracChangeset for help on using the changeset viewer.