Changeset 1652


Ignore:
Timestamp:
08/11/09 16:51:13 (16 years ago)
Author:
Mathieu Morlighem
Message:

simplified CM

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  
    66%
    77
    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);
    1310
    1411%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;
     12debug=model.parameters.debug;
    2013
    2114%initialize control parameters
    22 param_g=models.dh.parameters.param_g;
     15param_g=model.parameters.param_g;
    2316
    2417%set optimization options.
    25 options=ControlOptions(m_dh.parameters);
     18options=ControlOptions(model.parameters);
    2619
    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,
     20for n=1:model.parameters.nsteps,
    3321
    3422        %set options
    35         options=optimset(options,'MaxFunEvals',m_dh.parameters.maxiter(n));
     23        options=optimset(options,'MaxFunEvals',model.parameters.maxiter(n));
    3624
    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)]));
    3826
    3927        %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);
    4230
    4331        %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);
    4933
    5034        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);
    5837
    5938        displaystring(debug,'\n%s',['      normalizing directions...']);
     
    6544
    6645        %visualize direction.
    67         if m_dh.parameters.plot
     46        if model.parameters.plot
    6847                plot_direction;
    6948        end
    7049
    7150        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);
    7752
    7853        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;
    8055
    8156        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);
    8358
    8459        %visualize direction.
    85         if m_dh.parameters.plot,
     60        if model.parameters.plot,
    8661                plot_newdistribution;
    8762        end
     
    9469
    9570%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);
     71inputs=add(inputs,model.parameters.control_type,param_g,'doublevec',1,model.parameters.numberofnodes);
    9772results_diag=diagnostic_core(models,inputs);
    9873
Note: See TracChangeset for help on using the changeset viewer.