Changeset 4537
- Timestamp:
- 07/12/10 16:36:46 (15 years ago)
- Location:
- issm/trunk/src/m/solutions
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/solutions/control_core.m
r4535 r4537 28 28 options.MaxIter=femmodel.parameters.MaxIter; 29 29 30 %Initialize misfits with a vector of zeros 31 J=zeros(nsteps,1); 32 30 33 for n=1:nsteps, 31 34 … … 48 51 49 52 displaystring(verbose,'\n%s',[' optimizing along gradient direction...']); 50 [search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,femmodel,param_g,c(n).grad_g,n,femmodel.parameters);53 [search_scalar J(n)]=ControlOptimization('objectivefunctionC',0,1,options,femmodel,n,femmodel.parameters); 51 54 52 displaystring(verbose,'\n%s',[' updating parameter using optimized search scalar...']); 53 param_g=param_g+search_scalar*femmodel.parameters.Optscal(n)*grad_g; 55 displaystring('\n%s',[' updating parameter using optimized search scalar:']); 56 scalar=search_scalar*optscal(n); 57 femmodel.elements=InputAXPY(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,control_type,scalar,ControlParameterEnum); 54 58 55 displaystring( verbose,'\n%s',[' constraining the new distribution...']);56 param_g=ControlConstrain(param_g,femmodel.parameters);59 displaystring('\n%s',[' constraning the new distribution...']); 60 [femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters]=InputControlConstrain(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,control_type,cm_min,cm_max); 57 61 58 disp([' value of misfit J after optimization #' num2str(n) ':' num2str(c(n).J)]); 62 displaystring('\n%s',[' save new parameter...']); 63 femmodel.elements=InputDuplicate(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,control_type,ControlParameterEnum); 64 65 disp([' value of misfit J after optimization #' num2str(n) ':' num2str(J(n))]); 59 66 60 67 %Has convergence been reached? -
issm/trunk/src/m/solutions/controlconvergence.m
r4134 r4537 1 function converge d=controlconvergence(J,fit,eps_cm,n)1 function convergence=controlconvergence(J,fit,eps_cm,n) 2 2 %CONTROLCONVERGENCE - determine the convergence of control_core solution 3 3 % -
issm/trunk/src/m/solutions/objectivefunctionC.m
r4131 r4537 1 function J =objectivefunctionC(search_scalar,models,p_g,grad_g,n,analysis_type,sub_analysis_type); 1 function J =objectivefunctionC(search_scalar,femmodel,n); 2 %OBJECTIVEFUNCTIONC - objective function that return a parameter for a certain function 2 3 3 %recover active model. 4 m=models.active; 4 conserve_loads=true; 5 %recover some parameters 6 optscal=femmodel.parameters.OptScal(n); 7 fit=femmodel.parameters.Fit(n); 8 control_type=femmodel.parameters.ControlType; 9 control_steady=femmodel.parameters.ControlSteady; 10 analysis_type=femmodel.parameters.AnalysisType; 11 isstokes=femmodel.parameters.IsStokes; 12 cm_min=femmodel.parameters.CmMin; 13 cm_max=femmodel.parameters.CmMax; 5 14 6 %recover some parameters 7 optscal=m.parameters.Optscal(n); 8 fit=m.parameters.Fit(n); 9 control_type=m.parameters.ControlType; 10 analysis_type=m.parameters.AnalysisType; 15 %set current configuration 16 if isstokes, 17 femmodel=SetCurrentConfiguration(femmodel,DiagnsoticStokesAnalysisEnum); 18 else 19 femmodel=SetCurrentConfiguration(femmodel,DiagnosticHorizAnalysisEnum); 20 end 11 21 12 %U pdate along gradient using scalar supplied by fmincon optimization routine13 parameter=p_g+search_scalar*optscal*grad_g;22 %Use ControlParameterEnum input to reinitialize our input parameter: 23 femmodel.elements=InputDuplicate(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,ControlParameterEnum,control_type); 14 24 15 %Plug parameter into inputs 16 inputs=add(inputs,m.parameters.ControlType,parameter,'doublevec',1,m.parameters.NumberOfNodes); 25 %Use search scalar to shoot parameter in the gradient direction: 26 scalar=search_scalar*optscal; 27 femmodel.elements=InputAXPY(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,control_type,scalar,ControlParameterEnum); 17 28 18 % Run diagnostic with updated parameters.19 u_g=diagnostic_core_nonlinear(m,analysis_type,sub_analysis_type);29 %Constrain: 30 [femmodel.elements,femmodel.nodes,femmmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters]=InputControlConstrain(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,control_type,cm_min,cm_max); 20 31 21 %add velocity to inputs. 22 inputs=add(inputs,'velocity',u_g,'doublevec',m.parameters.NumberOfDofsPerNode,m.parameters.NumberOfNodes); 32 %Run diagnostic with updated inputs: 33 if(control_steady==0), 34 femmodel=solver_diagnostic_nonlinear(femmodel,conserve_loads); %true means we conserve loads at each diagnostic run 35 else 36 femmodel=diagnostic_core(femmodel); %We need a 3D velocity!! (vz is required for the next thermal run) 37 end 23 38 24 %Compute misfit for this velocity field. 25 J=CostFunction(m.elements,m.nodes,m.vertices,m.loads,m.materials,m.parameters,analysis_type,sub_analysis_type); 39 %Compute misfit for this velocity field 40 [femmodel.elements,femmodel.loads]=InputUpdateFromConstant(femmodel.elements,femmodel.nodes,femmodel.vertices, femmodel.loads,femmodel.materials,femmodel.parameters,fit,FitEnum); 41 J=CostFunction(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials, femmodel.parameters);
Note:
See TracChangeset
for help on using the changeset viewer.