Changeset 980


Ignore:
Timestamp:
06/13/09 11:21:49 (16 years ago)
Author:
Mathieu Morlighem
Message:

extended processresults to control

Location:
issm/trunk/src/m/solutions/cielo
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/m/solutions/cielo/control.m

    r773 r980  
    55       
    66        %Build all models requested for control simulation
     7        models.analysis_type='control';
    78        md.analysis_type='control';
    89        md.sub_analysis_type='';
    9         m=CreateFemModel(md);
     10        models.dh=CreateFemModel(md);
    1011
    1112        % figure out number of dof: just for information purposes.
    12         md.dof=m.nodesets.fsize; %biggest dof number
     13        md.dof=modelsize(models);
    1314
    1415        %initialize control parameters, gradients and observations
    15         u_g_obs=m.parameters.u_g_obs;
    16         u_g=m.parameters.u_g;
    17         param_g=m.parameters.param_g;
    18         grad_g=zeros(m.nodesets.gsize,1);
     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);
    1920               
    2021        %set optimization options.
    21         options=ControlOptions(m.parameters);
     22        options=ControlOptions(models.dh.parameters);
    2223
    23         %initialize inputs, ie m.nparameters on which we invert.
     24        %initialize inputs, ie models.dh.nparameters on which we invert.
    2425        inputs=inputlist;
    25         inputs=add(inputs,m.parameters.control_type,param_g,'doublevec',2,m.parameters.numberofnodes);
    26         inputs=add(inputs,'velocity',u_g,'doublevec',3,m.parameters.numberofnodes);
     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);
    2728
    28         for n=1:m.parameters.nsteps,
     29        for n=1:models.dh.parameters.nsteps,
    2930               
    3031                %set options
    31                 options=optimset(options,'MaxFunEvals',m.parameters.maxiter(n));
     32                options=optimset(options,'MaxFunEvals',models.dh.parameters.maxiter(n));
    3233
    33                 disp(sprintf('\n%s%s%s%s\n',['   control method step ' num2str(n) '/' num2str(m.parameters.nsteps)]));
     34                disp(sprintf('\n%s%s%s%s\n',['   control method step ' num2str(n) '/' num2str(models.dh.parameters.nsteps)]));
    3435
    3536                %update inputs with new fit
    36                 inputs=add(inputs,'fit',m.parameters.fit(n),'double');
    37                 inputs=add(inputs,m.parameters.control_type,param_g,'doublevec',2,m.parameters.numberofnodes);
     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);
    3839
    3940                %Update inputs in datasets
    40                 [m.elements,m.nodes,m.loads,m.materials]=UpdateFromInputs(m.elements,m.nodes,m.loads,m.materials,inputs);
     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);
    4142
    4243                disp('      computing gradJ...');
    43                 [u_g c(n).grad_g]=GradJCompute(m,inputs,u_g_obs,md.analysis_type,md.sub_analysis_type);
    44                 inputs=add(inputs,'velocity',u_g,'doublevec',2,m.parameters.numberofnodes);
     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);
    4546                disp('      done.');
    4647
     
    5455               
    5556                %visualize direction.
    56                 if m.parameters.plot
     57                if models.dh.parameters.plot
    5758                        plot_direction;
    5859                end
    5960               
    6061                disp('      optimizing along gradient direction...');
    61                 [search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,m,inputs,param_g,u_g_obs,c(n).grad_g,n,md.analysis_type,md.sub_analysis_type);
     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);
    6263                disp('      done.');
    6364
    6465                disp('      updating parameter using optimized search scalar...');
    65                 param_g=param_g+search_scalar*m.parameters.optscal(n)*c(n).grad_g;
     66                param_g=param_g+search_scalar*models.dh.parameters.optscal(n)*c(n).grad_g;
    6667                disp('      done.');
    6768
    6869                disp('      constraining the new distribution...');   
    69                 param_g=ControlConstrain(param_g,m.parameters);
     70                param_g=ControlConstrain(param_g,models.dh.parameters);
    7071                disp('      done.');
    7172
    7273                %visualize direction.
    73                 if m.parameters.plot,
     74                if models.dh.parameters.plot,
    7475                        plot_newdistribution;
    7576                end
     
    7778                %some temporary saving
    7879                if(mod(n,5)==0),
    79                         solution=controlfinalsol(c,m,param_g,inputs,md.analysis_type,md.sub_analysis_type);
     80                        solution=controlfinalsol(c,models.dh,param_g,inputs,md.analysis_type,md.sub_analysis_type);
    8081                        save temporary_control_results solution
    8182                end
     
    8687        %Create final solution
    8788        disp('      preparing final velocity solution...');
    88         solution=controlfinalsol(c,m,param_g,inputs,md.analysis_type,md.sub_analysis_type);
     89        results=controlfinalsol(c,models.dh,param_g,inputs,md.analysis_type,md.sub_analysis_type);
    8990        disp('      done.');
    9091       
    9192        disp('      load results ontol model...');
    92         md=loadcontrolfinalsol(md,solution);
     93        if ~isstruct(md.results), md.results=struct(); end
     94        md.results.control=processresults(models,results);
    9395        disp('      done.');
    9496       
  • issm/trunk/src/m/solutions/cielo/controlfinalsol.m

    r465 r980  
    1 function solution=controlfinalsol(c,m,p_g,inputs,analysis_type,sub_analysis_type);
     1function results=controlfinalsol(c,m,param_g,inputs,analysis_type,sub_analysis_type);
     2
     3%initialize results
     4results.time=0;
     5results.step=1;
    26
    37%From parameters, build inputs for icediagnostic_core, using the final parameters
    4 inputs=add(inputs,m.parameters.control_type,p_g,'doublevec',2,m.parameters.numberofnodes);
    5 u_g=diagnostic_core_nonlinear(m,inputs,analysis_type,sub_analysis_type);
    6 
    7 %Build partitioning vectors to recover solution
    8 indx=[1:2:m.nodesets.gsize];
    9 indy=[2:2:m.nodesets.gsize];
    10 
    11 %Recover velocity, and parameters, in the correct partitioning.
    12 vx=u_g(indx);
    13 vy=u_g(indy);
    14 vel=sqrt(vx.^2+vy.^2);
    15 parameter=p_g(indx);
     8inputs=add(inputs,m.parameters.control_type,param_g,'doublevec',2,m.parameters.numberofnodes);
     9results.u_g=diagnostic_core_nonlinear(m,inputs,analysis_type,sub_analysis_type);
    1610
    1711%Recover misfit at each iteration of the control method
     
    2014        J(i)=c(i).J;
    2115end
     16results.J=J;
    2217
    23 %Store in solution
    24 solution.vx=vx;
    25 solution.vy=vy;
    26 solution.vel=vel;
    27 solution.J=J;
    28 solution.parameter=parameter;
     18%store param_g
     19results.param_g=param_g;
  • issm/trunk/src/m/solutions/cielo/processresults.m

    r972 r980  
    2626        isstokes=m_ds.parameters.isstokes;
    2727end
     28if strcmpi(analysis_type,'control'),
     29        m_dh=models.dh;
     30
     31        %some flags needed
     32        dim=m_dh.parameters.dim;
     33        ishutter=m_dh.parameters.ishutter;
     34        ismacayealpattyn=m_dh.parameters.ismacayealpattyn;
     35        isstokes=m_dh.parameters.isstokes;
     36end
    2837if (strcmpi(analysis_type,'thermal') | strcmpi(analysis_type,'transient')),
    2938        m_m=models.m;
     
    4352
    4453                        u_g=results(i).u_g;
    45                         yts=m_ds.parameters.yts;
     54                        yts=m_dh.parameters.yts;
    4655
    4756                        if dim==2,
Note: See TracChangeset for help on using the changeset viewer.