Changeset 5998
- Timestamp:
- 09/23/10 15:02:51 (15 years ago)
- Location:
- issm/trunk/src/m/solvers
- Files:
-
- 2 deleted
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/solvers/solver_diagnostic_nonlinear.m
r5787 r5998 7 7 %Branch on partitioning schema requested 8 8 kffpartitioning=femmodel.parameters.Kff; 9 min_mechanical_constraints=femmodel.parameters.MinMechanicalConstraints; 9 10 10 if ~kffpartitioning, 11 femmodel=solver_diagnostic_nonlinear_kgg(femmodel,conserve_loads); 12 else 13 femmodel=solver_diagnostic_nonlinear_kff(femmodel,conserve_loads); 11 %keep a copy of loads for now 12 loads=femmodel.loads; 13 14 %initialize solution vector 15 converged=0; count=1; 16 17 %Start non-linear iteration using input velocity: 18 ug=GetSolutionFromInputs(femmodel.elements, femmodel.nodes, femmodel.vertices, loads, femmodel.materials, femmodel.parameters); 19 uf=Reducevectorgtof( ug, femmodel.nodesets,femmodel.parameters); 20 21 %Update the solution to make sure that vx and vxold are similar 22 [femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters,ug); 23 24 while(~converged), 25 26 %save pointer to old velocity 27 old_ug=ug; 28 old_uf=uf; 29 30 if kffpartitioning, 31 disp('-------------- file: solver_diagnostic_nonlinear.m line: 31'); 32 [K_gg,K_ff,K_fs,p_g,p_f,kmax]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters); 33 p_f = Reduceload( p_f, K_fs, femmodel.ys); 34 else 35 disp('-------------- file: solver_diagnostic_nonlinear.m line: 35'); 36 [K_gg,K_ff,K_fs,p_g,p_f,kmax]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters); 37 [K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.nodesets,femmodel.parameters); 38 p_f = Reduceloadfromgtof( p_g, K_fs, femmodel.ys, femmodel.nodesets,femmodel.parameters); 39 end 40 41 uf=Solver(K_ff,p_f,old_uf,femmodel.parameters); 42 ug= Mergesolutionfromftog( uf, femmodel.ys, femmodel.nodesets,femmodel.parameters); 43 44 [femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters,ug); 45 [loads,constraints_converged,num_unstable_constraints] =PenaltyConstraints( femmodel.elements,femmodel.nodes,femmodel.vertices,loads, femmodel.materials,femmodel.parameters); 46 47 displaystring(femmodel.parameters.Verbose,'%s%i',' number of unstable constraints: ',num_unstable_constraints); 48 49 %Figure out if convergence have been reached 50 converged=convergence(K_ff,p_f,uf,old_uf,femmodel.parameters); 51 52 %add convergence status into status 53 [femmodel.elements loads]=InputUpdateFromConstant(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters,double(converged),ConvergedEnum); 54 55 %rift convergence 56 if ~constraints_converged, 57 if converged, 58 if num_unstable_constraints <= min_mechanical_constraints, 59 converged=1; 60 else 61 converged=0; 62 end 63 end 64 end 65 66 %increase count 67 count=count+1; 68 if(converged==1)break; 69 if(count>max_nonlinear_iterations), 70 displaystring(femmodel.parameters.Verbose,'%s%i%s',' maximum number of iterations ',max_nonlinear_iterations,' exceeded'); 71 end 72 end 73 74 end 75 76 %deal with loads: 77 if conserve_loads==false, 78 femmodel.loads=loads; 14 79 end 15 80 end
Note:
See TracChangeset
for help on using the changeset viewer.