Changeset 4535
- Timestamp:
- 07/12/10 12:37:02 (15 years ago)
- Location:
- issm/trunk/src/m/solutions
- Files:
-
- 3 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/solutions/control_core.m
r4222 r4535 7 7 8 8 %Preprocess models 9 femmodel= ControlInitialization(femmodel);9 femmodel=stokescontrolinit(femmodel); 10 10 11 11 %recover parameters common to all solutions … … 24 24 control_steady=femmodel.parameters.ControlSteady; 25 25 26 %initialize control parameters 27 param_g=femmodel.parameters.param_g; 26 %Initialise options with tolerance and maxiter 27 options.TolX=femmodel.parameters.TolX; 28 options.MaxIter=femmodel.parameters.MaxIter; 28 29 29 %set optimization options. 30 options=ControlOptions(femmodel.parameters); 30 for n=1:nsteps, 31 31 32 for n=1:nsteps, 32 disp(sprintf('\n%s%s%s%s\n',[' control method step ' num2str(n) '/' num2str(femmodel.parameters.NSteps)])); 33 [femmodel.elements,femmodel.loads]=InputUpdateFromConstant(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,fit(n),FitEnum); 33 34 34 %set options 35 options=optimset(options,'MaxFunEvals',femmodel.parameters.MaxIter(n)); 35 %In case we are running a steady state control method, compute new temperature field using new parameter distribution: 36 if control_steady; 37 femmodel=steadystate_core(femmodel); 38 end 36 39 37 disp(sprintf('\n%s%s%s%s\n',[' control method step ' num2str(n) '/' num2str(femmodel.parameters.NSteps)]));38 [femmodel.elements,femmodel.loads]=InputUpdateFromConstant(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,fit(n),FitEnum);40 displaystring(verbose,'\n%s',[' computing gradJ...']); 41 femmodel=gradient_core(femmodel); 39 42 40 %In case we are running a steady state control method, compute new temperature field using new parameter distribution: 41 if control_steady; 42 femmodel=steadystate_core(femmodel); 43 %Return gradient if asked 44 if cm_gradient, 45 femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,GradientEnum); 46 return; 47 end 48 49 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); 51 52 displaystring(verbose,'\n%s',[' updating parameter using optimized search scalar...']); 53 param_g=param_g+search_scalar*femmodel.parameters.Optscal(n)*grad_g; 54 55 displaystring(verbose,'\n%s',[' constraining the new distribution...']); 56 param_g=ControlConstrain(param_g,femmodel.parameters); 57 58 disp([' value of misfit J after optimization #' num2str(n) ':' num2str(c(n).J)]); 59 60 %Has convergence been reached? 61 converged=controlconvergence(J,fit,eps_cm,n); 62 if converged, 63 break; 64 end 65 43 66 end 44 67 45 %Update inputs in datasets 46 [femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters]=UpdateFromInputs(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 47 48 displaystring(verbose,'\n%s',[' computing gradJ...']); 49 femmodel=gradient_core(femmodel); 50 51 %Return gradient if asked 52 if cm_gradient, 53 femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,GradientEnum); 54 %%%%%%%%%%%%%%%%%%%%%% PROBLEM MUST GO TO THE END (SEE PARALLEL) 55 error 56 break; 68 %generate output 69 displaystring(verbose,'\n%s',[' preparing final velocity solution...']); 70 if control_steady, 71 femmodel=steadystate_core(femmodel); 72 else 73 femmodel=diagnostic_core(femmodel); 57 74 end 58 75 59 displaystring(verbose,'\n%s',[' optimizing along gradient direction...']); 60 [search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,femmodel,param_g,c(n).grad_g,n,femmodel.parameters); 61 62 displaystring(verbose,'\n%s',[' updating parameter using optimized search scalar...']); 63 param_g=param_g+search_scalar*femmodel.parameters.Optscal(n)*c(n).grad_g; 64 65 displaystring(verbose,'\n%s',[' constraining the new distribution...']); 66 param_g=ControlConstrain(param_g,femmodel.parameters); 67 68 disp([' value of misfit J after optimization #' num2str(n) ':' num2str(c(n).J)]); 69 70 %Has convergence been reached? 71 converged=controlconvergence(J,fit,eps_cm,n); 72 if converged, 73 break; 74 end 75 76 end 77 78 %generate output 79 displaystring(verbose,'\n%s',[' preparing final velocity solution...']); 80 if control_steady, 81 femmodel=steadystate_core(femmodel); 82 else 83 femmodel=diagnostic_core(femmodel); 84 end 85 86 %Some results not computed by diagnostic or steadystate 87 InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,control_type); 88 femmodel.results.JEnum=J; 89 femmodel.results.ControlTypeEnum=EnumAsString(control_type); 76 %Some results not computed by diagnostic or steadystate 77 femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VxEnum); 78 femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VyEnum); 79 femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VelEnum); 80 femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,GradientEnum); 81 femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parametersn,AdjointxEnum); 82 femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parametersn,AdjointyEnum); 83 if (dim==3) femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VzEnum); 84 femmodel.results.JEnum=J; 85 femmodel.results.ControlTypeEnum=EnumAsString(control_type); 90 86 91 87 end %end function
Note:
See TracChangeset
for help on using the changeset viewer.