Changeset 4115
- Timestamp:
- 06/22/10 08:40:18 (15 years ago)
- Location:
- issm/trunk/src/m/solvers
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/solvers/solver_diagnostic_nonlinear.m
r4114 r4115 1 function [femmodel ug varargout]= diagnostic_core_nonlinear(femmodel,conserve_loads)2 % DIAGNOSTIC_CORE_NONLINEAR - core solution of diagnostic non-linear1 function [femmodel ug varargout]=solver_diagnostic_nonlinear(femmodel,conserve_loads) 2 %SOLVER_DIAGNOSTIC_NONLINEAR - core solver of diagnostic run 3 3 % 4 4 % Usage: 5 % [femmodel ug varargout]= diagnostic_core_nonlinear(femmodel,conserve_loads)5 % [femmodel ug varargout]=solver_diagnostic_nonlinear(femmodel,conserve_loads) 6 6 7 7 … … 44 44 45 45 %Update inputs using new solution 46 femmodel.elements= UpdateInputsFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters,ug);46 femmodel.elements=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters,ug); 47 47 48 48 displaystring(femmodel.parameters.Verbose,'%s',' penalty constraints'); -
issm/trunk/src/m/solvers/solver_linear.m
r4114 r4115 1 function u_g=diagnostic_core_linear(m,analysis_type,sub_analysis_type)2 % DIAGNOSTIC_CORE_LINEAR -linear solution sequence1 function [femmodel u_g]=solver_linear(femmodel) 2 %SOLVER_LINEAR - core solver of any linear solution sequence 3 3 % 4 4 % Usage: 5 % u_g=diagnostic_core_linear(m,analysis_type,sub_analysis_type)5 % [femmodel, u_g]=solver_linear(femmodel) 6 6 7 7 %stiffness and load generation only: 8 m.parameters.Kflag=1; m.parameters.Pflag=1;8 femmodel.parameters.Kflag=1; femmodel.parameters.Pflag=1; 9 9 10 10 %system matrices 11 [K_gg, p_g]=SystemMatrices( m.elements,m.nodes,m.vertices,m.loads,m.materials,m.parameters,analysis_type,sub_analysis_type);12 [K_gg, p_g,kmax]=PenaltySystemMatrices(K_gg,p_g, m.elements,m.nodes,m.vertices,m.loads,m.materials,m.parameters,analysis_type,sub_analysis_type);11 [K_gg, p_g]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 12 [K_gg, p_g,kmax]=PenaltySystemMatrices(K_gg,p_g,femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 13 13 14 14 %Reduce tangent matrix from g size to f size 15 [K_ff, K_fs] = Reducematrixfromgtof( K_gg, m.Gmn, m.nodesets);16 displaystring( m.parameters.Verbose>1,'%s%g',' condition number of stiffness matrix: ',condest(K_ff));15 [K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.Gmn, femmodel.nodesets); 16 displaystring(femmodel.parameters.Verbose>1,'%s%g',' condition number of stiffness matrix: ',condest(K_ff)); 17 17 18 18 %Reduce load from g size to f size 19 [p_f] = Reduceloadfromgtof( p_g, m.Gmn, K_fs, m.ys, m.nodesets);19 p_f = Reduceloadfromgtof( p_g, femmodel.Gmn, K_fs, femmodel.ys, femmodel.nodesets); 20 20 21 21 %Solve 22 [u_f]=Solver(K_ff,p_f,[],m.parameters);22 u_f=Solver(K_ff,p_f,[],femmodel.parameters); 23 23 24 24 %Merge back to g set 25 [u_g]= Mergesolutionfromftog( u_f, m.Gmn, m.ys, m.nodesets ); 26 27 end %end function 25 u_g= Mergesolutionfromftog( u_f, femmodel.Gmn, femmodel.ys, femmodel.nodesets ); -
issm/trunk/src/m/solvers/solver_thermal_nonlinear.m
r4114 r4115 1 function [ t_g ,loads, melting_offset]=thermal_core_nonlinear(m,analysis_type,sub_analysis_type)2 % THERMAL_CORE_NONLINEAR - core of thermal solution sequence.3 % model is return together with temperature1 function [femmodel t_g ,melting_offset]=solver_thermal_nonlinear(femmodel) 2 %SOLVER_THERMAL_NONLINEAR - core of thermal solution sequence. 3 % femmodel is returned together with temperature and melting_offset, in case loads have been modified 4 4 % 5 5 % Usage: 6 % [ t_g ,loads, melting_offset]=thermal_core_nonlinear(m,analysis_type,sub_analysis_type);6 % [femmodel t_g melting_offset]=solver_thermal_nonlinear(femmodel) 7 7 8 8 count=1; 9 9 converged=0; 10 10 11 % we are going to return the loads, make them a variable of this routine 12 loads=m.loads;11 %stiffness and load generation only: 12 femmodel.parameters.Kflag=1; femmodel.parameters.Pflag=1; 13 13 14 %stiffness and load generation only: 15 m.parameters.Kflag=1; m.parameters.Pflag=1; 16 17 displaystring(m.parameters.Verbose,'\n%s',[' starting direct shooting method']); 18 14 displaystring(femmodel.parameters.Verbose,'\n%s',[' starting direct shooting method']); 19 15 while(~converged), 20 16 21 17 %Update inputs in datasets 22 18 if count==1 reset_penalties=0; else reset_penalties=1; end 23 [m.elements m.loads]=UpdateInputsFromConstant(m.elements,m.nodes,m.vertices,loads,m.materials,m.parameters,reset_penalties,ResetPenaltiesEnum);19 InputUpdateFromConstant(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,reset_penalties,ResetPenaltiesEnum); 24 20 25 21 %system matrices 26 if ~m.parameters.Lowmem 27 if count==1 28 displaystring(m.parameters.Verbose,'%s',[' system matrices']); 29 [K_gg_nopenalty, p_g_nopenalty]=SystemMatrices(m.elements,m.nodes,m.vertices,loads,m.materials,m.parameters,analysis_type,sub_analysis_type); 30 end 31 displaystring(m.parameters.Verbose,'%s',[' penalty system matrices']); 32 [K_gg , p_g, melting_offset]=PenaltySystemMatrices(K_gg_nopenalty,p_g_nopenalty,m.elements,m.nodes,m.vertices,loads,m.materials,m.parameters,analysis_type,sub_analysis_type); 33 else 34 m.parameters.Verbose 35 displaystring(m.parameters.Verbose,'%s',[' system matrices']); 36 [K_gg , p_g]=SystemMatrices(m.elements,m.nodes,m.vertices,loads,m.materials,m.parameters,analysis_type,sub_analysis_type); 37 displaystring(m.parameters.Verbose,'%s',[' penalty system matrices']); 38 [K_gg , p_g, melting_offset]=PenaltySystemMatrices(K_gg,p_g,m.elements,m.nodes,m.vertices,loads,m.materials,m.parameters,analysis_type,sub_analysis_type); 22 if count==1 23 displaystring(femmodel.parameters.Verbose,'%s',[' system matrices']); 24 [K_gg_nopenalty, p_g_nopenalty]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,analysis_type,sub_analysis_type); 39 25 end 26 displaystring(femmodel.parameters.Verbose,'%s',[' penalty system matrices']); 27 [K_gg , p_g, melting_offset]=PenaltySystemMatrices(K_gg_nopenalty,p_g_nopenalty,femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,analysis_type,sub_analysis_type); 40 28 41 29 %Reduce tangent matrix from g size to f size 42 [K_ff, K_fs] = Reducematrixfromgtof( K_gg, m.Gmn, m.nodesets);30 [K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.Gmn, femmodel.nodesets); 43 31 44 32 %Reduce load from g size to f size 45 [p_f] = Reduceloadfromgtof( p_g, m.Gmn, K_fs, m.ys, m.nodesets);33 p_f = Reduceloadfromgtof( p_g, femmodel.Gmn, K_fs, femmodel.ys, femmodel.nodesets); 46 34 47 %Solve 48 displaystring(m.parameters.Verbose,'%s%g',' condition number of stiffness matrix: ',condest(K_ff)); 49 [t_f]=Solver(K_ff,p_f,[],m.parameters); 35 displaystring(femmodel.parameters.Verbose,'%s%g',' condition number of stiffness matrix: ',condest(K_ff)); 36 t_f=Solver(K_ff,p_f,[],femmodel.parameters); 50 37 51 %Merge back to g set 52 displaystring(m.parameters.Verbose,'%s',[' merging solution back to g set']); 53 [t_g]= Mergesolutionfromftog( t_f, m.Gmn, m.ys, m.nodesets ); 38 displaystring(femmodel.parameters.Verbose,'%s',[' merging solution back to g set']); 39 t_g= Mergesolutionfromftog( t_f, femmodel.Gmn, femmodel.ys, femmodel.nodesets ); 54 40 55 %Update inputs in datasets 56 displaystring(m.parameters.Verbose,'%s',[' update inputs']); 57 [m.elements,m.nodes,m.vertices,loads,m.materials,m.parameters] = UpdateInputsFromVector(m.elements,m.nodes,m.vertices,loads,m.materials,m.parameters,t_g,TemperatureEnum, VertexEnum); 41 displaystring(femmodel.parameters.Verbose,'%s',[' update inputs']); 42 femmodel.elements=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,t_g); 58 43 59 44 %penalty constraints 60 displaystring( m.parameters.Verbose,'%s',[' penalty constraints']);61 [ loads,constraints_converged,num_unstable_constraints] =PenaltyConstraints(m.elements,m.nodes,m.vertices,loads, m.materials,m.parameters,analysis_type,sub_analysis_type);45 displaystring(femmodel.parameters.Verbose,'%s',[' penalty constraints']); 46 [femmodel.loads,constraints_converged,num_unstable_constraints] =PenaltyConstraints(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads, femmodel.materials,femmodel.parameters,analysis_type,sub_analysis_type); 62 47 63 48 if ~converged, 64 displaystring( m.parameters.Verbose,'%s%i',' #unstable constraints ',num_unstable_constraints);49 displaystring(femmodel.parameters.Verbose,'%s%i',' #unstable constraints ',num_unstable_constraints); 65 50 66 if num_unstable_constraints<= m.parameters.MinThermalConstraints,51 if num_unstable_constraints<=femmodel.parameters.MinThermalConstraints, 67 52 converged=1; 68 53 end
Note:
See TracChangeset
for help on using the changeset viewer.