0001 function [t_g loads melting_offset]=icethermal_core(m,analysis_type,varargin);
0002
0003
0004
0005
0006
0007
0008 global cluster gridset
0009
0010
0011 elements=m.elements;
0012 grids=m.grids;
0013 materials=m.materials;
0014 loads=m.loads;
0015 ys=m.ys;
0016 gridset=m.gridset;
0017 G_mn=m.Gmn;
0018 params=m.params;
0019
0020
0021 sparsity=params.sparsity;
0022 solver_type=params.solver_type;
0023
0024
0025 if nargin==3,
0026 inputs=varargin{1};
0027 else
0028 inputs=struct();
0029 end
0030
0031
0032 t_g=[];
0033
0034 converged=0;
0035 firstiteration=1;
0036
0037 disp(sprintf('%s',' starting direct shooting method'));
0038
0039 dt=inputs.dt;
0040
0041
0042 pressure=inputs.pressure;
0043
0044 while(~converged),
0045
0046
0047
0048
0049 kflag=1;pflag=1;
0050
0051
0052 if firstiteration
0053 [K_gg,p_g]=SystemMatrices(elements,grids,loads,materials,kflag, pflag, params.sparsity,inputs,analysis_type);
0054 firstiteration=0;
0055 end
0056 [K_gg_penalized,p_g_penalized melting_offset]=PenaltySystemMatrices(grids,loads,materials,kflag, pflag, params.sparsity,inputs,analysis_type,K_gg,p_g);
0057
0058
0059
0060 [K_ff K_fs]=IceReducematrixfromgtof(K_gg_penalized,G_mn);
0061
0062
0063 p_f=IceReducerightside(p_g_penalized,G_mn,K_fs,ys);
0064
0065
0066 t_f=Solver(K_ff,p_f,params.solver_type);
0067
0068
0069 t_g= Mergesolution_g(t_f,G_mn,ys);
0070
0071 [loads,converged]=IcePenaltyConstraints(loads,grids,materials,params,struct('pressure',pressure, 'dt',dt, 'temperature',t_g));
0072
0073 end