Changeset 4970
- Timestamp:
- 08/04/10 11:21:36 (15 years ago)
- Location:
- issm/trunk/src/c/objects/Elements
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/objects/Elements/Element.h
r4967 r4970 71 71 virtual void InputScale(int enum_type,double scale_factor)=0; 72 72 virtual void GetVectorFromInputs(Vec vector,int NameEnum)=0; 73 virtual void InputAXPY(int YEnum, double scalar, int XEnum)=0;74 73 virtual void InputControlUpdate(double scalar,bool save_parameter)=0; 75 virtual void InputControlConstrain(int control_type,double cm_min, double cm_max)=0;76 74 virtual bool InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums)=0; 77 75 -
issm/trunk/src/c/objects/Elements/Penta.cpp
r4967 r4970 954 954 } 955 955 /*}}}*/ 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 /*}}}*/995 956 /*FUNCTION Penta::InputConvergence{{{1*/ 996 957 bool Penta::InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){ … … 1187 1148 1188 1149 /*Call inputs method*/ 1189 i nputs->DuplicateInput(original_enum,new_enum);1150 if (IsInput(original_enum)) inputs->DuplicateInput(original_enum,new_enum); 1190 1151 1191 1152 } … … 1949 1910 1950 1911 /*Create New Surface: s = (1-rho_ice/rho_water) h*/ 1951 InputDuplicate(ThicknessEnum,SurfaceEnum); //1: copy thickness into surface1912 this->inputs->DuplicateInput(ThicknessEnum,SurfaceEnum); //1: copy thickness into surface 1952 1913 InputScale(SurfaceEnum,(1-rho_ice/rho_water)); //2: surface = surface * (1-di) 1953 1914 1954 1915 /*Create New Bed b = -rho_ice/rho_water h*/ 1955 InputDuplicate(ThicknessEnum,BedEnum); //1: copy thickness into bed1916 this->inputs->DuplicateInput(ThicknessEnum,BedEnum); //1: copy thickness into bed 1956 1917 InputScale(BedEnum, -rho_ice/rho_water); //2: bed = bed * (-di) 1957 1918 } … … 1961 1922 1962 1923 /*The bed does not change, update surface only s = b + h*/ 1963 InputDuplicate(BedEnum,SurfaceEnum); //1: copy bed into surface1964 InputAXPY(SurfaceEnum,1.0,ThicknessEnum); //2: surface = surface + 1 * thickness1924 this->inputs->DuplicateInput(BedEnum,SurfaceEnum); //1: copy bed into surface 1925 this->inputs->AXPY(SurfaceEnum,1.0,ThicknessEnum); //2: surface = surface + 1 * thickness 1965 1926 } 1966 1927 … … 5443 5404 name==VyEnum || 5444 5405 name==VzEnum || 5406 name==VxObsEnum || 5407 name==VyObsEnum || 5408 name==VzObsEnum || 5445 5409 name==TemperatureEnum || 5446 5410 name==ControlParameterEnum || -
issm/trunk/src/c/objects/Elements/Penta.h
r4967 r4970 86 86 void GradjB(Vec gradient); 87 87 void GradjDrag(Vec gradient); 88 void InputAXPY(int YEnum, double scalar, int XEnum);89 88 void InputControlUpdate(double scalar,bool save_parameter); 90 void InputControlConstrain(int control_type,double cm_min, double cm_max);91 89 bool InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums); 92 90 void InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=ElementsEnum); -
issm/trunk/src/c/objects/Elements/Tria.cpp
r4967 r4970 1218 1218 } 1219 1219 /*}}}*/ 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 /*}}}*/1238 1220 /*FUNCTION Tria::InputControlUpdate{{{1*/ 1239 1221 void Tria::InputControlUpdate(double scalar,bool save_parameter){ … … 1289 1271 ISSMERROR("control type %s not implemented yet",EnumAsString(control_type)); 1290 1272 } 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);1307 1273 1308 1274 } … … 2307 2273 2308 2274 /*Create New Surface: s = (1-rho_ice/rho_water) h*/ 2309 InputDuplicate(ThicknessEnum,SurfaceEnum); //1: copy thickness into surface2275 this->inputs->DuplicateInput(ThicknessEnum,SurfaceEnum); //1: copy thickness into surface 2310 2276 InputScale(SurfaceEnum,(1.0-rho_ice/rho_water)); //2: surface = surface * (1-di) 2311 2277 2312 2278 /*Create New Bed b = -rho_ice/rho_water h*/ 2313 InputDuplicate(ThicknessEnum,BedEnum); //1: copy thickness into bed2279 this->inputs->DuplicateInput(ThicknessEnum,BedEnum); //1: copy thickness into bed 2314 2280 InputScale(BedEnum, -rho_ice/rho_water); //2: bed = bed * (-di) 2315 2281 } … … 2319 2285 2320 2286 /*The bed does not change, update surface only s = b + h*/ 2321 InputDuplicate(BedEnum,SurfaceEnum); //1: copy bed into surface2322 InputAXPY(SurfaceEnum,1.0,ThicknessEnum); //2: surface = surface + 1 * thickness2287 this->inputs->DuplicateInput(BedEnum,SurfaceEnum); //1: copy bed into surface 2288 this->inputs->AXPY(SurfaceEnum,1.0,ThicknessEnum); //2: surface = surface + 1 * thickness 2323 2289 } 2324 2290 … … 6098 6064 name==VxEnum || 6099 6065 name==VyEnum || 6066 name==VxObsEnum || 6067 name==VyObsEnum || 6100 6068 name==FitEnum || 6101 6069 name==DragCoefficientEnum || -
issm/trunk/src/c/objects/Elements/Tria.h
r4967 r4970 82 82 void GradjB(Vec gradient); 83 83 void GradjDrag(Vec gradient); 84 void InputAXPY(int YEnum, double scalar, int XEnum);85 84 void InputControlUpdate(double scalar,bool save_parameter); 86 void InputControlConstrain(int control_type,double cm_min, double cm_max);87 85 bool InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums); 88 86 void InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=ElementsEnum);
Note:
See TracChangeset
for help on using the changeset viewer.