Changeset 1667
- Timestamp:
- 08/13/09 13:15:05 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/solutions/cielo/diagnostic_core_nonlinear.m
r1666 r1667 9 9 10 10 % initialize solution vector 11 count=1; 12 converged=0; 13 11 converged=0; count=1; 14 12 soln(count).u_g=get(inputs,'velocity',[1 1 (m.parameters.numberofdofspernode>=3) (m.parameters.numberofdofspernode>=3)]); %only keep vz if running with more than 3 dofs per node 15 13 soln(count).u_f= Reducevectorgtof(soln(count).u_g,m.nodesets); … … 35 33 [K_gg , p_g, kmax]=PenaltySystemMatrices(K_gg_nopenalty,p_g_nopenalty,m.elements,m.nodes,loads,m.materials,m.parameters,inputs,analysis_type,sub_analysis_type); 36 34 37 38 35 %Reduce tangent matrix from g size to f size 39 36 [K_ff, K_fs] = Reducematrixfromgtof( K_gg, m.Gmn, m.nodesets); … … 46 43 47 44 %Solve 48 displaystring(m.parameters.debug>1,'%s%g',' condition number of stiffness matrix: ',condest(K_ff));49 45 [soln(count).u_f]=Solver(K_ff,p_f,[],m.parameters); 50 46 … … 59 55 60 56 %Figure out if convergence have been reached 61 62 %Solver 63 solver_residue=norm(K_ff*soln(count).u_f-p_f,2)/norm(p_f,2); 64 displaystring(m.parameters.debug>1,'%-60s%g',' convergence criterion: norm(K[n]U[n]-F)/norm(F)',solver_residue); 65 66 %Force equilibrium 67 res=norm(K_ff*soln(count-1).u_f-p_f,2)/norm(p_f,2); 68 if (res<=m.parameters.eps_res), 69 displaystring(m.parameters.debug,'%-60s%g%s%g%s',' mechanical equilibrium convergence criterion',res*100,' < ',m.parameters.eps_res*100,' %'); 70 converged=1; 71 else 72 displaystring(m.parameters.debug,'%-60s%g%s%g%s',' mechanical equilibrium convergence criterion',res*100,' > ',m.parameters.eps_res*100,' %'); 73 converged=1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ATTTENETIONHiohfiow 74 end 75 76 %Relative criterion 77 dug=soln(count).u_g-soln(count-1).u_g; 78 ndu=norm(dug,2); 79 nu=norm(soln(count-1).u_g,2); 80 if (ndu/nu<=m.parameters.eps_rel), 81 displaystring(m.parameters.debug,'%-60s%g%s%g%s',' relative convergence criterion: norm(du)/norm(u)',ndu/nu*100,' < ',m.parameters.eps_rel*100,' %'); 82 converged=1; 83 else 84 displaystring(m.parameters.debug,'%-60s%g%s%g%s',' relative convergence criterion: norm(du)/norm(u)',ndu/nu*100,' > ',m.parameters.eps_rel*100,' %'); 85 converged=0; 86 end 87 88 %Absolute criterion 89 nduinf=norm(dug,inf)*m.parameters.yts; 90 if ~isnan(m.parameters.eps_abs), 91 if (nduinf<=m.parameters.eps_abs), 92 displaystring(m.parameters.debug,'%-60s%g%s%g%s',' absolute convergence criterion: max(du)',nduinf,' < ',m.parameters.eps_abs,' m/yr'); 93 else 94 displaystring(m.parameters.debug,'%-60s%g%s%g%s',' absolute convergence criterion: max(du)',nduinf,' > ',m.parameters.eps_abs,' m/yr'); 95 converged=0; 96 end 97 end 98 disp(' ') 57 converged=convergence(K_ff,p_f,soln(count).u_f,soln(count-1).u_f,m.parameters); 99 58 100 59 %rift convergence criterion
Note:
See TracChangeset
for help on using the changeset viewer.