Changeset 1204
- Timestamp:
- 07/01/09 16:29:48 (16 years ago)
- Location:
- issm/trunk/src/m/solutions/cielo
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/solutions/cielo/GradJCompute.m
r1201 r1204 11 11 displaystring(debug,'%s',' computing velocities...'); 12 12 [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);13 inputs=add(inputs,'velocity',u_g,'doublevec',m.parameters.numberofdofspernode,m.parameters.numberofnodes); 14 14 15 15 %Buid Du, difference between observed velocity and model velocity. … … 26 26 %Merge back to g set 27 27 lambda_g= Mergesolutionfromftog( lambda_f, m.Gmn, m.ys0, m.nodesets ); 28 inputs=add(inputs,'adjoint',lambda_g,'doublevec', 2,m.parameters.numberofnodes);28 inputs=add(inputs,'adjoint',lambda_g,'doublevec',m.parameters.numberofdofspernode,m.parameters.numberofnodes); 29 29 30 30 %Compute gradJ -
issm/trunk/src/m/solutions/cielo/control_core.m
r1184 r1204 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; 10 13 11 14 %recover parameters common to all solutions … … 22 25 options=ControlOptions(m_dh.parameters); 23 26 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 24 69 for n=1:m_dh.parameters.nsteps, 25 70 … … 34 79 35 80 %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 37 86 38 87 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 41 95 42 96 displaystring(debug,'\n%s',[' normalizing directions...']); … … 53 107 54 108 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 56 114 57 115 displaystring(debug,'\n%s',[' updating parameter using optimized search scalar...']);
Note:
See TracChangeset
for help on using the changeset viewer.