Changeset 8601
- Timestamp:
- 06/10/11 13:44:02 (14 years ago)
- Location:
- issm/trunk/src/c
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
r8330 r8601 23 23 if(iomodel->control_analysis){ 24 24 25 /*How many controls ?*/25 /*How many controls and how many responses?*/ 26 26 parameters->AddObject(new IntParam(NumControlsEnum,iomodel->num_control_type)); 27 parameters->AddObject(new IntParam(NumResponsesEnum,iomodel->num_cm_responses)); 27 28 28 29 /*What control type?*/ … … 52 53 IoModelFetchData(&iomodel->maxiter,NULL,NULL,iomodel_handle,"maxiter"); 53 54 54 parameters->AddObject(new DoubleVecParam(CmResponsesEnum,iomodel->cm_responses,iomodel->nsteps)); 55 parameters->AddObject(new DoubleMatParam(OptScalEnum,iomodel->optscal,iomodel->nsteps,iomodel->num_control_type)); 56 parameters->AddObject(new DoubleMatParam(CmResponsesEnum,iomodel->cm_responses,iomodel->nsteps,iomodel->num_cm_responses)); 55 57 parameters->AddObject(new DoubleVecParam(CmJumpEnum,iomodel->cm_jump,iomodel->nsteps)); 56 parameters->AddObject(new DoubleMatParam(OptScalEnum,iomodel->optscal,iomodel->nsteps,iomodel->num_control_type));57 58 parameters->AddObject(new DoubleVecParam(MaxIterEnum,iomodel->maxiter,iomodel->nsteps)); 58 59 -
issm/trunk/src/c/objects/Elements/Penta.cpp
r8592 r8601 6295 6295 name==VzObsEnum || 6296 6296 name==TemperatureEnum || 6297 name==CmResponseEnum ||6298 6297 name==DragCoefficientEnum || 6299 6298 name==GradientEnum || -
issm/trunk/src/c/objects/Elements/Tria.cpp
r8596 r8601 1650 1650 1651 1651 /*Intermediaries */ 1652 int i,ig,response; 1652 int i,ig; 1653 int *responses=NULL; 1654 int response; 1653 1655 double Jdet; 1654 1656 double obs_velocity_mag,velocity_mag; … … 1667 1669 this->parameters->FindParam(&meanvel,MeanVelEnum); 1668 1670 this->parameters->FindParam(&epsvel,EpsVelEnum); 1671 this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum); response=responses[0]; 1669 1672 Input* weights_input=inputs->GetInput(WeightsEnum); _assert_(weights_input); 1670 1673 Input* vx_input =inputs->GetInput(VxEnum); _assert_(vx_input); … … 1673 1676 Input* vyobs_input =inputs->GetInput(VyObsEnum); _assert_(vyobs_input); 1674 1677 1675 inputs->GetParameterValue(&response,CmResponseEnum);1676 1678 if(response==SurfaceAverageVelMisfitEnum) inputs->GetParameterValue(&S,SurfaceAreaEnum); 1677 1679 … … 1796 1798 /*Clean up and return*/ 1797 1799 delete gauss; 1800 xfree((void**)&responses); 1798 1801 return pe; 1799 1802 } … … 1803 1806 1804 1807 /*Intermediaries */ 1805 int i,ig,response; 1808 int i,ig; 1809 int *responses=NULL; 1810 int response; 1806 1811 double Jdet; 1807 1812 double obs_velocity_mag,velocity_mag; … … 1820 1825 this->parameters->FindParam(&meanvel,MeanVelEnum); 1821 1826 this->parameters->FindParam(&epsvel,EpsVelEnum); 1827 this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum); response=responses[0]; 1822 1828 Input* weights_input=inputs->GetInput(WeightsEnum); _assert_(weights_input); 1823 1829 Input* vx_input =inputs->GetInput(VxEnum); _assert_(vx_input); … … 1826 1832 Input* vyobs_input =inputs->GetInput(VyObsEnum); _assert_(vyobs_input); 1827 1833 1828 inputs->GetParameterValue(&response,CmResponseEnum);1829 1834 if(response==SurfaceAverageVelMisfitEnum) inputs->GetParameterValue(&S,SurfaceAreaEnum); 1830 1835 … … 1949 1954 /*Clean up and return*/ 1950 1955 delete gauss; 1956 xfree((void**)&responses); 1951 1957 return pe; 1952 1958 } … … 4103 4109 name==VxObsEnum || 4104 4110 name==VyObsEnum || 4105 name==CmResponseEnum ||4106 4111 name==DragCoefficientEnum || 4107 4112 name==GradientEnum || -
issm/trunk/src/c/objects/OptArgs.h
r4540 r8601 9 9 10 10 #include "mex.h" 11 12 11 struct OptArgs{ 13 14 12 char* function_name; 15 13 mxArray* femmodel; 16 mxArray* n;14 }; 17 15 18 };19 16 #else 17 20 18 class Model; 21 19 struct OptArgs{ 22 20 FemModel* femmodel; 23 int n;24 21 }; 25 22 #endif -
issm/trunk/src/c/objects/objects.h
r8592 r8601 125 125 #include "./Params/IntParam.h" 126 126 #include "./Params/IntVecParam.h" 127 #include "./Params/IntMatParam.h" 127 128 #include "./Params/FileParam.h" 128 129 #include "./Params/Param.h" -
issm/trunk/src/c/shared/Numerics/OptFunc.cpp
r6412 r8601 20 20 double J; 21 21 22 mxArray* inputs[ 3];22 mxArray* inputs[2]; 23 23 mxArray* psearch_scalar=NULL; 24 24 mxArray* mxJ=NULL; … … 27 27 inputs[0]=psearch_scalar; 28 28 inputs[1]=optargs->femmodel; 29 inputs[2]=optargs->n;30 29 31 mexCallMATLAB( 1, &mxJ, 3,(mxArray**)inputs, optargs->function_name);30 mexCallMATLAB(1,&mxJ,2,(mxArray**)inputs, optargs->function_name); 32 31 33 32 /*extract misfit from mxArray*/ -
issm/trunk/src/c/solutions/control_core.cpp
r8224 r8601 17 17 18 18 /*parameters: */ 19 int num_controls ;19 int num_controls,num_responses; 20 20 int nsteps; 21 21 double eps_cm; … … 29 29 int* control_type = NULL; 30 30 double* responses=NULL; 31 int* step_responses=NULL; 31 32 double* maxiter=NULL; 32 33 double* cm_jump=NULL; 33 34 34 35 35 /*intermediary: */ … … 46 46 47 47 /*Recover parameters used throughout the solution:{{{1*/ 48 femmodel->parameters->FindParam(&num_controls,NumControlsEnum); 49 femmodel->parameters->FindParam(&num_responses,NumResponsesEnum); 50 femmodel->parameters->FindParam(&control_type,NULL,ControlTypeEnum); 51 femmodel->parameters->FindParam(&responses,NULL,NULL,CmResponsesEnum); 48 52 femmodel->parameters->FindParam(&nsteps,NStepsEnum); 49 femmodel->parameters->FindParam(&num_controls,NumControlsEnum);50 femmodel->parameters->FindParam(&control_type,NULL,ControlTypeEnum);51 femmodel->parameters->FindParam(&responses,NULL,CmResponsesEnum);52 53 femmodel->parameters->FindParam(&maxiter,NULL,MaxIterEnum); 53 54 femmodel->parameters->FindParam(&cm_jump,NULL,CmJumpEnum); … … 71 72 /*Initialize responses: */ 72 73 J=(double*)xmalloc(nsteps*sizeof(double)); 74 step_responses=(int*)xmalloc(num_responses*sizeof(double)); 73 75 74 76 /*Initialize some of the BrentSearch arguments: */ … … 81 83 /*Display info*/ 82 84 _printf_(VerboseControl(),"\n%s%i%s%i\n"," control method step ",n+1,"/",nsteps); 83 InputUpdateFromConstantx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,(int)responses[n],CmResponseEnum); 85 for(i=0;i<num_responses;i++) step_responses[i]=(int)responses[n*num_responses+i]; 86 femmodel->parameters->SetParam(step_responses,1,num_responses,StepResponsesEnum); 84 87 85 88 /*In case we are running a steady state control method, compute new temperature field using new parameter distribution: */ … … 98 101 99 102 _printf_(VerboseControl(),"%s\n"," optimizing along gradient direction"); 100 opt args.n=n; optpars.maxiter=(int)maxiter[n]; optpars.cm_jump=cm_jump[n];103 optpars.maxiter=(int)maxiter[n]; optpars.cm_jump=cm_jump[n]; 101 104 BrentSearch(&search_scalar,J+n,&optpars,&objectivefunctionC,&optargs); 102 105 //OptimalSearch(&search_scalar,J+n,&optpars,&objectivefunctionC,&optargs); … … 129 132 xfree((void**)&control_type); 130 133 xfree((void**)&responses); 134 xfree((void**)&step_responses); 131 135 xfree((void**)&maxiter); 132 136 xfree((void**)&cm_jump); -
issm/trunk/src/c/solutions/objectivefunctionC.cpp
r8287 r8601 25 25 26 26 /*output: */ 27 double J ;27 double J=0,Jplus; 28 28 29 29 /*parameters: */ 30 FemModel *femmodel = NULL; 31 int n; 32 double *responses = NULL; 33 int solution_type; 34 int analysis_type; 30 int num_responses; 31 int solution_type,analysis_type; 35 32 bool isstokes = false; 36 33 bool conserve_loads = true; 34 int *responses = NULL; 35 FemModel *femmodel = NULL; 37 36 38 37 /*Recover finite element model: */ … … 40 39 41 40 /*Recover parameters: */ 42 n=optargs->n; 43 44 femmodel->parameters->FindParam(&responses,NULL,CmResponsesEnum); 41 femmodel->parameters->FindParam(&num_responses,NumResponsesEnum); 42 femmodel->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum); 45 43 femmodel->parameters->FindParam(&isstokes,IsStokesEnum); 46 44 femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum); … … 76 74 77 75 /*Compute misfit for this velocity field.*/ 78 CostFunctionx( &J, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters,(int)responses[n]); 76 for(int i=0;i<num_responses;i++){ 77 CostFunctionx(&Jplus, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters,responses[i]); 78 J+=Jplus; 79 } 79 80 80 81 /*Free ressources:*/
Note:
See TracChangeset
for help on using the changeset viewer.