Changeset 1205


Ignore:
Timestamp:
07/01/09 16:30:57 (16 years ago)
Author:
Mathieu Morlighem
Message:

Stokes later... (pas trop vite en besogne...)

File:
1 edited

Legend:

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

    r1204 r1205  
    88%recover models
    99m_dh=models.dh;
    10 m_dv=models.dv;
    11 m_ds=models.ds;
    12 m_sl=models.sl;
    1310
    1411%recover parameters common to all solutions
     
    2522options=ControlOptions(m_dh.parameters);
    2623
    27 %Take car of Stokes : compute slope and get spc once for all
    28 if isstokes,
    29 
    30         %bed slope
    31         displaystring(debug,'\n%s',['      computing bed slope (x and y derivatives)...']);
    32         slopex=diagnostic_core_linear(m_sl,inputs,'slope_compute','bedx');
    33         slopey=diagnostic_core_linear(m_sl,inputs,'slope_compute','bedy');
    34         slopex=FieldExtrude(m_sl.elements,m_sl.nodes,m_sl.loads,m_sl.materials,slopex,'slopex',0);
    35         slopey=FieldExtrude(m_sl.elements,m_sl.nodes,m_sl.loads,m_sl.materials,slopey,'slopey',0);
    36         inputs=add(inputs,'bedslopex',slopex,'doublevec',m_sl.parameters.numberofdofspernode,m_sl.parameters.numberofnodes);
    37         inputs=add(inputs,'bedslopey',slopey,'doublevec',m_sl.parameters.numberofdofspernode,m_sl.parameters.numberofnodes);
    38 
    39         %3d velocity
    40         displaystring(debug,'\n%s',['      get vertical spcs: launch diagnostic...']);
    41         displaystring(debug,'\n%s',['         computing horizontal velocities...']);
    42         u_g=diagnostic_core_nonlinear(m_dh,inputs,'diagnostic','horiz');
    43         displaystring(debug,'\n%s',['         extruding horizontal velocities...']);
    44         u_g_horiz=FieldExtrude(m_dh.elements,m_dh.nodes,m_dh.loads,m_dh.materials,u_g,'velocity',1);
    45         displaystring(debug,'\n%s',['         computing vertical velocities...']);
    46         inputs=add(inputs,'velocity',u_g_horiz,'doublevec',m_dh.parameters.numberofdofspernode,m_dh.parameters.numberofnodes);
    47         u_g_vert=diagnostic_core_linear(m_dv,inputs,'diagnostic','vert');
    48         displaystring(debug,'\n%s',['         combining horizontal and vertical velocities...']);
    49         u_g=zeros(m_dh.parameters.numberofnodes*3,1);
    50         u_g(dofsetgen([1,2],3,m_dh.parameters.numberofnodes*3))=u_g_horiz;
    51         u_g(dofsetgen([3],3,m_dh.parameters.numberofnodes*3))=u_g_vert;
    52         displaystring(debug,'\n%s',['         computing pressure according to MacAyeal...']);
    53         p_g=ComputePressure(m_dh.elements,m_dh.nodes,m_dh.loads,m_dh.materials,m_dh.parameters,inputs);
    54         p_g=p_g/m_ds.parameters.stokesreconditioning;
    55         %recombine u_g and p_g:
    56         u_g_stokes=zeros(m_ds.nodesets.gsize,1);
    57         u_g_stokes(dofsetgen([1,2,3],4,m_ds.nodesets.gsize))=u_g;
    58         u_g_stokes(dofsetgen([4],4,m_ds.nodesets.gsize))=p_g;
    59         inputs=add(inputs,'velocity',u_g_stokes,'doublevec',4,m_ds.parameters.numberofnodes);
    60         displaystring(debug,'\n%s',['         update boundary conditions for stokes using velocities previously computed...']);
    61         m_ds.y_g=zeros(m_ds.nodesets.gsize,1);
    62         m_ds.y_g(dofsetgen([1,2,3],4,m_ds.nodesets.gsize))=u_g;
    63         [m_ds.ys m_ds.ys0]=Reducevectorgtos(m_ds.y_g,m_ds.nodesets);
    64         displaystring(debug,'\n%s',['         computing stokes velocities and pressure ...']);
    65         u_g=diagnostic_core_nonlinear(m_ds,inputs,'diagnostic','stokes');
    66         inputs=add(inputs,'velocity',u_g,'doublevec',4,m_ds.parameters.numberofnodes);
    67 end
    68 
    6924for n=1:m_dh.parameters.nsteps,
    7025
     
    7934
    8035        %Update inputs in datasets
    81         if isstokes,
    82                 [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);
    83         else
    84                 [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);
    85         end
     36        [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);
    8637
    8738        displaystring(debug,'\n%s',['      computing gradJ...']);
    88         if isstokes,
    89                 [u_g c(n).grad_g]=GradJCompute(m_ds,inputs,'diagnostic','stokes');
    90                 inputs=add(inputs,'velocity',u_g,'doublevec',4,m_ds.parameters.numberofnodes);
    91         else
    92                 [u_g c(n).grad_g]=GradJCompute(m_dh,inputs,'diagnostic','horiz');
    93                 inputs=add(inputs,'velocity',u_g,'doublevec',2,m_dh.parameters.numberofnodes);
    94         end
     39        [u_g c(n).grad_g]=GradJCompute(m_dh,inputs,'diagnostic','horiz');
     40        inputs=add(inputs,'velocity',u_g,'doublevec',2,m_dh.parameters.numberofnodes);
    9541
    9642        displaystring(debug,'\n%s',['      normalizing directions...']);
     
    10753
    10854        displaystring(debug,'\n%s',['      optimizing along gradient direction...']);
    109         if isstokes,
    110                 [search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,m_dh,inputs,param_g,c(n).grad_g,n,'diagnostic','horiz');
    111         else
    112                 [search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,m_ds,inputs,param_g,c(n).grad_g,n,'diagnostic','horiz');
    113         end
     55        [search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,m_dh,inputs,param_g,c(n).grad_g,n,'diagnostic','horiz');
    11456
    11557        displaystring(debug,'\n%s',['      updating parameter using optimized search scalar...']);
Note: See TracChangeset for help on using the changeset viewer.