Changeset 968


Ignore:
Timestamp:
06/12/09 16:52:48 (16 years ago)
Author:
Mathieu Morlighem
Message:

extended processresults to other packages

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

Legend:

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

    r967 r968  
    1212
    1313%recover models first
    14 if strcmpi(analysis_type,'diagnostic'),
     14if (strcmpi(analysis_type,'diagnostic') | strcmpi(analysis_type,'transient')),
    1515        m_dh=models.dh;
    1616        m_ds=models.ds;
     
    2222        ismacayealpattyn=m_dh.parameters.ismacayealpattyn;
    2323        isstokes=m_ds.parameters.isstokes;
    24 
    25 elseif strcmpi(analysis_type,'thermal'),
     24end
     25if (strcmpi(analysis_type,'thermal') | strcmpi(analysis_type,'transient')),
    2626        m_m=models.m;
    2727end
  • issm/trunk/src/m/solutions/cielo/prognostic.m

    r937 r968  
    2525
    2626        displaystring(md.debug,'\n%s',['call computational core:']);
    27         rawresults=prognostic_core(models,inputs,'prognostic','');
     27        results=prognostic_core(models,inputs,'prognostic','');
    2828
    2929        displaystring(md.debug,'\n%s',['load results...']);
    3030        if ~isstruct(md.results), md.results=struct(); end
    31         md.results.prognostic.step=1;
    32         md.results.prognostic.time=0;
    33         md.results.prognostic.thickness=rawresults.h_g;
     31        md.results.prognostic=processresults(results,models,'prognostic');
    3432
    3533        %stop timing
  • issm/trunk/src/m/solutions/cielo/prognostic_core.m

    r936 r968  
    77        %get FE model
    88        m=models.p;
     9        results.time=0;
     10        results.step=1;
    911
    1012        displaystring(m.parameters.debug,'\n%s',['depth averaging velocity...']);
  • issm/trunk/src/m/solutions/cielo/thermal.m

    r940 r968  
    2626       
    2727        %call core
    28         rawresults=thermal_core(models,inputs);
    29 
    30         %process results
    31         results=struct('step',{},'time',{},'temperature',{},'melting',{});
    32         yts=models.t.parameters.yts;
    33         for n=1:length(rawresults),
    34                 results(n).temperature=rawresults(n).t_g;
    35                 results(n).melting=rawresults(n).m_g*yts; %in m/year
    36                 results(n).time=rawresults(n).time/yts;      %in years
    37                 results(n).step=n;
    38         end
     28        results=thermal_core(models,inputs);
    3929
    4030        %plug onto the model
    4131        if ~isstruct(md.results), md.results=struct(); end
    42         md.results.thermal=results;
     32        md.results.thermal=processresults(results,models,'thermal');
    4333
    4434        %stop timing
  • issm/trunk/src/m/solutions/cielo/thermal_core.m

    r958 r968  
    1212
    1313        results.time=0;
     14        results.step=1;
    1415
    1516        displaystring(m_t.parameters.debug,'\n%s',['computing temperatures...']);
     
    2930
    3031        %initialize temperature and melting
     32        results.step=1;
     33        results.time=0;
    3134        results.t_g=t_g;
    3235        results.m_g=m_g;
    33         results.time=0;
    3436
    3537        for n=1:nsteps,
    3638
    3739                displaystring(m_t.parameters.debug,'\n%s%i/%i\n','time step: ',n,nsteps);
     40                results(n+1).step=n+1;
    3841                results(n+1).time=n*m_t.parameters.dt;
    3942
  • issm/trunk/src/m/solutions/cielo/transient3d.m

    r957 r968  
    3535
    3636%initialize solution
    37 solution=struct('step',[],'time',[],'u_g',[],'p_g',[],'h_g',[],'s_g',[],'b_g',[]);
    38 solution.step=1;
    39 solution.time=0;
    40 solution.u_g=models.dh.parameters.u_g;
    41 %solution.u_g=models.dh.parameters.u_g(dofsetgen([1,2],3,length(models.dh.parameters.u_g)));
    42 solution.p_g=models.p.parameters.p_g;
    43 solution.h_g=models.p.parameters.h_g;
    44 solution.s_g=models.p.parameters.s_g;
    45 solution.b_g=models.p.parameters.b_g;
    46 solution.t_g=models.p.parameters.t_g;
    47 solution.m_g=models.p.parameters.m_g;
    48 solution.a_g=models.p.parameters.a_g;
     37results=struct('step',[],'time',[],'u_g',[],'p_g',[],'h_g',[],'s_g',[],'b_g',[]);
     38results.step=1;
     39results.time=0;
     40results.u_g=models.dh.parameters.u_g;
     41%results.u_g=models.dh.parameters.u_g(dofsetgen([1,2],3,length(models.dh.parameters.u_g)));
     42results.p_g=models.p.parameters.p_g;
     43results.h_g=models.p.parameters.h_g;
     44results.s_g=models.p.parameters.s_g;
     45results.b_g=models.p.parameters.b_g;
     46results.t_g=models.p.parameters.t_g;
     47results.m_g=models.p.parameters.m_g;
     48results.a_g=models.p.parameters.a_g;
    4949
    5050%initialize inputs
    5151displaystring(md.debug,'\n%s',['setup inputs...']);
    5252inputs=inputlist;
    53 inputs=add(inputs,'velocity',solution.u_g,'doublevec',3,models.p.parameters.numberofnodes);
    54 inputs=add(inputs,'melting',solution.m_g,'doublevec',1,models.p.parameters.numberofnodes);
    55 inputs=add(inputs,'accumulation',solution.a_g,'doublevec',1,models.p.parameters.numberofnodes);
     53inputs=add(inputs,'velocity',results.u_g,'doublevec',3,models.p.parameters.numberofnodes);
     54inputs=add(inputs,'melting',results.m_g,'doublevec',1,models.p.parameters.numberofnodes);
     55inputs=add(inputs,'accumulation',results.a_g,'doublevec',1,models.p.parameters.numberofnodes);
    5656inputs=add(inputs,'dt',models.p.parameters.dt,'double');
    5757
     
    7070        displaystring(md.debug,'\n%s%g%s%g%s%g\n','time [yr]: ',time/yts,'    iteration number: ',n,'/',floor(finaltime/dt));
    7171
    72         solution(n+1).step=n+1;
    73         solution(n+1).time=time;
     72        results(n+1).step=n+1;
     73        results(n+1).time=time;
    7474
    7575        %update inputs
    76         inputs=add(inputs,'thickness',solution(n).h_g,'doublevec',1,models.p.parameters.numberofnodes);
    77         inputs=add(inputs,'surface',solution(n).s_g,'doublevec',1,models.p.parameters.numberofnodes);
    78         inputs=add(inputs,'bed',solution(n).b_g,'doublevec',1,models.p.parameters.numberofnodes);
    79         inputs=add(inputs,'velocity',solution(n).u_g,'doublevec',3,models.p.parameters.numberofnodes);
    80         inputs=add(inputs,'pressure',solution(n).p_g,'doublevec',1,models.p.parameters.numberofnodes);
    81         inputs=add(inputs,'temperature',solution(n).t_g,'doublevec',1,models.t.parameters.numberofnodes);
     76        inputs=add(inputs,'thickness',results(n).h_g,'doublevec',1,models.p.parameters.numberofnodes);
     77        inputs=add(inputs,'surface',results(n).s_g,'doublevec',1,models.p.parameters.numberofnodes);
     78        inputs=add(inputs,'bed',results(n).b_g,'doublevec',1,models.p.parameters.numberofnodes);
     79        inputs=add(inputs,'velocity',results(n).u_g,'doublevec',3,models.p.parameters.numberofnodes);
     80        inputs=add(inputs,'pressure',results(n).p_g,'doublevec',1,models.p.parameters.numberofnodes);
     81        inputs=add(inputs,'temperature',results(n).t_g,'doublevec',1,models.t.parameters.numberofnodes);
    8282
    8383        %Deal with temperature first
    8484        displaystring(md.debug,'\n%s',['    computing temperatures...']);
    85         [solution(n+1).t_g models.t.loads melting_offset]=thermal_core_nonlinear(models.t,inputs,'thermal','transient');
    86         inputs=add(inputs,'temperature',solution(n+1).t_g,'doublevec',1,models.t.parameters.numberofnodes);
     85        [results(n+1).t_g models.t.loads melting_offset]=thermal_core_nonlinear(models.t,inputs,'thermal','transient');
     86        inputs=add(inputs,'temperature',results(n+1).t_g,'doublevec',1,models.t.parameters.numberofnodes);
    8787       
    8888        displaystring(md.debug,'\n%s',['    computing melting...']);
    8989        inputs=add(inputs,'melting_offset',melting_offset,'double');
    90         solution(n+1).m_g=diagnostic_core_linear(models.m,inputs,'melting','transient');
     90        results(n+1).m_g=diagnostic_core_linear(models.m,inputs,'melting','transient');
    9191
    9292        %Compute depth averaged temperature
    93         temperature_average=FieldDepthAverage(models.t.elements,models.t.nodes,models.t.loads,models.t.materials,solution(n+1).t_g,'temperature');
     93        temperature_average=FieldDepthAverage(models.t.elements,models.t.nodes,models.t.loads,models.t.materials,results(n+1).t_g,'temperature');
    9494        inputs=add(inputs,'temperature_average',temperature_average,'doublevec',1,models.t.parameters.numberofnodes);
    9595
    9696        %Deal with velocities.
    9797        rawresults=diagnostic_core(models,inputs);
    98         solution(n+1).u_g=rawresults.u_g; solution(n+1).p_g=rawresults.p_g;
     98        results(n+1).u_g=rawresults.u_g; results(n+1).p_g=rawresults.p_g;
    9999
    100100        %compute new thickness
    101101        displaystring(md.debug,'\n%s',['    computing new thickness...']);
    102         inputs=add(inputs,'velocity',solution(n+1).u_g,'doublevec',3,models.p.parameters.numberofnodes);
     102        inputs=add(inputs,'velocity',results(n+1).u_g,'doublevec',3,models.p.parameters.numberofnodes);
    103103        rawresults=prognostic_core(models,inputs,'prognostic','');
    104104        new_thickness=rawresults.h_g;
     
    106106        %update surface and bed using the new thickness
    107107        displaystring(md.debug,'\n%s',['    updating geometry...']);
    108         [new_thickness,new_bed,new_surface]=UpdateGeometry(models.p.elements,models.p.nodes,models.p.loads,models.p.materials,models.p.parameters,new_thickness,solution(n).b_g,solution(n).s_g);
     108        [new_thickness,new_bed,new_surface]=UpdateGeometry(models.p.elements,models.p.nodes,models.p.loads,models.p.materials,models.p.parameters,new_thickness,results(n).b_g,results(n).s_g);
    109109
    110         %Record bed surface and thickness in the solution
    111         solution(n+1).h_g=new_thickness;
    112         solution(n+1).b_g=new_bed;
    113         solution(n+1).s_g=new_surface;
     110        %Record bed surface and thickness in the results
     111        results(n+1).h_g=new_thickness;
     112        results(n+1).b_g=new_bed;
     113        results(n+1).s_g=new_surface;
    114114
    115115        %figure out if time stepping is good
    116116        %displaystring(md.debug,'   checking time stepping...'));
    117         %[back,dt,time]=TimeStepping(md,solution,dt,time);
     117        %[back,dt,time]=TimeStepping(md,results,dt,time);
    118118        %if back,
    119119        %       continue;
     
    135135end
    136136
    137 %Load results onto model
    138 results=struct('step',[],'time',[],'vx',[],'vy',[],'vel',[],'pressure',[],'thickness',[],'surface',[],'bed',[]);
    139 for i=1:length(solution),
    140         results(i).step=solution(i).step;
    141         results(i).time=solution(i).time/yts;
    142         results(i).vx=solution(i).u_g(1:3:end)*yts;
    143         results(i).vy=solution(i).u_g(2:3:end)*yts;
    144         results(i).vz=solution(i).u_g(3:3:end)*yts;
    145         results(i).vel=sqrt(solution(i).u_g(1:3:end).^2+solution(i).u_g(2:3:end).^2+solution(i).u_g(3:3:end).^2)*yts;
    146         results(i).pressure=solution(i).p_g;
    147         results(i).bed=solution(i).b_g;
    148         results(i).surface=solution(i).s_g;
    149         results(i).thickness=solution(i).h_g;
    150         results(i).temperature=solution(i).t_g;
    151         results(i).melting=solution(i).m_g;
    152 end
     137%process results
    153138if ~isstruct(md.results), md.results=struct(); end
    154 md.results.transient=results;
     139md.results.transient=processresults(results,models,'transient');
Note: See TracChangeset for help on using the changeset viewer.