Changeset 1033


Ignore:
Timestamp:
06/19/09 16:58:46 (16 years ago)
Author:
Mathieu Morlighem
Message:

added core solution in control

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  
    11function md=control(md)
     2%CONTROL - launch control solution sequence
     3%
     4%   Usage:
     5%      md=control(md)
     6%
    27
    38        %timing
     
    510       
    611        %Build all models requested for control simulation
    7         models.analysis_type='control';
    8         md.analysis_type='control';
    9         md.sub_analysis_type='';
    10         models.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);
    1116
    1217        % figure out number of dof: just for information purposes.
    1318        md.dof=modelsize(models);
    1419
    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);
    2323
    24         %initialize inputs, ie models.dh.nparameters on which we invert.
    25         inputs=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);
    2828
    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);
    8535        end
    8636
    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
    9738        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  
    33%
    44%   Usage:
    5 %      results=diagnostic_core(m_dh,m_dhu,m_dv,m_ds,m_sl,inputs);
     5%      results=diagnostic_core(models,inputs);
    66%
    77
Note: See TracChangeset for help on using the changeset viewer.