Changeset 1205
- Timestamp:
- 07/01/09 16:30:57 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/solutions/cielo/control_core.m
r1204 r1205 8 8 %recover models 9 9 m_dh=models.dh; 10 m_dv=models.dv;11 m_ds=models.ds;12 m_sl=models.sl;13 10 14 11 %recover parameters common to all solutions … … 25 22 options=ControlOptions(m_dh.parameters); 26 23 27 %Take car of Stokes : compute slope and get spc once for all28 if isstokes,29 30 %bed slope31 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 velocity40 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 end68 69 24 for n=1:m_dh.parameters.nsteps, 70 25 … … 79 34 80 35 %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); 86 37 87 38 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); 95 41 96 42 displaystring(debug,'\n%s',[' normalizing directions...']); … … 107 53 108 54 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'); 114 56 115 57 displaystring(debug,'\n%s',[' updating parameter using optimized search scalar...']);
Note:
See TracChangeset
for help on using the changeset viewer.