Changeset 5998


Ignore:
Timestamp:
09/23/10 15:02:51 (15 years ago)
Author:
Mathieu Morlighem
Message:

merged the two solvers

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  
    77        %Branch on partitioning schema requested
    88        kffpartitioning=femmodel.parameters.Kff;
     9        min_mechanical_constraints=femmodel.parameters.MinMechanicalConstraints;
    910
    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;
    1479        end
    1580end
Note: See TracChangeset for help on using the changeset viewer.