Changeset 4537


Ignore:
Timestamp:
07/12/10 16:36:46 (15 years ago)
Author:
seroussi
Message:

keep working on control serial

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

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/m/solutions/control_core.m

    r4535 r4537  
    2828        options.MaxIter=femmodel.parameters.MaxIter;
    2929
     30        %Initialize misfits with a vector of zeros
     31        J=zeros(nsteps,1);
     32
    3033        for n=1:nsteps,
    3134
     
    4851
    4952                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);
     53                [search_scalar J(n)]=ControlOptimization('objectivefunctionC',0,1,options,femmodel,n,femmodel.parameters);
    5154
    52                 displaystring(verbose,'\n%s',['      updating parameter using optimized search scalar...']);
    53                 param_g=param_g+search_scalar*femmodel.parameters.Optscal(n)*grad_g;
     55                displaystring('\n%s',['      updating parameter using optimized search scalar:']);
     56                scalar=search_scalar*optscal(n);
     57                femmodel.elements=InputAXPY(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,control_type,scalar,ControlParameterEnum);
    5458
    55                 displaystring(verbose,'\n%s',['      constraining the new distribution...']);
    56                 param_g=ControlConstrain(param_g,femmodel.parameters);
     59                displaystring('\n%s',['      constraning the new distribution...']);
     60                [femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters]=InputControlConstrain(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,control_type,cm_min,cm_max);
    5761
    58                 disp(['      value of misfit J after optimization #' num2str(n) ':' num2str(c(n).J)]);
     62                displaystring('\n%s',['      save new parameter...']);
     63                femmodel.elements=InputDuplicate(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,control_type,ControlParameterEnum);
     64
     65                disp(['      value of misfit J after optimization #' num2str(n) ':' num2str(J(n))]);
    5966
    6067                %Has convergence been reached?
  • issm/trunk/src/m/solutions/controlconvergence.m

    r4134 r4537  
    1 function converged=controlconvergence(J,fit,eps_cm,n)
     1function convergence=controlconvergence(J,fit,eps_cm,n)
    22%CONTROLCONVERGENCE - determine the convergence of control_core solution
    33%
  • issm/trunk/src/m/solutions/objectivefunctionC.m

    r4131 r4537  
    1 function J =objectivefunctionC(search_scalar,models,p_g,grad_g,n,analysis_type,sub_analysis_type);
     1function J =objectivefunctionC(search_scalar,femmodel,n);
     2%OBJECTIVEFUNCTIONC - objective function that return a parameter for a certain function
    23
    3 %recover active model.
    4 m=models.active;
     4conserve_loads=true;
     5%recover some parameters
     6optscal=femmodel.parameters.OptScal(n);
     7fit=femmodel.parameters.Fit(n);
     8control_type=femmodel.parameters.ControlType;
     9control_steady=femmodel.parameters.ControlSteady;
     10analysis_type=femmodel.parameters.AnalysisType;
     11isstokes=femmodel.parameters.IsStokes;
     12cm_min=femmodel.parameters.CmMin;
     13cm_max=femmodel.parameters.CmMax;
    514
    6 %recover some parameters
    7 optscal=m.parameters.Optscal(n);
    8 fit=m.parameters.Fit(n);
    9 control_type=m.parameters.ControlType;
    10 analysis_type=m.parameters.AnalysisType;
     15%set current configuration
     16if isstokes,
     17        femmodel=SetCurrentConfiguration(femmodel,DiagnsoticStokesAnalysisEnum);
     18else
     19        femmodel=SetCurrentConfiguration(femmodel,DiagnosticHorizAnalysisEnum);
     20end
    1121
    12 %Update along gradient using scalar supplied by fmincon optimization routine
    13 parameter=p_g+search_scalar*optscal*grad_g;
     22%Use ControlParameterEnum input to  reinitialize our input parameter:
     23femmodel.elements=InputDuplicate(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,ControlParameterEnum,control_type);
    1424
    15 %Plug parameter into inputs
    16 inputs=add(inputs,m.parameters.ControlType,parameter,'doublevec',1,m.parameters.NumberOfNodes);
     25%Use search scalar to shoot parameter in the gradient direction:
     26scalar=search_scalar*optscal;
     27femmodel.elements=InputAXPY(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,control_type,scalar,ControlParameterEnum);
    1728
    18 %Run diagnostic with updated parameters.
    19 u_g=diagnostic_core_nonlinear(m,analysis_type,sub_analysis_type);
     29%Constrain:
     30[femmodel.elements,femmodel.nodes,femmmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters]=InputControlConstrain(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,control_type,cm_min,cm_max);
    2031
    21 %add velocity to inputs.
    22 inputs=add(inputs,'velocity',u_g,'doublevec',m.parameters.NumberOfDofsPerNode,m.parameters.NumberOfNodes);
     32%Run diagnostic with updated inputs:
     33if(control_steady==0),
     34        femmodel=solver_diagnostic_nonlinear(femmodel,conserve_loads);  %true means we conserve loads at each diagnostic run
     35else
     36        femmodel=diagnostic_core(femmodel);  %We need a 3D velocity!! (vz is required for the next thermal run)
     37end
    2338
    24 %Compute misfit for this velocity field.
    25 J=CostFunction(m.elements,m.nodes,m.vertices,m.loads,m.materials,m.parameters,analysis_type,sub_analysis_type);
     39%Compute misfit for this velocity field
     40[femmodel.elements,femmodel.loads]=InputUpdateFromConstant(femmodel.elements,femmodel.nodes,femmodel.vertices, femmodel.loads,femmodel.materials,femmodel.parameters,fit,FitEnum);
     41J=CostFunction(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials, femmodel.parameters);
Note: See TracChangeset for help on using the changeset viewer.