Changeset 20601


Ignore:
Timestamp:
05/10/16 15:45:24 (9 years ago)
Author:
Eric.Larour
Message:

CHG: introducing threshold in linear solver.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/solutionsequences/solutionsequence_linear.cpp

    r17372 r20601  
    1919        Vector<IssmDouble>*  ys  = NULL;
    2020        int  configuration_type;
     21       
     22        /*solver convergence test: */
     23        IssmDouble nKUF;
     24        IssmDouble nF;
     25        IssmDouble solver_residue;
     26        Vector<IssmDouble>* KU=NULL;
     27        Vector<IssmDouble>* KUF=NULL;
     28
     29
    2130
    2231        /*Recover parameters: */
     
    2736        Reduceloadx(pf, Kfs, ys); delete Kfs;
    2837        Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters);
     38       
     39        /*Check that the solver converged nicely: */
     40               
     41        //compute KUF = KU - F = K*U - F
     42        KU=uf->Duplicate(); Kff->MatMult(uf,KU);
     43        KUF=KU->Duplicate(); KU->Copy(KUF); KUF->AYPX(pf,-1.0);
     44
     45        //compute norm(KUF), norm(F) and residue
     46        nKUF=KUF->Norm(NORM_TWO);
     47        nF=pf->Norm(NORM_TWO);
     48        solver_residue=nKUF/nF;
     49        if(solver_residue>pow(10,-6))_error_("   solver residue too high!: norm(KU-F)/norm(F)=" << solver_residue << "\n");
     50
     51        //clean up
     52        delete KU; delete KUF;
    2953        delete Kff; delete pf; delete df;
    30 //#ifdef  _HAVE_ADOLC_
    31 //        for (int i =0; i<uf->svector->M; ++i) {
    32 //          ADOLC_DUMP_MACRO(uf->svector->vector[i]);
    33 //        }
    34 //#endif
     54
     55        //#ifdef  _HAVE_ADOLC_
     56        //        for (int i =0; i<uf->svector->M; ++i) {
     57        //          ADOLC_DUMP_MACRO(uf->svector->vector[i]);
     58        //        }
     59        //#endif
     60       
    3561        Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete uf; delete ys;
    3662        InputUpdateFromSolutionx(femmodel,ug);
Note: See TracChangeset for help on using the changeset viewer.