Changeset 4535


Ignore:
Timestamp:
07/12/10 12:37:02 (15 years ago)
Author:
seroussi
Message:

started to work on control methods serial

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  
    77
    88        %Preprocess models
    9         femmodel=ControlInitialization(femmodel);
     9        femmodel=stokescontrolinit(femmodel);
    1010
    1111        %recover parameters common to all solutions
     
    2424        control_steady=femmodel.parameters.ControlSteady;
    2525
    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;
    2829
    29 %set optimization options.
    30 options=ControlOptions(femmodel.parameters);
     30        for n=1:nsteps,
    3131
    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);
    3334
    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
    3639
    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);
    3942
    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
    4366        end
    4467
    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);
    5774        end
    5875
    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);
    9086
    9187end %end function
Note: See TracChangeset for help on using the changeset viewer.