Changeset 1652
- Timestamp:
- 08/11/09 16:51:13 (16 years ago)
- Location:
- issm/trunk/src/m/solutions/cielo
- Files:
-
- 1 added
- 1 deleted
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/solutions/cielo/control_core.m
r1647 r1652 6 6 % 7 7 8 %recover models 9 m_dh=models.dh; 10 m_dv=models.dv; 11 m_ds=models.ds; 12 m_sl=models.sl; 8 %Preprocess models 9 [inputs model]=ControlInitialization(models,inputs); 13 10 14 11 %recover parameters common to all solutions 15 debug=m_dh.parameters.debug; 16 dim=m_dh.parameters.dim; 17 ishutter=m_dh.parameters.ishutter; 18 ismacayealpattyn=m_dh.parameters.ismacayealpattyn; 19 isstokes=m_dh.parameters.isstokes; 12 debug=model.parameters.debug; 20 13 21 14 %initialize control parameters 22 param_g=model s.dh.parameters.param_g;15 param_g=model.parameters.param_g; 23 16 24 17 %set optimization options. 25 options=ControlOptions(m _dh.parameters);18 options=ControlOptions(model.parameters); 26 19 27 %Take car of Stokes : compute slope and get spc once for all 28 if isstokes, 29 [inputs m_ds]=ControlPrepareStokes(models,inputs); 30 end 31 32 for n=1:m_dh.parameters.nsteps, 20 for n=1:model.parameters.nsteps, 33 21 34 22 %set options 35 options=optimset(options,'MaxFunEvals',m _dh.parameters.maxiter(n));23 options=optimset(options,'MaxFunEvals',model.parameters.maxiter(n)); 36 24 37 disp(sprintf('\n%s%s%s%s\n',[' control method step ' num2str(n) '/' num2str(m _dh.parameters.nsteps)]));25 disp(sprintf('\n%s%s%s%s\n',[' control method step ' num2str(n) '/' num2str(model.parameters.nsteps)])); 38 26 39 27 %update inputs with new fit 40 inputs=add(inputs,'fit',m _dh.parameters.fit(n),'double');41 inputs=add(inputs,m _dh.parameters.control_type,param_g,'doublevec',1,m_dh.parameters.numberofnodes);28 inputs=add(inputs,'fit',model.parameters.fit(n),'double'); 29 inputs=add(inputs,model.parameters.control_type,param_g,'doublevec',1,model.parameters.numberofnodes); 42 30 43 31 %Update inputs in datasets 44 if isstokes, 45 [m_ds.elements,m_ds.nodes,m_ds.loads,m_ds.materials]=UpdateFromInputs(m_ds.elements,m_ds.nodes,m_ds.loads,m_ds.materials,inputs); 46 else 47 [m_dh.elements,m_dh.nodes,m_dh.loads,m_dh.materials]=UpdateFromInputs(m_dh.elements,m_dh.nodes,m_dh.loads,m_dh.materials,inputs); 48 end 32 [model.elements,model.nodes,model.loads,model.materials]=UpdateFromInputs(model.elements,model.nodes,model.loads,model.materials,inputs); 49 33 50 34 displaystring(debug,'\n%s',[' computing gradJ...']); 51 if isstokes, 52 [u_g c(n).grad_g]=GradJCompute(m_ds,inputs,DiagnosticAnalysisEnum(),StokesAnalysisEnum()); 53 inputs=add(inputs,'velocity',u_g,'doublevec',4,m_ds.parameters.numberofnodes); 54 else 55 [u_g c(n).grad_g]=GradJCompute(m_dh,inputs,DiagnosticAnalysisEnum(),HorizAnalysisEnum()); 56 inputs=add(inputs,'velocity',u_g,'doublevec',2,m_dh.parameters.numberofnodes); 57 end 35 [u_g c(n).grad_g]=GradJCompute(model,inputs,model.parameters.analysis_type,model.parameters.sub_analysis_type); 36 inputs=add(inputs,'velocity',u_g,'doublevec',2,model.parameters.numberofnodes); 58 37 59 38 displaystring(debug,'\n%s',[' normalizing directions...']); … … 65 44 66 45 %visualize direction. 67 if m _dh.parameters.plot46 if model.parameters.plot 68 47 plot_direction; 69 48 end 70 49 71 50 displaystring(debug,'\n%s',[' optimizing along gradient direction...']); 72 if isstokes, 73 [search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,m_ds,inputs,param_g,c(n).grad_g,n,DiagnosticAnalysisEnum(),StokesAnalysisEnum()); 74 else 75 [search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,m_dh,inputs,param_g,c(n).grad_g,n,DiagnosticAnalysisEnum(),HorizAnalysisEnum()); 76 end 51 [search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,model,inputs,param_g,c(n).grad_g,n,model.parameters.analysis_type,model.parameters.sub_analysis_type); 77 52 78 53 displaystring(debug,'\n%s',[' updating parameter using optimized search scalar...']); 79 param_g=param_g+search_scalar*m _dh.parameters.optscal(n)*c(n).grad_g;54 param_g=param_g+search_scalar*model.parameters.optscal(n)*c(n).grad_g; 80 55 81 56 displaystring(debug,'\n%s',[' constraining the new distribution...']); 82 param_g=ControlConstrain(param_g,m _dh.parameters);57 param_g=ControlConstrain(param_g,model.parameters); 83 58 84 59 %visualize direction. 85 if m _dh.parameters.plot,60 if model.parameters.plot, 86 61 plot_newdistribution; 87 62 end … … 94 69 95 70 %compute final velocity from diagnostic_core (horiz+vertical) 96 inputs=add(inputs,m _dh.parameters.control_type,param_g,'doublevec',1,m_dh.parameters.numberofnodes);71 inputs=add(inputs,model.parameters.control_type,param_g,'doublevec',1,model.parameters.numberofnodes); 97 72 results_diag=diagnostic_core(models,inputs); 98 73
Note:
See TracChangeset
for help on using the changeset viewer.