source: issm/trunk/src/m/solvers/solver_stokescoupling_nonlinear.m@ 5812

Last change on this file since 5812 was 5812, checked in by seroussi, 15 years ago

minor bad name

File size: 3.3 KB
Line 
1function femmodel=solver_couplingstokes_nonlinear(femmodel,conserve_loads)
2%SOLVER_COUPLINGSTOKES_NONLINEAR - core solver of coupling run
3%
4% Usage:
5% [femmodel]=solver_couplingstokes_nonlinear(femmodel,conserve_loads)
6
7 %initialize solution vector
8 converged=0; count=1;
9
10 %First get ug=ug_horiz+ug_vert
11 femmodel=SetCurrentConfiguration(femmodel,DiagnosticHorizAnalysisEnum);
12 ug_horiz=GetSolutionFromInputs(femmodel.elements, femmodel.nodes, femmodel.vertices, loads, femmodel.materials, femmodel.parameters);
13
14 femmodel=SetCurrentConfiguration(femmodel,DiagnosticVertAnalysisEnum);
15 ug_vert=GetSolutionFromInputs(femmodel.elements, femmodel.nodes, femmodel.vertices, loads, femmodel.materials, femmodel.parameters);
16
17 ug=ug_horiz+ug_vert;
18
19 while(~converged),
20
21 old_ug=ug;
22
23 %First compute the horizontal velocity
24 femmodel=SetCurrentConfiguration(femmodel,DiagnosticHorizAnalysisEnum);
25
26 %keep a copy of loads for now
27 loads=femmodel.loads;
28
29 %Start non-linear iteration using input velocity:
30 ug_horiz=GetSolutionFromInputs(femmodel.elements, femmodel.nodes, femmodel.vertices, loads, femmodel.materials, femmodel.parameters);
31 uf_horiz=Reducevectorgtof( ug_horiz, femmodel.nodesets,femmodel.parameters);
32
33 %Update the solution to make sure that vx and vxold are similar
34 [femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters,ug_horiz);
35
36 %save pointer to old velocity
37 old_ug_horiz=ug_horiz;
38 old_uf_horiz=uf_horiz;
39
40 [K_gg,K_ff,K_fs,p_g,p_f,kmax]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters);
41
42 [K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.nodesets,femmodel.parameters);
43 p_f = Reduceloadfromgtof( p_g, K_fs, femmodel.ys, femmodel.nodesets,femmodel.parameters);
44
45 uf_horiz=Solver(K_ff,p_f,old_uf_horiz,femmodel.parameters);
46
47 ug_horiz= Mergesolutionfromftog( uf_horiz, femmodel.ys, femmodel.nodesets,femmodel.parameters);
48
49 [femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters,ug_horiz);
50
51 %Figure out if convergence have been reached
52 converged=convergence(K_ff,p_f,uf,old_uf,femmodel.parameters);
53
54 %Then compute vertical velocity
55 femmodel=SetCurrentConfiguration(femmodel,DiagnosticVertAnalysisEnum);
56 [K_gg,K_ff,K_fs,p_g,p_f,kmax]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters);
57
58 [K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.nodesets,femmodel.parameters);
59 p_f = Reduceloadfromgtof( p_g, K_fs, femmodel.ys, femmodel.nodesets,femmodel.parameters);
60
61 displaystring(femmodel.parameters.Verbose>1,'%s%g',' condition number of stiffness matrix: ',condest(K_ff));
62 uf_vert=Solver(K_ff,p_f,[],femmodel.parameters);
63
64 ug_vert= Mergesolutionfromftog( uf_vert, femmodel.ys, femmodel.nodesets,femmodel.parameters);
65
66 [femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,ug_vert);
67
68 %Finally sum the two velocities and check the convergence
69 ug=ug_horiz+ug_vert;
70 converged=convergence([],[],ug,old_ug,femmodel.parameters);
71
72 end
73
74end
Note: See TracBrowser for help on using the repository browser.