Changeset 1204


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

minor (use numberofdofspernode instead of 2... easier for Stokes)

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

Legend:

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

    r1201 r1204  
    1111displaystring(debug,'%s','         computing velocities...');
    1212[u_g K_ff0 K_fs0 ]=diagnostic_core_nonlinear(m,inputs,analysis_type,sub_analysis_type);
    13 inputs=add(inputs,'velocity',u_g,'doublevec',2,m.parameters.numberofnodes);
     13inputs=add(inputs,'velocity',u_g,'doublevec',m.parameters.numberofdofspernode,m.parameters.numberofnodes);
    1414
    1515%Buid Du, difference between observed velocity and model velocity.
     
    2626%Merge back to g set
    2727lambda_g= Mergesolutionfromftog( lambda_f, m.Gmn, m.ys0, m.nodesets );
    28 inputs=add(inputs,'adjoint',lambda_g,'doublevec',2,m.parameters.numberofnodes);
     28inputs=add(inputs,'adjoint',lambda_g,'doublevec',m.parameters.numberofdofspernode,m.parameters.numberofnodes);
    2929
    3030%Compute gradJ
  • issm/trunk/src/m/solutions/cielo/control_core.m

    r1184 r1204  
    88%recover models
    99m_dh=models.dh;
     10m_dv=models.dv;
     11m_ds=models.ds;
     12m_sl=models.sl;
    1013
    1114%recover parameters common to all solutions
     
    2225options=ControlOptions(m_dh.parameters);
    2326
     27%Take car of Stokes : compute slope and get spc once for all
     28if 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);
     67end
     68
    2469for n=1:m_dh.parameters.nsteps,
    2570
     
    3479
    3580        %Update inputs in datasets
    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);
     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
    3786
    3887        displaystring(debug,'\n%s',['      computing gradJ...']);
    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);
     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
    4195
    4296        displaystring(debug,'\n%s',['      normalizing directions...']);
     
    53107
    54108        displaystring(debug,'\n%s',['      optimizing along gradient direction...']);
    55         [search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,m_dh,inputs,param_g,c(n).grad_g,n,'diagnostic','horiz');
     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
    56114
    57115        displaystring(debug,'\n%s',['      updating parameter using optimized search scalar...']);
Note: See TracChangeset for help on using the changeset viewer.