Changeset 1033
- Timestamp:
- 06/19/09 16:58:46 (16 years ago)
- Location:
- issm/trunk/src/m/solutions/cielo
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/solutions/cielo/control.m
r980 r1033 1 1 function md=control(md) 2 %CONTROL - launch control solution sequence 3 % 4 % Usage: 5 % md=control(md) 6 % 2 7 3 8 %timing … … 5 10 6 11 %Build all models requested for control simulation 7 models.analysis_type='control'; 8 md.analysis_type='control'; 9 md.sub_analysis_type='';10 m odels.dh=CreateFemModel(md);12 models.analysis_type='control'; %needed for processresults 13 14 displaystring(md.debug,'%s',['reading diagnostic horiz model data']); 15 md.analysis_type='control'; md.sub_analysis_type=''; models.dh=CreateFemModel(md); 11 16 12 17 % figure out number of dof: just for information purposes. 13 18 md.dof=modelsize(models); 14 19 15 %initialize control parameters, gradients and observations 16 u_g_obs=models.dh.parameters.u_g_obs; 17 u_g=models.dh.parameters.u_g; 18 param_g=models.dh.parameters.param_g; 19 grad_g=zeros(models.dh.nodesets.gsize,1); 20 21 %set optimization options. 22 options=ControlOptions(models.dh.parameters); 20 %initialize inputs 21 inputs=inputlist; 22 inputs=add(inputs,'velocity',models.dh.parameters.u_g,'doublevec',3,models.dh.parameters.numberofnodes); 23 23 24 % initialize inputs, ie models.dh.nparameters on which we invert.25 i nputs=inputlist;26 inputs=add(inputs,models.dh.parameters.control_type,param_g,'doublevec',2,models.dh.parameters.numberofnodes);27 inputs=add(inputs,'velocity',u_g,'doublevec',3,models.dh.parameters.numberofnodes);24 %compute solution 25 if ~models.dh.parameters.qmu_analysis, 26 %launch core of control solution. 27 results=control_core(models,inputs); 28 28 29 for n=1:models.dh.parameters.nsteps, 30 31 %set options 32 options=optimset(options,'MaxFunEvals',models.dh.parameters.maxiter(n)); 33 34 disp(sprintf('\n%s%s%s%s\n',[' control method step ' num2str(n) '/' num2str(models.dh.parameters.nsteps)])); 35 36 %update inputs with new fit 37 inputs=add(inputs,'fit',models.dh.parameters.fit(n),'double'); 38 inputs=add(inputs,models.dh.parameters.control_type,param_g,'doublevec',2,models.dh.parameters.numberofnodes); 39 40 %Update inputs in datasets 41 [models.dh.elements,models.dh.nodes,models.dh.loads,models.dh.materials]=UpdateFromInputs(models.dh.elements,models.dh.nodes,models.dh.loads,models.dh.materials,inputs); 42 43 disp(' computing gradJ...'); 44 [u_g c(n).grad_g]=GradJCompute(models.dh,inputs,u_g_obs,md.analysis_type,md.sub_analysis_type); 45 inputs=add(inputs,'velocity',u_g,'doublevec',2,models.dh.parameters.numberofnodes); 46 disp(' done.'); 47 48 disp(' normalizing directions...'); 49 if n>=2, 50 c(n).grad_g=Orth(c(n).grad_g,c(n-1).grad_g); 51 else 52 c(n).grad_g=Orth(c(n).grad_g,{}); 53 end 54 disp(' done.'); 55 56 %visualize direction. 57 if models.dh.parameters.plot 58 plot_direction; 59 end 60 61 disp(' optimizing along gradient direction...'); 62 [search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,models.dh,inputs,param_g,u_g_obs,c(n).grad_g,n,md.analysis_type,md.sub_analysis_type); 63 disp(' done.'); 64 65 disp(' updating parameter using optimized search scalar...'); 66 param_g=param_g+search_scalar*models.dh.parameters.optscal(n)*c(n).grad_g; 67 disp(' done.'); 68 69 disp(' constraining the new distribution...'); 70 param_g=ControlConstrain(param_g,models.dh.parameters); 71 disp(' done.'); 72 73 %visualize direction. 74 if models.dh.parameters.plot, 75 plot_newdistribution; 76 end 77 78 %some temporary saving 79 if(mod(n,5)==0), 80 solution=controlfinalsol(c,models.dh,param_g,inputs,md.analysis_type,md.sub_analysis_type); 81 save temporary_control_results solution 82 end 83 disp([' value of misfit J after optimization #' num2str(n) ':' num2str(c(n).J)]); 84 29 %process results 30 if ~isstruct(md.results), md.results=struct(); end 31 md.results.control=processresults(models,results); 32 else 33 %launch dakota driver for diagnostic core solution 34 Qmu(models,inputs,models.dh.parameters); 85 35 end 86 36 87 %Create final solution 88 disp(' preparing final velocity solution...'); 89 results=controlfinalsol(c,models.dh,param_g,inputs,md.analysis_type,md.sub_analysis_type); 90 disp(' done.'); 91 92 disp(' load results ontol model...'); 93 if ~isstruct(md.results), md.results=struct(); end 94 md.results.control=processresults(models,results); 95 disp(' done.'); 96 37 %stop timing 97 38 t2=clock; 98 disp ([' overall time spent on control code ' num2str(etime(t2,t1)) ' seconds'])39 displaystring(md.debug,'\n%s\n',['solution converged in ' num2str(etime(t2,t1)) ' seconds']); -
issm/trunk/src/m/solutions/cielo/diagnostic_core.m
r967 r1033 3 3 % 4 4 % Usage: 5 % results=diagnostic_core(m _dh,m_dhu,m_dv,m_ds,m_sl,inputs);5 % results=diagnostic_core(models,inputs); 6 6 % 7 7
Note:
See TracChangeset
for help on using the changeset viewer.