Changeset 6200
- Timestamp:
- 10/08/10 11:14:43 (15 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 15 added
- 1 deleted
- 196 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/Container/DataSet.cpp
r6175 r6200 234 234 dataset->AddObject(pentavertexinput);} 235 235 break; 236 case ControlInputEnum:{ 237 ControlInput* controlinputinput=NULL; 238 controlinputinput=new ControlInput(); 239 controlinputinput->Demarshall(&marshalled_dataset); 240 dataset->AddObject(controlinputinput);} 241 break; 236 242 case TriaVertexElementResultEnum:{ 237 243 TriaVertexElementResult* triavertexelementresult=NULL; -
issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h
r6165 r6200 127 127 PentaVertexInputEnum, 128 128 TriaVertexInputEnum, 129 ControlInputEnum, 129 130 /*Params: */ 130 131 ParamEnum, … … 321 322 OldGradientEnum, 322 323 ConnectivityEnum, 323 ControlParameterEnum,324 324 ControlSteadyEnum, 325 325 DakotaParameterEnum, -
issm/trunk/src/c/EnumDefinitions/EnumToString.cpp
r6165 r6200 110 110 case PentaVertexInputEnum : return "PentaVertexInput"; 111 111 case TriaVertexInputEnum : return "TriaVertexInput"; 112 case ControlInputEnum : return "ControlInput"; 112 113 case ParamEnum : return "Param"; 113 114 case BoolParamEnum : return "BoolParam"; … … 283 284 case OldGradientEnum : return "OldGradient"; 284 285 case ConnectivityEnum : return "Connectivity"; 285 case ControlParameterEnum : return "ControlParameter";286 286 case ControlSteadyEnum : return "ControlSteady"; 287 287 case DakotaParameterEnum : return "DakotaParameter"; -
issm/trunk/src/c/EnumDefinitions/StringToEnum.cpp
r6165 r6200 108 108 else if (strcmp(name,"PentaVertexInput")==0) return PentaVertexInputEnum; 109 109 else if (strcmp(name,"TriaVertexInput")==0) return TriaVertexInputEnum; 110 else if (strcmp(name,"ControlInput")==0) return ControlInputEnum; 110 111 else if (strcmp(name,"Param")==0) return ParamEnum; 111 112 else if (strcmp(name,"BoolParam")==0) return BoolParamEnum; … … 281 282 else if (strcmp(name,"OldGradient")==0) return OldGradientEnum; 282 283 else if (strcmp(name,"Connectivity")==0) return ConnectivityEnum; 283 else if (strcmp(name,"ControlParameter")==0) return ControlParameterEnum;284 284 else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum; 285 285 else if (strcmp(name,"DakotaParameter")==0) return DakotaParameterEnum; -
issm/trunk/src/c/Makefile.am
r6165 r6200 150 150 ./objects/Inputs/DoubleInput.h\ 151 151 ./objects/Inputs/DoubleInput.cpp\ 152 ./objects/Inputs/ControlInput.h\ 153 ./objects/Inputs/ControlInput.cpp\ 152 154 ./objects/Elements/Penta.h\ 153 155 ./objects/Elements/Penta.cpp\ … … 544 546 ./modules/MassFluxx/MassFluxx.cpp\ 545 547 ./modules/MassFluxx/MassFluxx.h\ 548 ./modules/ControlInputGetGradientx/ControlInputGetGradientx.cpp\ 549 ./modules/ControlInputGetGradientx/ControlInputGetGradientx.h\ 550 ./modules/ControlInputSetGradientx/ControlInputSetGradientx.cpp\ 551 ./modules/ControlInputSetGradientx/ControlInputSetGradientx.h\ 546 552 ./modules/SystemMatricesx/SystemMatricesx.cpp\ 547 553 ./modules/SystemMatricesx/SystemMatricesx.h\ … … 715 721 ./objects/Inputs/DoubleInput.h\ 716 722 ./objects/Inputs/DoubleInput.cpp\ 723 ./objects/Inputs/ControlInput.h\ 724 ./objects/Inputs/ControlInput.cpp\ 717 725 ./objects/Elements/Penta.h\ 718 726 ./objects/Elements/Penta.cpp\ … … 1101 1109 ./modules/MassFluxx/MassFluxx.cpp\ 1102 1110 ./modules/MassFluxx/MassFluxx.h\ 1111 ./modules/ControlInputGetGradientx/ControlInputGetGradientx.cpp\ 1112 ./modules/ControlInputGetGradientx/ControlInputGetGradientx.h\ 1113 ./modules/ControlInputSetGradientx/ControlInputSetGradientx.cpp\ 1114 ./modules/ControlInputSetGradientx/ControlInputSetGradientx.h\ 1103 1115 ./modules/SystemMatricesx/SystemMatricesx.cpp\ 1104 1116 ./modules/SystemMatricesx/SystemMatricesx.h\ -
issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
r6131 r6200 71 71 72 72 IoModelFetchData(&control_parameter,NULL,NULL,iomodel_handle,EnumToModelField(iomodel->control_type)); 73 parameters->AddObject(new DoubleVecParam(ControlParameterEnum,control_parameter,iomodel->nsteps));74 73 xfree((void**)&control_parameter); 75 74 } -
issm/trunk/src/c/modules/modules.h
r6130 r6200 19 19 #include "./ContourToMeshx/ContourToMeshx.h" 20 20 #include "./ContourToNodesx/ContourToNodesx.h" 21 #include "./ControlInputGetGradientx/ControlInputGetGradientx.h" 22 #include "./ControlInputSetGradientx/ControlInputSetGradientx.h" 21 23 #include "./CostFunctionx/CostFunctionx.h" 22 24 #include "./CreateNodalConstraintsx/CreateNodalConstraintsx.h" -
issm/trunk/src/c/objects/Elements/Element.h
r6130 r6200 58 58 virtual void UpdateGeometry(void)=0; 59 59 virtual void InputToResult(int enum_type,int step,double time)=0; 60 virtual void ControlInputGetGradient(Vec gradient,int enum_type)=0; 61 virtual void ControlInputSetGradient(double* gradient,int enum_type)=0; 60 62 virtual void ProcessResultsUnits(void)=0; 61 63 virtual void MinVel(double* pminvel, bool process_units)=0; -
issm/trunk/src/c/objects/Elements/Penta.cpp
r6150 r6200 627 627 } 628 628 /*}}}*/ 629 /*FUNCTION Penta::ControlInputGetGradient{{{1*/ 630 void Penta::ControlInputGetGradient(Vec gradient,int enum_type){ 631 632 int doflist1[NUMVERTICES]; 633 Input* input=NULL; 634 635 if(enum_type==RheologyBbarEnum){ 636 if(!IsOnBed()) return; 637 input=(Input*)matice->inputs->GetInput(RheologyBEnum); 638 } 639 else{ 640 input=inputs->GetInput(enum_type); 641 } 642 if (!input) ISSMERROR("Input %s not found",EnumToString(enum_type)); 643 644 this->GetDofList1(&doflist1[0]); 645 ((ControlInput*)input)->GetGradient(gradient,&doflist1[0]); 646 647 }/*}}}*/ 648 /*FUNCTION Penta::ControlInputSetGradient{{{1*/ 649 void Penta::ControlInputSetGradient(double* gradient,int enum_type){ 650 651 int doflist1[NUMVERTICES]; 652 double grad_list[NUMVERTICES]; 653 Input* grad_input=NULL; 654 Input* input=NULL; 655 656 if(enum_type==RheologyBbarEnum){ 657 input=(Input*)matice->inputs->GetInput(RheologyBEnum); 658 } 659 else{ 660 input=inputs->GetInput(enum_type); 661 } 662 if (!input) ISSMERROR("Input %s not found",EnumToString(enum_type)); 663 664 this->GetDofList1(&doflist1[0]); 665 for(int i=0;i<NUMVERTICES;i++) grad_list[i]=gradient[doflist1[i]]; 666 grad_input=new PentaVertexInput(GradientEnum,grad_list); 667 ((ControlInput*)input)->SetGradient(grad_input); 668 669 }/*}}}*/ 629 670 /*FUNCTION Penta::RegularizeInversion {{{1*/ 630 671 double Penta::RegularizeInversion(void){ … … 918 959 919 960 /*Intermediary*/ 961 int control_type; 920 962 Input* input=NULL; 921 963 double cm_min,cm_max; 922 int control_type;923 964 924 965 /*retrieve some parameters: */ … … 927 968 this->parameters->FindParam(&control_type,ControlTypeEnum); 928 969 929 /*Rheology*/930 970 if(control_type==RheologyBbarEnum){ 931 932 /*The update is done by the element on bed only*/933 971 if (!IsOnBed()) return; 934 935 /*First, get revert to previous parameter value (kept in ControlParameter input)*/936 matice->inputs->DuplicateInput(ControlParameterEnum,RheologyBEnum);937 938 /*Now, update using the gradient new = old + scalar * gradient*/939 //matice->inputs->AXPY(RheologyBbarEnum,scalar,GradientEnum);940 // For now: Gradient is in element (TO BE CHANGED) and parameter in matice941 Input* input_B =(Input*)matice->inputs->GetInput(RheologyBEnum); ISSMASSERT(input_B);942 Input* input_Grad=(Input*)this->inputs->GetInput(GradientEnum); ISSMASSERT(input_Grad);943 input_B->AXPY(input_Grad,scalar);944 945 /*Constrain constrain input*/946 972 input=(Input*)matice->inputs->GetInput(RheologyBEnum); ISSMASSERT(input); 947 input->Constrain(cm_min,cm_max); 948 949 /*OK, now we can propagate the new parameter up*/ 973 } 974 else{ 975 input=(Input*)this->inputs->GetInput(control_type); ISSMASSERT(input); 976 } 977 978 if (input->Enum()!=ControlInputEnum) ISSMERROR("input %s is not a ControlInput",EnumToString(control_type)); 979 980 ((ControlInput*)input)->UpdateValue(scalar); 981 input->Constrain(cm_min,cm_max); 982 if (save_parameter) ((ControlInput*)input)->SaveValue(); 983 984 if(control_type==RheologyBbarEnum){ 950 985 this->InputExtrude(RheologyBEnum,MaterialsEnum); 951 952 /*Finally: save input if requested*/953 if (save_parameter){954 matice->inputs->DuplicateInput(RheologyBEnum,ControlParameterEnum);955 this->InputExtrude(ControlParameterEnum,MaterialsEnum);956 }957 958 }959 else if(control_type==DragCoefficientEnum){960 961 /*First, get revert to previous parameter value (kept in ControlParameter input)*/962 this->inputs->DuplicateInput(ControlParameterEnum,DragCoefficientEnum);963 964 /*Now, update using the gradient new = old + scalar * gradient*/965 this->inputs->AXPY(DragCoefficientEnum,scalar,GradientEnum);966 967 /*Constrain input*/968 input=(Input*)this->inputs->GetInput(DragCoefficientEnum); ISSMASSERT(input);969 input->Constrain(cm_min,cm_max);970 971 /*Finally: save input if requested*/972 if (save_parameter) inputs->DuplicateInput(DragCoefficientEnum,ControlParameterEnum);973 974 }975 else{976 ISSMERROR("control type %s not implemented yet",EnumToString(control_type));977 986 } 978 987 } … … 1022 1031 if (original_input->Enum()==PentaVertexInputEnum) 1023 1032 total_integrated_input=new PentaVertexInput(average_enum_type,zeros_list); 1033 else if (original_input->Enum()==ControlInputEnum) 1034 total_integrated_input=new PentaVertexInput(average_enum_type,zeros_list); 1024 1035 else if (original_input->Enum()==DoubleInputEnum) 1025 1036 total_integrated_input=new DoubleInput(average_enum_type,0.0); … … 1118 1129 1119 1130 /*Go through all the input objects, and find the one corresponding to enum_type, if it exists: */ 1120 if (enum_type==RheologyBbarEnum){ 1121 input=this->matice->inputs->GetInput(RheologyBEnum); 1122 } 1123 else{ 1124 input=this->inputs->GetInput(enum_type); 1125 } 1131 if (enum_type==RheologyBbarEnum) input=this->matice->inputs->GetInput(RheologyBEnum); 1132 else input=this->inputs->GetInput(enum_type); 1126 1133 if (!input) ISSMERROR("Input %s not found in penta->inputs",EnumToString(enum_type)); 1127 1134 … … 1129 1136 * object out of the input, with the additional step and time information: */ 1130 1137 this->results->AddObject((Object*)input->SpawnResult(step,time)); 1138 if(input->Enum()==ControlInputEnum) this->results->AddObject((Object*)((ControlInput*)input)->SpawnGradient(step,time)); 1131 1139 1132 1140 } … … 1742 1750 this->inputs->AddInput(new IntInput(DragTypeEnum,iomodel->drag_type)); 1743 1751 1744 }1745 if (iomodel->control_parameter) {1746 for(i=0;i<6;i++)nodeinputs[i]=iomodel->control_parameter[penta_vertex_ids[i]-1];1747 this->inputs->AddInput(new PentaVertexInput(ControlParameterEnum,nodeinputs));1748 1752 } 1749 1753 if (iomodel->melting_rate) { … … 1882 1886 /*No update for other solution types*/ 1883 1887 break; 1884 1888 } 1889 1890 /*Control Inputs*/ 1891 if (iomodel->control_analysis){ 1892 switch(iomodel->control_type){ 1893 case DhDtEnum: 1894 if (iomodel->dhdt){ 1895 for(i=0;i<6;i++)nodeinputs[i]=iomodel->dhdt[penta_vertex_ids[i]-1]/iomodel->yts; 1896 this->inputs->AddInput(new ControlInput(DhDtEnum,PentaVertexInputEnum,nodeinputs)); 1897 } 1898 break; 1899 case VxEnum: 1900 if (iomodel->vx){ 1901 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx[penta_vertex_ids[i]-1]/iomodel->yts; 1902 this->inputs->AddInput(new ControlInput(VxEnum,PentaVertexInputEnum,nodeinputs)); 1903 } 1904 break; 1905 case VyEnum: 1906 if (iomodel->vy){ 1907 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy[penta_vertex_ids[i]-1]/iomodel->yts; 1908 this->inputs->AddInput(new ControlInput(VyEnum,PentaVertexInputEnum,nodeinputs)); 1909 } 1910 break; 1911 case DragCoefficientEnum: 1912 if (iomodel->drag_coefficient){ 1913 for(i=0;i<6;i++)nodeinputs[i]=iomodel->drag_coefficient[penta_vertex_ids[i]-1]; 1914 this->inputs->AddInput(new ControlInput(DragCoefficientEnum,PentaVertexInputEnum,nodeinputs)); 1915 } 1916 break; 1917 case RheologyBbarEnum: 1918 /*Matice will take care of it*/ break; 1919 default: 1920 ISSMERROR("Control %s not implemented yet",EnumToString(iomodel->control_type)); 1921 } 1885 1922 } 1886 1923 … … 5357 5394 name==VzObsEnum || 5358 5395 name==TemperatureEnum || 5359 name==ControlParameterEnum ||5360 5396 name==CmResponseEnum || 5361 5397 name==DragCoefficientEnum || -
issm/trunk/src/c/objects/Elements/Penta.h
r6150 r6200 93 93 void InputDuplicate(int original_enum,int new_enum); 94 94 void InputScale(int enum_type,double scale_factor); 95 void ControlInputGetGradient(Vec gradient,int enum_type); 96 void ControlInputSetGradient(double* gradient,int enum_type); 95 97 void InputToResult(int enum_type,int step,double time); 96 98 double MassFlux(double* segment,bool process_units); -
issm/trunk/src/c/objects/Elements/Tria.cpp
r6158 r6200 628 628 } 629 629 /*}}}*/ 630 /*FUNCTION Tria::ControlInputGetGradient{{{1*/ 631 void Tria::ControlInputGetGradient(Vec gradient,int enum_type){ 632 633 int doflist1[NUMVERTICES]; 634 Input* input=NULL; 635 636 if(enum_type==RheologyBbarEnum){ 637 input=(Input*)matice->inputs->GetInput(enum_type); 638 } 639 else{ 640 input=inputs->GetInput(enum_type); 641 } 642 if (!input) ISSMERROR("Input %s not found",EnumToString(enum_type)); 643 644 this->GetDofList1(&doflist1[0]); 645 ((ControlInput*)input)->GetGradient(gradient,&doflist1[0]); 646 647 }/*}}}*/ 648 /*FUNCTION Tria::ControlInputSetGradient{{{1*/ 649 void Tria::ControlInputSetGradient(double* gradient,int enum_type){ 650 651 int doflist1[NUMVERTICES]; 652 double grad_list[NUMVERTICES]; 653 Input* grad_input=NULL; 654 Input* input=NULL; 655 656 if(enum_type==RheologyBbarEnum){ 657 input=(Input*)matice->inputs->GetInput(enum_type); 658 } 659 else{ 660 input=inputs->GetInput(enum_type); 661 } 662 if (!input) ISSMERROR("Input %s not found",EnumToString(enum_type)); 663 664 this->GetDofList1(&doflist1[0]); 665 for(int i=0;i<NUMVERTICES;i++) grad_list[i]=gradient[doflist1[i]]; 666 grad_input=new TriaVertexInput(GradientEnum,grad_list); 667 668 ((ControlInput*)input)->SetGradient(grad_input); 669 670 }/*}}}*/ 630 671 /*FUNCTION Tria::RegularizeInversion {{{1*/ 631 672 double Tria::RegularizeInversion(){ … … 1155 1196 this->parameters->FindParam(&control_type,ControlTypeEnum); 1156 1197 1157 /*Rheology*/ 1158 switch(control_type){ 1159 1160 case RheologyBbarEnum:{ 1161 1162 /*First, get revert to previous parameter value (kept in ControlParameter input)*/ 1163 matice->inputs->DuplicateInput(ControlParameterEnum,RheologyBbarEnum); 1164 1165 /*Now, update using the gradient new = old + scalar * gradient*/ 1166 //matice->inputs->AXPY(RheologyBbarEnum,scalar,GradientEnum); 1167 // For now: Gradient is in element (TO BE CHANGED) and parameter in matice 1168 Input* input_B =(Input*)matice->inputs->GetInput(RheologyBbarEnum); ISSMASSERT(input_B); 1169 Input* input_Grad=(Input*)this->inputs->GetInput(GradientEnum); ISSMASSERT(input_Grad); 1170 input_B->AXPY(input_Grad,scalar); 1171 1172 /*Constrain constrain input*/ 1173 input=(Input*)matice->inputs->GetInput(RheologyBbarEnum); ISSMASSERT(input); 1174 input->Constrain(cm_min,cm_max); 1175 1176 /*Finally: save input if requested*/ 1177 if (save_parameter) matice->inputs->DuplicateInput(RheologyBbarEnum,ControlParameterEnum); 1178 } 1179 break; 1180 1181 case DragCoefficientEnum:{ 1182 this->inputs->DuplicateInput(ControlParameterEnum,DragCoefficientEnum); 1183 this->inputs->AXPY(DragCoefficientEnum,scalar,GradientEnum); 1184 input=(Input*)this->inputs->GetInput(DragCoefficientEnum); ISSMASSERT(input); 1185 input->Constrain(cm_min,cm_max); 1186 if (save_parameter) inputs->DuplicateInput(DragCoefficientEnum,ControlParameterEnum); 1187 } 1188 break; 1189 case DhDtEnum:{ 1190 this->inputs->DuplicateInput(ControlParameterEnum,DhDtEnum); 1191 this->inputs->AXPY(DhDtEnum,scalar,GradientEnum); 1192 input=(Input*)this->inputs->GetInput(DhDtEnum); ISSMASSERT(input); 1193 input->Constrain(cm_min,cm_max); 1194 if (save_parameter) inputs->DuplicateInput(DhDtEnum,ControlParameterEnum); 1195 } 1196 break; 1197 case VxEnum:{ 1198 this->inputs->DuplicateInput(ControlParameterEnum,VxEnum); 1199 this->inputs->AXPY(VxEnum,scalar,GradientEnum); 1200 input=(Input*)this->inputs->GetInput(VxEnum); ISSMASSERT(input); 1201 input->Constrain(cm_min,cm_max); 1202 if (save_parameter) inputs->DuplicateInput(VxEnum,ControlParameterEnum); 1203 } 1204 break; 1205 case VyEnum:{ 1206 this->inputs->DuplicateInput(ControlParameterEnum,VyEnum); 1207 this->inputs->AXPY(VyEnum,scalar,GradientEnum); 1208 input=(Input*)this->inputs->GetInput(VyEnum); ISSMASSERT(input); 1209 input->Constrain(cm_min,cm_max); 1210 if (save_parameter) inputs->DuplicateInput(VyEnum,ControlParameterEnum); 1211 } 1212 break; 1213 default: 1214 ISSMERROR("control type %s not implemented yet",EnumToString(control_type)); 1215 } 1198 if(control_type==RheologyBbarEnum){ 1199 input=(Input*)matice->inputs->GetInput(control_type); ISSMASSERT(input); 1200 } 1201 else{ 1202 input=(Input*)this->inputs->GetInput(control_type); ISSMASSERT(input); 1203 } 1204 1205 if (input->Enum()!=ControlInputEnum){ 1206 ISSMERROR("input %s is not a ControlInput",EnumToString(control_type)); 1207 } 1208 1209 ((ControlInput*)input)->UpdateValue(scalar); 1210 input->Constrain(cm_min,cm_max); 1211 if (save_parameter) ((ControlInput*)input)->SaveValue(); 1216 1212 } 1217 1213 /*}}}*/ … … 1318 1314 if (enum_type==RheologyBbarEnum) input=this->matice->inputs->GetInput(enum_type); 1319 1315 else input=this->inputs->GetInput(enum_type); 1320 1321 1316 if (!input) ISSMERROR("Input %s not found in tria->inputs",EnumToString(enum_type)); 1322 1317 … … 1324 1319 * object out of the input, with the additional step and time information: */ 1325 1320 this->results->AddObject((Object*)input->SpawnResult(step,time)); 1321 if(input->Enum()==ControlInputEnum) this->results->AddObject((Object*)((ControlInput*)input)->SpawnGradient(step,time)); 1326 1322 } 1327 1323 /*}}}*/ … … 2138 2134 /*Recover element type*/ 2139 2135 if ((analysis_type==PrognosticAnalysisEnum || analysis_type==BalancedthicknessAnalysisEnum) && iomodel->prognostic_DG){ 2140 2141 2136 /*P1 Discontinuous Galerkin*/ 2142 2137 tria_type=P1DGEnum; … … 2191 2186 this->inputs->AddInput(new IntInput(DragTypeEnum,iomodel->drag_type)); 2192 2187 } 2193 if (iomodel->control_parameter) {2194 for(i=0;i<3;i++)nodeinputs[i]=iomodel->control_parameter[tria_vertex_ids[i]-1];2195 this->inputs->AddInput(new TriaVertexInput(ControlParameterEnum,nodeinputs));2196 }2197 2188 if (iomodel->thickness_obs) { 2198 2189 for(i=0;i<3;i++)nodeinputs[i]=iomodel->thickness_obs[tria_vertex_ids[i]-1]; … … 2211 2202 this->inputs->AddInput(new TriaVertexInput(GeothermalFluxEnum,nodeinputs)); 2212 2203 } 2213 if (iomodel->dhdt) 2204 if (iomodel->dhdt){ 2214 2205 for(i=0;i<3;i++)nodeinputs[i]=iomodel->dhdt[tria_vertex_ids[i]-1]/iomodel->yts; 2215 2206 this->inputs->AddInput(new TriaVertexInput(DhDtEnum,nodeinputs)); 2216 2207 } 2217 if (iomodel->pressure) 2208 if (iomodel->pressure){ 2218 2209 for(i=0;i<3;i++)nodeinputs[i]=iomodel->pressure[tria_vertex_ids[i]-1]; 2219 2210 this->inputs->AddInput(new TriaVertexInput(PressureEnum,nodeinputs)); … … 2305 2296 } 2306 2297 2298 /*Control Inputs*/ 2299 if (iomodel->control_analysis){ 2300 switch(iomodel->control_type){ 2301 case DhDtEnum: 2302 if (iomodel->dhdt){ 2303 for(i=0;i<3;i++)nodeinputs[i]=iomodel->dhdt[tria_vertex_ids[i]-1]/iomodel->yts; 2304 this->inputs->AddInput(new ControlInput(DhDtEnum,TriaVertexInputEnum,nodeinputs)); 2305 } 2306 break; 2307 case VxEnum: 2308 if (iomodel->vx){ 2309 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx[tria_vertex_ids[i]-1]/iomodel->yts; 2310 this->inputs->AddInput(new ControlInput(VxEnum,TriaVertexInputEnum,nodeinputs)); 2311 } 2312 break; 2313 case VyEnum: 2314 if (iomodel->vy){ 2315 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy[tria_vertex_ids[i]-1]/iomodel->yts; 2316 this->inputs->AddInput(new ControlInput(VyEnum,TriaVertexInputEnum,nodeinputs)); 2317 } 2318 break; 2319 case DragCoefficientEnum: 2320 if (iomodel->drag_coefficient){ 2321 for(i=0;i<3;i++)nodeinputs[i]=iomodel->drag_coefficient[tria_vertex_ids[i]-1]; 2322 this->inputs->AddInput(new ControlInput(DragCoefficientEnum,TriaVertexInputEnum,nodeinputs)); 2323 } 2324 break; 2325 case RheologyBbarEnum: 2326 /*Matice will take care of it*/ break; 2327 default: 2328 ISSMERROR("Control %s not implemented yet",EnumToString(iomodel->control_type)); 2329 } 2330 2331 } 2332 2307 2333 //this->parameters: we still can't point to it, it may not even exist. Configure will handle this. 2308 2334 this->parameters=NULL; … … 4981 5007 name==AccumulationRateEnum || 4982 5008 name==SurfaceAreaEnum|| 4983 name==ControlParameterEnum ||4984 5009 name==VxEnum || 4985 5010 name==VyEnum || -
issm/trunk/src/c/objects/Elements/Tria.h
r6131 r6200 94 94 void InputDuplicate(int original_enum,int new_enum); 95 95 void InputScale(int enum_type,double scale_factor); 96 void ControlInputGetGradient(Vec gradient,int enum_type); 97 void ControlInputSetGradient(double* gradient,int enum_type); 96 98 void InputToResult(int enum_type,int step,double time); 97 99 void DeleteResults(void); -
issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp
r5743 r6200 494 494 int i; 495 495 const int numgrids=6; 496 PentaVertexInput* xpentavertexinput=NULL;497 496 498 497 /*xinput is of the same type, so cast it: */ 499 xpentavertexinput=(PentaVertexInput*)xinput;500 498 501 499 /*Carry out the AXPY operation depending on type:*/ 502 500 switch(xinput->Enum()){ 503 501 504 case PentaVertexInputEnum: 505 for(i=0;i<numgrids;i++)this->values[i]=this->values[i]+scalar*xpentavertexinput->values[i]; 502 case PentaVertexInputEnum:{ 503 PentaVertexInput* cast_input=(PentaVertexInput*)xinput; 504 for(i=0;i<numgrids;i++)this->values[i]=this->values[i]+scalar*(cast_input->values[i]);} 506 505 return; 507 506 case ControlInputEnum:{ 507 ControlInput* cont_input=(ControlInput*)xinput; 508 if(cont_input->values->Enum()!=PentaVertexInputEnum) ISSMERROR("not supported yet"); 509 PentaVertexInput* cast_input=(PentaVertexInput*)cont_input->values; 510 for(i=0;i<numgrids;i++)this->values[i]=this->values[i]+scalar*(cast_input->values[i]);} 511 return; 508 512 default: 509 513 ISSMERROR("not implemented yet"); -
issm/trunk/src/c/objects/Materials/Matice.cpp
r5884 r6200 56 56 } 57 57 58 /*Get control_parameter*/ 59 if (iomodel->control_parameter) { 60 for(i=0;i<num_vertices;i++)nodeinputs[i]=iomodel->control_parameter[int(iomodel->elements[num_vertices*index+i]-1)]; 61 this->inputs->AddInput(new TriaVertexInput(ControlParameterEnum,nodeinputs)); 58 /*Control Inputs*/ 59 if (iomodel->control_analysis){ 60 switch(iomodel->control_type){ 61 case RheologyBbarEnum: 62 if (iomodel->rheology_B){ 63 for(i=0;i<num_vertices;i++)nodeinputs[i]=iomodel->rheology_B[int(iomodel->elements[num_vertices*index+i]-1)]; 64 this->inputs->AddInput(new ControlInput(RheologyBbarEnum,TriaVertexInputEnum,nodeinputs)); 65 } 66 break; 67 default: 68 /*Nothing*/; 69 } 62 70 } 63 71 } … … 82 90 } 83 91 84 /*Get control_parameter*/ 85 if (iomodel->control_parameter) { 86 for(i=0;i<num_vertices;i++)nodeinputs[i]=iomodel->control_parameter[int(iomodel->elements[num_vertices*index+i]-1)]; 87 this->inputs->AddInput(new PentaVertexInput(ControlParameterEnum,nodeinputs)); 88 } 89 } 90 /*Else*/ 91 else ISSMERROR(" Mesh type not supported yet!"); 92 /*Control Inputs*/ 93 if (iomodel->control_analysis){ 94 switch(iomodel->control_type){ 95 case RheologyBbarEnum: 96 if (iomodel->rheology_B){ 97 for(i=0;i<num_vertices;i++)nodeinputs[i]=iomodel->rheology_B[int(iomodel->elements[num_vertices*index+i]-1)]; 98 this->inputs->AddInput(new ControlInput(RheologyBEnum,PentaVertexInputEnum,nodeinputs)); 99 } 100 break; 101 } 102 } 103 } 104 else{ 105 ISSMERROR(" Mesh type not supported yet!"); 106 } 107 92 108 93 109 /*Hooks: */ … … 653 669 name==RheologyBEnum || 654 670 name==RheologyBbarEnum || 655 name==RheologyNEnum || 656 name==ControlParameterEnum 671 name==RheologyNEnum 657 672 ){ 658 673 return true; -
issm/trunk/src/c/objects/objects.h
r6165 r6200 51 51 #include "./Inputs/PentaVertexInput.h" 52 52 #include "./Inputs/TriaVertexInput.h" 53 #include "./Inputs/ControlInput.h" 53 54 54 55 /*ElementResults: */ -
issm/trunk/src/c/solutions/control_core.cpp
r5623 r6200 104 104 //OptimalSearch(&search_scalar,J+n,&optpars,&objectivefunctionC,&optargs); 105 105 106 _printf_("%s\n"," updating parameter using optimized search scalar..."); //true means update parameter and copy it onto ControlParameter input106 _printf_("%s\n"," updating parameter using optimized search scalar..."); //true means update save controls 107 107 InputControlUpdatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,search_scalar*optscal[n],true); 108 108 … … 123 123 if(!qmu_analysis){ //do not save this if we are running the control core from a qmu run! 124 124 InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_type); //the parameter itself! 125 InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,GradientEnum);126 125 femmodel->results->AddObject(new DoubleVecExternalResult(femmodel->results->Size()+1,JEnum,J,nsteps,1,0)); 127 126 femmodel->results->AddObject(new StringExternalResult(femmodel->results->Size()+1,ControlTypeEnum,EnumToString(control_type),1,0)); -
issm/trunk/src/c/solutions/gradient_core.cpp
r5578 r6200 32 32 if(verbose)_printf_("%s\n"," compute gradient:"); 33 33 Gradjx(&gradient, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters, control_type); 34 35 if(verbose)_printf_("%s\n"," retrieve old gradient:");36 GetVectorFromInputsx(&old_gradient, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters, OldGradientEnum,VertexEnum);37 34 38 35 if(control_steady)diagnostic_core(femmodel); 39 36 40 37 if (step>0 && search_scalar==0){ 41 _printf_("%s"," orthogonalization..."); 38 _printf_("%s"," orthogonalization...\n"); 39 if(verbose)_printf_("%s\n"," retrieve old gradient:"); 40 ControlInputGetGradientx(&old_gradient,femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters,control_type); 42 41 Orthx(&new_gradient,gradient,old_gradient); 42 VecFree(&old_gradient); 43 43 } 44 44 else{ 45 _printf_("%s"," normalizing directions... ");45 _printf_("%s"," normalizing directions...\n"); 46 46 Orthx(&new_gradient,gradient,NULL); 47 47 } 48 _printf_("%s\n"," done."); 49 50 /*point gradient and old_gradient to new_gradient: */ 51 VecFree(&gradient); gradient=new_gradient; 52 VecFree(&old_gradient); old_gradient=new_gradient; 48 VecFree(&gradient); 53 49 54 50 /*plug back into inputs: */ 55 InputUpdateFromVectorx(femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials, femmodel->parameters,gradient,GradientEnum,VertexEnum); 56 InputUpdateFromVectorx(femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials, femmodel->parameters,old_gradient,OldGradientEnum,VertexEnum); 57 //InputArtificialNoisex( femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials, femmodel->parameters,GradientEnum,-0.5,0.5); 51 ControlInputSetGradientx(femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials, femmodel->parameters,control_type,new_gradient); 58 52 59 53 /*Free ressources and return:*/ -
issm/trunk/src/c/solutions/objectivefunctionC.cpp
r5579 r6200 62 62 } 63 63 64 /*update parameter according to scalar: */ //false means: do not copy updated parameter onto ControlParameter input64 /*update parameter according to scalar: */ //false means: do not save control 65 65 InputControlUpdatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,search_scalar*optscal[n],false); 66 66 -
issm/trunk/src/m/enum/AbsoluteEnum.m
r6166 r6200 9 9 % macro=AbsoluteEnum() 10 10 11 macro=24 8;11 macro=249; -
issm/trunk/src/m/enum/AccumulationRateEnum.m
r6166 r6200 9 9 % macro=AccumulationRateEnum() 10 10 11 macro=11 7;11 macro=118; -
issm/trunk/src/m/enum/AdjointEnum.m
r6166 r6200 9 9 % macro=AdjointEnum() 10 10 11 macro=26 3;11 macro=264; -
issm/trunk/src/m/enum/AdjointpEnum.m
r6166 r6200 9 9 % macro=AdjointpEnum() 10 10 11 macro=12 1;11 macro=122; -
issm/trunk/src/m/enum/AdjointxEnum.m
r6166 r6200 9 9 % macro=AdjointxEnum() 10 10 11 macro=11 8;11 macro=119; -
issm/trunk/src/m/enum/AdjointyEnum.m
r6166 r6200 9 9 % macro=AdjointyEnum() 10 10 11 macro=1 19;11 macro=120; -
issm/trunk/src/m/enum/AdjointzEnum.m
r6166 r6200 9 9 % macro=AdjointzEnum() 10 10 11 macro=12 0;11 macro=121; -
issm/trunk/src/m/enum/AirEnum.m
r6166 r6200 9 9 % macro=AirEnum() 10 10 11 macro=11 5;11 macro=116; -
issm/trunk/src/m/enum/ArtDiffEnum.m
r6166 r6200 9 9 % macro=ArtDiffEnum() 10 10 11 macro=12 2;11 macro=123; -
issm/trunk/src/m/enum/BedEnum.m
r6166 r6200 9 9 % macro=BedEnum() 10 10 11 macro=12 3;11 macro=124; -
issm/trunk/src/m/enum/BedSlopeXEnum.m
r6166 r6200 9 9 % macro=BedSlopeXEnum() 10 10 11 macro=12 4;11 macro=125; -
issm/trunk/src/m/enum/BedSlopeYEnum.m
r6166 r6200 9 9 % macro=BedSlopeYEnum() 10 10 11 macro=12 5;11 macro=126; -
issm/trunk/src/m/enum/BetaEnum.m
r6166 r6200 9 9 % macro=BetaEnum() 10 10 11 macro=25 8;11 macro=259; -
issm/trunk/src/m/enum/BoolExternalResultEnum.m
r6166 r6200 9 9 % macro=BoolExternalResultEnum() 10 10 11 macro=22 2;11 macro=223; -
issm/trunk/src/m/enum/BoolParamEnum.m
r6139 r6200 9 9 % macro=BoolParamEnum() 10 10 11 macro=9 5;11 macro=96; -
issm/trunk/src/m/enum/BoundaryEnum.m
r6166 r6200 9 9 % macro=BoundaryEnum() 10 10 11 macro=12 6;11 macro=127; -
issm/trunk/src/m/enum/CflCoefficientEnum.m
r6166 r6200 9 9 % macro=CflCoefficientEnum() 10 10 11 macro=14 0;11 macro=141; -
issm/trunk/src/m/enum/CmGradientEnum.m
r6166 r6200 9 9 % macro=CmGradientEnum() 10 10 11 macro=2 59;11 macro=260; -
issm/trunk/src/m/enum/CmJumpEnum.m
r6166 r6200 9 9 % macro=CmJumpEnum() 10 10 11 macro=26 0;11 macro=261; -
issm/trunk/src/m/enum/CmMaxEnum.m
r6166 r6200 9 9 % macro=CmMaxEnum() 10 10 11 macro=26 1;11 macro=262; -
issm/trunk/src/m/enum/CmMinEnum.m
r6166 r6200 9 9 % macro=CmMinEnum() 10 10 11 macro=26 2;11 macro=263; -
issm/trunk/src/m/enum/CmNoiseDmpEnum.m
r6166 r6200 9 9 % macro=CmNoiseDmpEnum() 10 10 11 macro=1 29;11 macro=130; -
issm/trunk/src/m/enum/CmResponseEnum.m
r6166 r6200 9 9 % macro=CmResponseEnum() 10 10 11 macro=12 7;11 macro=128; -
issm/trunk/src/m/enum/CmResponsesEnum.m
r6166 r6200 9 9 % macro=CmResponsesEnum() 10 10 11 macro=12 8;11 macro=129; -
issm/trunk/src/m/enum/ColinearEnum.m
r6166 r6200 9 9 % macro=ColinearEnum() 10 10 11 macro=25 6;11 macro=257; -
issm/trunk/src/m/enum/ConnectivityEnum.m
r6166 r6200 9 9 % macro=ConnectivityEnum() 10 10 11 macro=26 6;11 macro=267; -
issm/trunk/src/m/enum/ConstantEnum.m
r6166 r6200 9 9 % macro=ConstantEnum() 10 10 11 macro=13 0;11 macro=131; -
issm/trunk/src/m/enum/ControlTypeEnum.m
r6166 r6200 9 9 % macro=ControlTypeEnum() 10 10 11 macro=13 1;11 macro=132; -
issm/trunk/src/m/enum/ConvergedEnum.m
r6166 r6200 9 9 % macro=ConvergedEnum() 10 10 11 macro=13 2;11 macro=133; -
issm/trunk/src/m/enum/DhDtEnum.m
r6166 r6200 9 9 % macro=DhDtEnum() 10 10 11 macro=13 3;11 macro=134; -
issm/trunk/src/m/enum/DoubleElementResultEnum.m
r6166 r6200 9 9 % macro=DoubleElementResultEnum() 10 10 11 macro=2 19;11 macro=220; -
issm/trunk/src/m/enum/DoubleExternalResultEnum.m
r6166 r6200 9 9 % macro=DoubleExternalResultEnum() 10 10 11 macro=22 3;11 macro=224; -
issm/trunk/src/m/enum/DoubleMatArrayParamEnum.m
r6139 r6200 9 9 % macro=DoubleMatArrayParamEnum() 10 10 11 macro=9 7;11 macro=98; -
issm/trunk/src/m/enum/DoubleMatExternalResultEnum.m
r6166 r6200 9 9 % macro=DoubleMatExternalResultEnum() 10 10 11 macro=22 5;11 macro=226; -
issm/trunk/src/m/enum/DoubleMatParamEnum.m
r6139 r6200 9 9 % macro=DoubleMatParamEnum() 10 10 11 macro=9 6;11 macro=97; -
issm/trunk/src/m/enum/DoubleParamEnum.m
r6139 r6200 9 9 % macro=DoubleParamEnum() 10 10 11 macro=9 8;11 macro=99; -
issm/trunk/src/m/enum/DoubleVecExternalResultEnum.m
r6166 r6200 9 9 % macro=DoubleVecExternalResultEnum() 10 10 11 macro=22 4;11 macro=225; -
issm/trunk/src/m/enum/DoubleVecParamEnum.m
r6139 r6200 9 9 % macro=DoubleVecParamEnum() 10 10 11 macro= 99;11 macro=100; -
issm/trunk/src/m/enum/DragCoefficientEnum.m
r6166 r6200 9 9 % macro=DragCoefficientEnum() 10 10 11 macro=13 4;11 macro=135; -
issm/trunk/src/m/enum/DragPEnum.m
r6166 r6200 9 9 % macro=DragPEnum() 10 10 11 macro=13 5;11 macro=136; -
issm/trunk/src/m/enum/DragQEnum.m
r6166 r6200 9 9 % macro=DragQEnum() 10 10 11 macro=13 6;11 macro=137; -
issm/trunk/src/m/enum/DragTypeEnum.m
r6166 r6200 9 9 % macro=DragTypeEnum() 10 10 11 macro=13 7;11 macro=138; -
issm/trunk/src/m/enum/DtEnum.m
r6166 r6200 9 9 % macro=DtEnum() 10 10 11 macro=13 8;11 macro=139; -
issm/trunk/src/m/enum/ElementOnBedEnum.m
r6166 r6200 9 9 % macro=ElementOnBedEnum() 10 10 11 macro=14 1;11 macro=142; -
issm/trunk/src/m/enum/ElementOnIceShelfEnum.m
r6166 r6200 9 9 % macro=ElementOnIceShelfEnum() 10 10 11 macro=14 2;11 macro=143; -
issm/trunk/src/m/enum/ElementOnSurfaceEnum.m
r6166 r6200 9 9 % macro=ElementOnSurfaceEnum() 10 10 11 macro=14 3;11 macro=144; -
issm/trunk/src/m/enum/ElementOnWaterEnum.m
r6166 r6200 9 9 % macro=ElementOnWaterEnum() 10 10 11 macro=14 4;11 macro=145; -
issm/trunk/src/m/enum/ElementResultEnum.m
r6166 r6200 9 9 % macro=ElementResultEnum() 10 10 11 macro=10 7;11 macro=108; -
issm/trunk/src/m/enum/EnumToString.m
r6166 r6200 105 105 case PentaVertexInputEnum(), string='PentaVertexInput'; return 106 106 case TriaVertexInputEnum(), string='TriaVertexInput'; return 107 case ControlInputEnum(), string='ControlInput'; return 107 108 case ParamEnum(), string='Param'; return 108 109 case BoolParamEnum(), string='BoolParam'; return … … 278 279 case OldGradientEnum(), string='OldGradient'; return 279 280 case ConnectivityEnum(), string='Connectivity'; return 280 case ControlParameterEnum(), string='ControlParameter'; return281 281 case ControlSteadyEnum(), string='ControlSteady'; return 282 282 case DakotaParameterEnum(), string='DakotaParameter'; return -
issm/trunk/src/m/enum/EpsVelEnum.m
r6166 r6200 9 9 % macro=EpsVelEnum() 10 10 11 macro=14 5;11 macro=146; -
issm/trunk/src/m/enum/ExtToIuEnum.m
r6166 r6200 9 9 % macro=ExtToIuEnum() 10 10 11 macro=15 3;11 macro=154; -
issm/trunk/src/m/enum/ExternalResultEnum.m
r6166 r6200 9 9 % macro=ExternalResultEnum() 10 10 11 macro=10 8;11 macro=109; -
issm/trunk/src/m/enum/FileParamEnum.m
r6166 r6200 9 9 % macro=FileParamEnum() 10 10 11 macro=10 2;11 macro=103; -
issm/trunk/src/m/enum/FillEnum.m
r6166 r6200 9 9 % macro=FillEnum() 10 10 11 macro=14 6;11 macro=147; -
issm/trunk/src/m/enum/FractionIncrementEnum.m
r6166 r6200 9 9 % macro=FractionIncrementEnum() 10 10 11 macro=14 7;11 macro=148; -
issm/trunk/src/m/enum/FrictionEnum.m
r6166 r6200 9 9 % macro=FrictionEnum() 10 10 11 macro=14 8;11 macro=149; -
issm/trunk/src/m/enum/GeographyEnum.m
r6166 r6200 9 9 % macro=GeographyEnum() 10 10 11 macro=11 0;11 macro=111; -
issm/trunk/src/m/enum/GeothermalFluxEnum.m
r6166 r6200 9 9 % macro=GeothermalFluxEnum() 10 10 11 macro=1 49;11 macro=150; -
issm/trunk/src/m/enum/GradientEnum.m
r6166 r6200 9 9 % macro=GradientEnum() 10 10 11 macro=26 4;11 macro=265; -
issm/trunk/src/m/enum/GravityEnum.m
r6166 r6200 9 9 % macro=GravityEnum() 10 10 11 macro=25 1;11 macro=252; -
issm/trunk/src/m/enum/IceEnum.m
r6166 r6200 9 9 % macro=IceEnum() 10 10 11 macro=11 4;11 macro=115; -
issm/trunk/src/m/enum/IceSheetEnum.m
r6166 r6200 9 9 % macro=IceSheetEnum() 10 10 11 macro=11 1;11 macro=112; -
issm/trunk/src/m/enum/IceShelfEnum.m
r6166 r6200 9 9 % macro=IceShelfEnum() 10 10 11 macro=11 2;11 macro=113; -
issm/trunk/src/m/enum/IntExternalResultEnum.m
r6166 r6200 9 9 % macro=IntExternalResultEnum() 10 10 11 macro=22 6;11 macro=227; -
issm/trunk/src/m/enum/IntParamEnum.m
r6139 r6200 9 9 % macro=IntParamEnum() 10 10 11 macro=10 0;11 macro=101; -
issm/trunk/src/m/enum/IntVecParamEnum.m
r6166 r6200 9 9 % macro=IntVecParamEnum() 10 10 11 macro=10 1;11 macro=102; -
issm/trunk/src/m/enum/InternalEnum.m
r6166 r6200 9 9 % macro=InternalEnum() 10 10 11 macro=15 0;11 macro=151; -
issm/trunk/src/m/enum/IntersectEnum.m
r6166 r6200 9 9 % macro=IntersectEnum() 10 10 11 macro=25 5;11 macro=256; -
issm/trunk/src/m/enum/IuToExtEnum.m
r6166 r6200 9 9 % macro=IuToExtEnum() 10 10 11 macro=15 2;11 macro=153; -
issm/trunk/src/m/enum/JEnum.m
r6166 r6200 9 9 % macro=JEnum() 10 10 11 macro=2 29;11 macro=230; -
issm/trunk/src/m/enum/KflagEnum.m
r6166 r6200 9 9 % macro=KflagEnum() 10 10 11 macro=15 1;11 macro=152; -
issm/trunk/src/m/enum/MassFluxEnum.m
r6166 r6200 9 9 % macro=MassFluxEnum() 10 10 11 macro=15 4;11 macro=155; -
issm/trunk/src/m/enum/MaxAbsVxEnum.m
r6166 r6200 9 9 % macro=MaxAbsVxEnum() 10 10 11 macro=2 39;11 macro=240; -
issm/trunk/src/m/enum/MaxAbsVyEnum.m
r6166 r6200 9 9 % macro=MaxAbsVyEnum() 10 10 11 macro=24 2;11 macro=243; -
issm/trunk/src/m/enum/MaxAbsVzEnum.m
r6166 r6200 9 9 % macro=MaxAbsVzEnum() 10 10 11 macro=24 5;11 macro=246; -
issm/trunk/src/m/enum/MaxPenetrationEnum.m
r6166 r6200 9 9 % macro=MaxPenetrationEnum() 10 10 11 macro=16 1;11 macro=162; -
issm/trunk/src/m/enum/MaxVelEnum.m
r6166 r6200 9 9 % macro=MaxVelEnum() 10 10 11 macro=23 6;11 macro=237; -
issm/trunk/src/m/enum/MaxVxEnum.m
r6166 r6200 9 9 % macro=MaxVxEnum() 10 10 11 macro=23 8;11 macro=239; -
issm/trunk/src/m/enum/MaxVyEnum.m
r6166 r6200 9 9 % macro=MaxVyEnum() 10 10 11 macro=24 1;11 macro=242; -
issm/trunk/src/m/enum/MaxVzEnum.m
r6166 r6200 9 9 % macro=MaxVzEnum() 10 10 11 macro=24 4;11 macro=245; -
issm/trunk/src/m/enum/MeanVelEnum.m
r6166 r6200 9 9 % macro=MeanVelEnum() 10 10 11 macro=16 2;11 macro=163; -
issm/trunk/src/m/enum/MelangeEnum.m
r6166 r6200 9 9 % macro=MelangeEnum() 10 10 11 macro=11 6;11 macro=117; -
issm/trunk/src/m/enum/MeltingOffsetEnum.m
r6166 r6200 9 9 % macro=MeltingOffsetEnum() 10 10 11 macro=16 3;11 macro=164; -
issm/trunk/src/m/enum/MeltingRateEnum.m
r6166 r6200 9 9 % macro=MeltingRateEnum() 10 10 11 macro=16 4;11 macro=165; -
issm/trunk/src/m/enum/MinVelEnum.m
r6166 r6200 9 9 % macro=MinVelEnum() 10 10 11 macro=23 5;11 macro=236; -
issm/trunk/src/m/enum/MinVxEnum.m
r6166 r6200 9 9 % macro=MinVxEnum() 10 10 11 macro=23 7;11 macro=238; -
issm/trunk/src/m/enum/MinVyEnum.m
r6166 r6200 9 9 % macro=MinVyEnum() 10 10 11 macro=24 0;11 macro=241; -
issm/trunk/src/m/enum/MinVzEnum.m
r6166 r6200 9 9 % macro=MinVzEnum() 10 10 11 macro=24 3;11 macro=244; -
issm/trunk/src/m/enum/MiniEnum.m
r6166 r6200 9 9 % macro=MiniEnum() 10 10 11 macro=21 8;11 macro=219; -
issm/trunk/src/m/enum/MisfitEnum.m
r6166 r6200 9 9 % macro=MisfitEnum() 10 10 11 macro=16 5;11 macro=166; -
issm/trunk/src/m/enum/MixedLayerCapacityEnum.m
r6166 r6200 9 9 % macro=MixedLayerCapacityEnum() 10 10 11 macro=25 3;11 macro=254; -
issm/trunk/src/m/enum/NodeOnBedEnum.m
r6166 r6200 9 9 % macro=NodeOnBedEnum() 10 10 11 macro=16 6;11 macro=167; -
issm/trunk/src/m/enum/NodeOnIceSheetEnum.m
r6166 r6200 9 9 % macro=NodeOnIceSheetEnum() 10 10 11 macro=16 7;11 macro=168; -
issm/trunk/src/m/enum/NodeOnIceShelfEnum.m
r6166 r6200 9 9 % macro=NodeOnIceShelfEnum() 10 10 11 macro=16 8;11 macro=169; -
issm/trunk/src/m/enum/NodeOnSurfaceEnum.m
r6166 r6200 9 9 % macro=NodeOnSurfaceEnum() 10 10 11 macro=1 69;11 macro=170; -
issm/trunk/src/m/enum/NumberNodeToElementConnectivityEnum.m
r6166 r6200 9 9 % macro=NumberNodeToElementConnectivityEnum() 10 10 11 macro=17 0;11 macro=171; -
issm/trunk/src/m/enum/OldGradientEnum.m
r6166 r6200 9 9 % macro=OldGradientEnum() 10 10 11 macro=26 5;11 macro=266; -
issm/trunk/src/m/enum/OutputFrequencyEnum.m
r6166 r6200 9 9 % macro=OutputFrequencyEnum() 10 10 11 macro=23 4;11 macro=235; -
issm/trunk/src/m/enum/P0Enum.m
r6166 r6200 9 9 % macro=P0Enum() 10 10 11 macro=21 5;11 macro=216; -
issm/trunk/src/m/enum/P1DGEnum.m
r6166 r6200 9 9 % macro=P1DGEnum() 10 10 11 macro=21 7;11 macro=218; -
issm/trunk/src/m/enum/P1Enum.m
r6166 r6200 9 9 % macro=P1Enum() 10 10 11 macro=21 6;11 macro=217; -
issm/trunk/src/m/enum/ParamEnum.m
r6139 r6200 9 9 % macro=ParamEnum() 10 10 11 macro=9 4;11 macro=95; -
issm/trunk/src/m/enum/PatchEnum.m
r6166 r6200 9 9 % macro=PatchEnum() 10 10 11 macro=23 0;11 macro=231; -
issm/trunk/src/m/enum/PatchNodesEnum.m
r6166 r6200 9 9 % macro=PatchNodesEnum() 10 10 11 macro=23 2;11 macro=233; -
issm/trunk/src/m/enum/PatchVerticesEnum.m
r6166 r6200 9 9 % macro=PatchVerticesEnum() 10 10 11 macro=23 1;11 macro=232; -
issm/trunk/src/m/enum/PenaltyOffsetEnum.m
r6166 r6200 9 9 % macro=PenaltyOffsetEnum() 10 10 11 macro=17 1;11 macro=172; -
issm/trunk/src/m/enum/PentaVertexElementResultEnum.m
r6166 r6200 9 9 % macro=PentaVertexElementResultEnum() 10 10 11 macro=22 1;11 macro=222; -
issm/trunk/src/m/enum/PetscMatParamEnum.m
r6166 r6200 9 9 % macro=PetscMatParamEnum() 10 10 11 macro=10 3;11 macro=104; -
issm/trunk/src/m/enum/PetscVecExternalResultEnum.m
r6166 r6200 9 9 % macro=PetscVecExternalResultEnum() 10 10 11 macro=22 7;11 macro=228; -
issm/trunk/src/m/enum/PetscVecParamEnum.m
r6166 r6200 9 9 % macro=PetscVecParamEnum() 10 10 11 macro=10 4;11 macro=105; -
issm/trunk/src/m/enum/PflagEnum.m
r6166 r6200 9 9 % macro=PflagEnum() 10 10 11 macro=17 2;11 macro=173; -
issm/trunk/src/m/enum/PressureEnum.m
r6166 r6200 9 9 % macro=PressureEnum() 10 10 11 macro=17 3;11 macro=174; -
issm/trunk/src/m/enum/PressureOldEnum.m
r6166 r6200 9 9 % macro=PressureOldEnum() 10 10 11 macro=17 4;11 macro=175; -
issm/trunk/src/m/enum/QmuPressureEnum.m
r6166 r6200 9 9 % macro=QmuPressureEnum() 10 10 11 macro=17 5;11 macro=176; -
issm/trunk/src/m/enum/QmuVxEnum.m
r6166 r6200 9 9 % macro=QmuVxEnum() 10 10 11 macro=20 0;11 macro=201; -
issm/trunk/src/m/enum/QmuVyEnum.m
r6166 r6200 9 9 % macro=QmuVyEnum() 10 10 11 macro=20 5;11 macro=206; -
issm/trunk/src/m/enum/QmuVzEnum.m
r6166 r6200 9 9 % macro=QmuVzEnum() 10 10 11 macro=21 3;11 macro=214; -
issm/trunk/src/m/enum/RelativeEnum.m
r6166 r6200 9 9 % macro=RelativeEnum() 10 10 11 macro=24 6;11 macro=247; -
issm/trunk/src/m/enum/ResetPenaltiesEnum.m
r6166 r6200 9 9 % macro=ResetPenaltiesEnum() 10 10 11 macro=17 6;11 macro=177; -
issm/trunk/src/m/enum/ResidualEnum.m
r6166 r6200 9 9 % macro=ResidualEnum() 10 10 11 macro=24 7;11 macro=248; -
issm/trunk/src/m/enum/RheologyBEnum.m
r6166 r6200 9 9 % macro=RheologyBEnum() 10 10 11 macro=17 7;11 macro=178; -
issm/trunk/src/m/enum/RheologyBbarEnum.m
r6166 r6200 9 9 % macro=RheologyBbarEnum() 10 10 11 macro=17 8;11 macro=179; -
issm/trunk/src/m/enum/RheologyNEnum.m
r6166 r6200 9 9 % macro=RheologyNEnum() 10 10 11 macro=1 79;11 macro=180; -
issm/trunk/src/m/enum/RhoIceEnum.m
r6166 r6200 9 9 % macro=RhoIceEnum() 10 10 11 macro=2 49;11 macro=250; -
issm/trunk/src/m/enum/RhoWaterEnum.m
r6166 r6200 9 9 % macro=RhoWaterEnum() 10 10 11 macro=25 0;11 macro=251; -
issm/trunk/src/m/enum/SegmentOnIceShelfEnum.m
r6166 r6200 9 9 % macro=SegmentOnIceShelfEnum() 10 10 11 macro=18 0;11 macro=181; -
issm/trunk/src/m/enum/SeparateEnum.m
r6166 r6200 9 9 % macro=SeparateEnum() 10 10 11 macro=25 7;11 macro=258; -
issm/trunk/src/m/enum/SpcEnum.m
r6166 r6200 9 9 % macro=SpcEnum() 10 10 11 macro=1 09;11 macro=110; -
issm/trunk/src/m/enum/StabilizeConstraintsEnum.m
r6166 r6200 9 9 % macro=StabilizeConstraintsEnum() 10 10 11 macro=18 1;11 macro=182; -
issm/trunk/src/m/enum/StokesReconditioningEnum.m
r6166 r6200 9 9 % macro=StokesReconditioningEnum() 10 10 11 macro=18 2;11 macro=183; -
issm/trunk/src/m/enum/StringArrayParamEnum.m
r6166 r6200 9 9 % macro=StringArrayParamEnum() 10 10 11 macro=10 5;11 macro=106; -
issm/trunk/src/m/enum/StringExternalResultEnum.m
r6166 r6200 9 9 % macro=StringExternalResultEnum() 10 10 11 macro=22 8;11 macro=229; -
issm/trunk/src/m/enum/StringParamEnum.m
r6166 r6200 9 9 % macro=StringParamEnum() 10 10 11 macro=10 6;11 macro=107; -
issm/trunk/src/m/enum/StringToEnum.m
r6166 r6200 103 103 elseif (strcmpi(name,'PentaVertexInput')), enum=PentaVertexInputEnum(); return 104 104 elseif (strcmpi(name,'TriaVertexInput')), enum=TriaVertexInputEnum(); return 105 elseif (strcmpi(name,'ControlInput')), enum=ControlInputEnum(); return 105 106 elseif (strcmpi(name,'Param')), enum=ParamEnum(); return 106 107 elseif (strcmpi(name,'BoolParam')), enum=BoolParamEnum(); return … … 276 277 elseif (strcmpi(name,'OldGradient')), enum=OldGradientEnum(); return 277 278 elseif (strcmpi(name,'Connectivity')), enum=ConnectivityEnum(); return 278 elseif (strcmpi(name,'ControlParameter')), enum=ControlParameterEnum(); return279 279 elseif (strcmpi(name,'ControlSteady')), enum=ControlSteadyEnum(); return 280 280 elseif (strcmpi(name,'DakotaParameter')), enum=DakotaParameterEnum(); return -
issm/trunk/src/m/enum/SurfaceAbsVelMisfitEnum.m
r6166 r6200 9 9 % macro=SurfaceAbsVelMisfitEnum() 10 10 11 macro=15 6;11 macro=157; -
issm/trunk/src/m/enum/SurfaceAreaEnum.m
r6166 r6200 9 9 % macro=SurfaceAreaEnum() 10 10 11 macro=18 3;11 macro=184; -
issm/trunk/src/m/enum/SurfaceAverageVelMisfitEnum.m
r6166 r6200 9 9 % macro=SurfaceAverageVelMisfitEnum() 10 10 11 macro=16 0;11 macro=161; -
issm/trunk/src/m/enum/SurfaceEnum.m
r6166 r6200 9 9 % macro=SurfaceEnum() 10 10 11 macro=18 4;11 macro=185; -
issm/trunk/src/m/enum/SurfaceLogVelMisfitEnum.m
r6166 r6200 9 9 % macro=SurfaceLogVelMisfitEnum() 10 10 11 macro=15 8;11 macro=159; -
issm/trunk/src/m/enum/SurfaceLogVxVyMisfitEnum.m
r6166 r6200 9 9 % macro=SurfaceLogVxVyMisfitEnum() 10 10 11 macro=1 59;11 macro=160; -
issm/trunk/src/m/enum/SurfaceRelVelMisfitEnum.m
r6166 r6200 9 9 % macro=SurfaceRelVelMisfitEnum() 10 10 11 macro=15 7;11 macro=158; -
issm/trunk/src/m/enum/SurfaceSlopeXEnum.m
r6166 r6200 9 9 % macro=SurfaceSlopeXEnum() 10 10 11 macro=18 5;11 macro=186; -
issm/trunk/src/m/enum/SurfaceSlopeYEnum.m
r6166 r6200 9 9 % macro=SurfaceSlopeYEnum() 10 10 11 macro=18 6;11 macro=187; -
issm/trunk/src/m/enum/TemperatureEnum.m
r6166 r6200 9 9 % macro=TemperatureEnum() 10 10 11 macro=18 7;11 macro=188; -
issm/trunk/src/m/enum/TemperatureOldEnum.m
r6166 r6200 9 9 % macro=TemperatureOldEnum() 10 10 11 macro=1 89;11 macro=190; -
issm/trunk/src/m/enum/TemporaryTemperatureEnum.m
r6166 r6200 9 9 % macro=TemporaryTemperatureEnum() 10 10 11 macro=18 8;11 macro=189; -
issm/trunk/src/m/enum/ThermalConductivityEnum.m
r6166 r6200 9 9 % macro=ThermalConductivityEnum() 10 10 11 macro=25 2;11 macro=253; -
issm/trunk/src/m/enum/ThermalExchangeVelocityEnum.m
r6166 r6200 9 9 % macro=ThermalExchangeVelocityEnum() 10 10 11 macro=25 4;11 macro=255; -
issm/trunk/src/m/enum/ThicknessAbsMisfitEnum.m
r6166 r6200 9 9 % macro=ThicknessAbsMisfitEnum() 10 10 11 macro=15 5;11 macro=156; -
issm/trunk/src/m/enum/ThicknessEnum.m
r6166 r6200 9 9 % macro=ThicknessEnum() 10 10 11 macro=19 0;11 macro=191; -
issm/trunk/src/m/enum/ThicknessObsEnum.m
r6166 r6200 9 9 % macro=ThicknessObsEnum() 10 10 11 macro=19 1;11 macro=192; -
issm/trunk/src/m/enum/TimeAdaptEnum.m
r6166 r6200 9 9 % macro=TimeAdaptEnum() 10 10 11 macro=1 39;11 macro=140; -
issm/trunk/src/m/enum/TimeEnum.m
r6166 r6200 9 9 % macro=TimeEnum() 10 10 11 macro=23 3;11 macro=234; -
issm/trunk/src/m/enum/TriaVertexElementResultEnum.m
r6166 r6200 9 9 % macro=TriaVertexElementResultEnum() 10 10 11 macro=22 0;11 macro=221; -
issm/trunk/src/m/enum/TypeEnum.m
r6166 r6200 9 9 % macro=TypeEnum() 10 10 11 macro=19 2;11 macro=193; -
issm/trunk/src/m/enum/VelEnum.m
r6166 r6200 9 9 % macro=VelEnum() 10 10 11 macro=19 3;11 macro=194; -
issm/trunk/src/m/enum/VelObsEnum.m
r6166 r6200 9 9 % macro=VelObsEnum() 10 10 11 macro=19 4;11 macro=195; -
issm/trunk/src/m/enum/ViscosityOvershootEnum.m
r6166 r6200 9 9 % macro=ViscosityOvershootEnum() 10 10 11 macro=19 5;11 macro=196; -
issm/trunk/src/m/enum/VxAverageEnum.m
r6166 r6200 9 9 % macro=VxAverageEnum() 10 10 11 macro=19 6;11 macro=197; -
issm/trunk/src/m/enum/VxEnum.m
r6166 r6200 9 9 % macro=VxEnum() 10 10 11 macro=19 7;11 macro=198; -
issm/trunk/src/m/enum/VxObsEnum.m
r6166 r6200 9 9 % macro=VxObsEnum() 10 10 11 macro=19 8;11 macro=199; -
issm/trunk/src/m/enum/VxOldEnum.m
r6166 r6200 9 9 % macro=VxOldEnum() 10 10 11 macro= 199;11 macro=200; -
issm/trunk/src/m/enum/VyAverageEnum.m
r6166 r6200 9 9 % macro=VyAverageEnum() 10 10 11 macro=20 1;11 macro=202; -
issm/trunk/src/m/enum/VyEnum.m
r6166 r6200 9 9 % macro=VyEnum() 10 10 11 macro=20 2;11 macro=203; -
issm/trunk/src/m/enum/VyObsEnum.m
r6166 r6200 9 9 % macro=VyObsEnum() 10 10 11 macro=20 3;11 macro=204; -
issm/trunk/src/m/enum/VyOldEnum.m
r6166 r6200 9 9 % macro=VyOldEnum() 10 10 11 macro=20 4;11 macro=205; -
issm/trunk/src/m/enum/VzAverageEnum.m
r6166 r6200 9 9 % macro=VzAverageEnum() 10 10 11 macro=20 6;11 macro=207; -
issm/trunk/src/m/enum/VzEnum.m
r6166 r6200 9 9 % macro=VzEnum() 10 10 11 macro=20 7;11 macro=208; -
issm/trunk/src/m/enum/VzMacAyealEnum.m
r6166 r6200 9 9 % macro=VzMacAyealEnum() 10 10 11 macro=21 0;11 macro=211; -
issm/trunk/src/m/enum/VzObsEnum.m
r6166 r6200 9 9 % macro=VzObsEnum() 10 10 11 macro=20 8;11 macro=209; -
issm/trunk/src/m/enum/VzOldEnum.m
r6166 r6200 9 9 % macro=VzOldEnum() 10 10 11 macro=2 09;11 macro=210; -
issm/trunk/src/m/enum/VzPattynEnum.m
r6166 r6200 9 9 % macro=VzPattynEnum() 10 10 11 macro=21 1;11 macro=212; -
issm/trunk/src/m/enum/VzStokesEnum.m
r6166 r6200 9 9 % macro=VzStokesEnum() 10 10 11 macro=21 2;11 macro=213; -
issm/trunk/src/m/enum/WaterEnum.m
r6166 r6200 9 9 % macro=WaterEnum() 10 10 11 macro=11 3;11 macro=114; -
issm/trunk/src/m/enum/WeightsEnum.m
r6166 r6200 9 9 % macro=WeightsEnum() 10 10 11 macro=21 4;11 macro=215; -
issm/trunk/src/m/solutions/control_core.m
r5466 r6200 84 84 %Some results not computed by diagnostic or steadystate 85 85 femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,control_type); 86 femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,GradientEnum);87 86 femmodel.results=AddExternalResult(femmodel.results,JEnum,J); 88 87 femmodel.results=AddExternalResult(femmodel.results,ControlTypeEnum,control_type); -
issm/trunk/src/m/solutions/gradient_core.m
r5466 r6200 25 25 control_steady=femmodel.parameters.ControlSteady; 26 26 27 displaystring(verbose,' \n%s',[' compute gradient...']);27 displaystring(verbose,'%s\n',[' compute gradient...']); 28 28 grad=Gradj(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 29 29 30 displaystring(verbose,'\n%s',[' retrieve old gradient...']);31 old_gradient=GetVectorFromInputs(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,OldGradientEnum,VertexEnum);32 30 33 31 if control_steady; … … 36 34 37 35 if (step>1 && search_scalar==0), 38 displaystring(verbose,'\n%s',[' orthogonalization...']); 36 displaystring(verbose,'%s\n',[' orthogonalization...']); 37 displaystring(verbose,'%s\n',[' retrieve old gradient...']); 38 old_gradient=ControlInputGetGradient(femmodel.elements,femmodel.nodes, femmodel.vertices,femmodel.loads, femmodel.materials,femmodel.parameters,control_type); 39 39 new_gradient=Orth(grad,old_gradient); 40 40 else 41 displaystring(verbose,' \n%s',[' normalizing direction...']);41 displaystring(verbose,'%s\n',[' normalizing direction...']); 42 42 new_gradient=Orth(grad,[]); 43 43 end 44 displaystring(verbose,'\n%s',[' done...']);45 46 %point gradient and old_gradient to new_gradient:47 grad=new_gradient;48 old_gradient=new_gradient;49 44 50 45 %plug back into inputs: 51 [femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters]=InputUpdateFromVector(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,grad,GradientEnum,VertexEnum); 52 [femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters]=InputUpdateFromVector(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,old_gradient,OldGradientEnum,VertexEnum); 46 [femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters]=ControlInputSetGradient(femmodel.elements,femmodel.nodes, femmodel.vertices,femmodel.loads, femmodel.materials, femmodel.parameters,control_type,new_gradient); -
issm/trunk/src/mex/Makefile.am
r6130 r6200 14 14 ConfigureObjects \ 15 15 ControlOptimization\ 16 ControlInputGetGradient\ 17 ControlInputSetGradient\ 16 18 ContourToMesh \ 17 19 ContourToNodes \ … … 128 130 ControlOptimization/ControlOptimization.h 129 131 132 ControlInputGetGradient_SOURCES = ControlInputGetGradient/ControlInputGetGradient.cpp\ 133 ControlInputGetGradient/ControlInputGetGradient.h 134 135 ControlInputSetGradient_SOURCES = ControlInputSetGradient/ControlInputSetGradient.cpp\ 136 ControlInputSetGradient/ControlInputSetGradient.h 137 130 138 InputControlUpdate_SOURCES = InputControlUpdate/InputControlUpdate.cpp\ 131 139 InputControlUpdate/InputControlUpdate.h
Note:
See TracChangeset
for help on using the changeset viewer.