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

Last change on this file since 7392 was 7392, checked in by Mathieu Morlighem, 14 years ago

stupid bug

File size: 3.5 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 %Get parameters
8 kffpartitioning=femmodel.parameters.Kff;
9
10 %initialize solution vector
11 converged=0; count=1;
12
13 %First get ug=ug_horiz+ug_vert
14 femmodel=SetCurrentConfiguration(femmodel,DiagnosticHorizAnalysisEnum);
15 ug_horiz=GetSolutionFromInputs(femmodel.elements, femmodel.nodes, femmodel.vertices, femmodel.loads, femmodel.materials, femmodel.parameters);
16 uf_horiz=Reducevectorgtof( ug_horiz, femmodel.nodesets,femmodel.parameters);
17
18 while(~converged),
19
20 %First compute the horizontal velocity
21 femmodel=SetCurrentConfiguration(femmodel,DiagnosticHorizAnalysisEnum);
22
23 %Update the solution to make sure that vx and vxold are similar
24 [femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,ug_horiz);
25
26 %save pointer to old velocity
27 old_ug_horiz=ug_horiz;
28 old_uf_horiz=uf_horiz;
29
30 if kffpartitioning,
31 [K_gg_horiz,K_ff_horiz,K_fs_horiz,p_g_horiz,p_f_horiz,d_g_horiz,d_f_horiz,kmax_horiz]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters);
32 p_f_horiz = Reduceload( p_f_horiz, K_fs_horiz, femmodel.ys);
33 else
34 [K_gg_horiz,K_ff_horiz,K_fs_horiz,p_g_horiz,p_f_horiz,d_g_horiz,d_f_horiz,kmax]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters);
35 [K_ff_horiz, K_fs_horiz] = Reducematrixfromgtof( K_gg_horiz, femmodel.nodesets);
36 p_f_horiz = Reduceloadfromgtof( p_g_horiz, K_fs_horiz, femmodel.ys, femmodel.nodesets);
37 d_f_horiz=Reducevectorgtof( d_g_horiz, femmodel.nodesets,femmodel.parameters);
38
39 end
40
41 uf_horiz=Solver(K_ff_horiz,p_f_horiz,old_uf_horiz,d_f_horiz,femmodel.parameters);
42 ug_horiz= Mergesolutionfromftog( uf_horiz, femmodel.ys, femmodel.nodesets);
43
44 [femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,ug_horiz);
45
46 %Figure out if convergence have been reached
47 converged=convergence(K_ff_horiz,p_f_horiz,uf_horiz,old_uf_horiz,femmodel.parameters);
48
49 %Then compute vertical velocity
50 femmodel=SetCurrentConfiguration(femmodel,DiagnosticVertAnalysisEnum);
51
52 if kffpartitioning,
53 [K_gg_vert,K_ff_vert,K_fs_vert,p_g_vert,p_f_vert,d_g_vert,d_f_vert,kmax_vert]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters);
54 p_f_vert = Reduceload( p_f_vert, K_fs_vert, femmodel.ys);
55 else
56 [K_gg_vert,K_ff_vert,K_fs_vert,p_g_vert,p_f_vert,d_g_vert,d_f_vert,kmax_vert]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters);
57 [K_ff_vert, K_fs_vert] = Reducematrixfromgtof( K_gg_vert, femmodel.nodesets);
58 p_f_vert = Reduceloadfromgtof( p_g_vert, K_fs_vert, femmodel.ys, femmodel.nodesets);
59 d_f_vert=Reducevectorgtof( d_g_vert, femmodel.nodesets,femmodel.parameters);
60 end
61
62 uf_vert=Solver(K_ff_vert,p_f_vert,[],d_f_vert,femmodel.parameters);
63 ug_vert= Mergesolutionfromftog( uf_vert, femmodel.ys, femmodel.nodesets);
64
65 [femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,ug_vert);
66
67 end
68end
Note: See TracBrowser for help on using the repository browser.