source:
issm/oecreview/Archive/11319-11340/ISSM-11335-11336.diff@
11515
Last change on this file since 11515 was 11515, checked in by , 13 years ago | |
---|---|
File size: 3.3 KB |
-
proj/ice/larour/issm-uci-clean/trunk-jpl/src/m/solvers/solver_newton.m
1 function femmodel=solver_newton(femmodel) 2 %SOLVER_NEWTON - core solver of diagnostic run 3 % 4 % Usage: 5 % [femmodel]=solver_newton(femmodel) 6 7 %Branch on partitioning schema requested 8 maxiter=femmodel.parameters.DiagnosticMaxiter; 9 configuration_type=femmodel.parameters.ConfigurationType; 10 [femmodel.nodes]=UpdateConstraints(femmodel.nodes,femmodel.constraints,femmodel.parameters); 11 12 %initialize solution vector 13 converged=0; count=1; 14 15 %Start non-linear iteration using input velocity: 16 ug=GetSolutionFromInputs(femmodel.elements, femmodel.nodes, femmodel.vertices, femmodel.loads, femmodel.materials, femmodel.parameters); 17 uf=Reducevectorgtof( ug, femmodel.nodes,femmodel.parameters); 18 19 %Update the solution to make sure that vx and vxold are similar 20 [femmodel.elements femmodel.loads]=InputUpdateFromConstant(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,double(converged),ConvergedEnum); 21 [femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,ug); 22 23 while(~converged), 24 25 %save pointer to old velocity 26 old_ug=ug; 27 old_uf=uf; 28 29 %Solver forward model 30 [K_ff,K_fs,p_f,df,kmax]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 31 ys=CreateNodalConstraints(femmodel.nodes,configuration_type); 32 p_f=Reduceload( p_f, K_fs, ys); 33 issmprintf(VerboseSolver(),'%s%g',' condition number of stiffness matrix: ',condest(K_ff)); 34 uf=Solver(K_ff,p_f,old_uf,df,femmodel.parameters); 35 ug=Mergesolutionfromftog( uf, ys, femmodel.nodes,femmodel.parameters); 36 [femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,ug); 37 38 %Check convergence 39 converged=convergence(K_ff,p_f,uf,old_uf,femmodel.parameters); 40 if(converged==1) break; end 41 if(count>maxiter), 42 issmprintf(true,'%s%i%s',' maximum number of iterations ',maxiter,' exceeded'); 43 break; 44 end 45 46 %Prepare next iteration using Newton's method 47 [K_ff,K_fs,p_f,df,kmax]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 48 ys=CreateNodalConstraints(femmodel.nodes,configuration_type); 49 p_f=Reduceload( p_f, K_fs, ys); 50 pJf=p_f-K_ff*uf; 51 Jff=CreateJacobianMatrix(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,kmax); 52 duf=Solver(Jff,pJf,[],[],femmodel.parameters); 53 ys=0*ys; 54 uf=uf+duf; 55 ug=Mergesolutionfromftog(uf,ys,femmodel.nodes,femmodel.parameters); 56 [femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,ug); 57 58 %increase count 59 count=count+1; 60 61 end 62 end
Note:
See TracBrowser
for help on using the repository browser.