Changeset 1224


Ignore:
Timestamp:
07/02/09 16:36:30 (16 years ago)
Author:
Mathieu Morlighem
Message:

Added residue criterion

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/parallel/diagnostic_core_nonlinear.cpp

    r667 r1224  
    1616        /*solution : */
    1717        Vec ug=NULL;
     18        Vec uf=NULL;
    1819        Vec old_ug=NULL;
    1920        Vec old_uf=NULL;
    20         Vec uf=NULL;
    2121        DataSet* loads=NULL;
     22        Vec residue=NULL;
     23        Vec KU=NULL;
    2224
    2325        /*intermediary: */
     
    3537        Vec dug=NULL;
    3638        double ndu,nduinf,nu;
     39        double nresidue;
    3740
    3841        /*parameters:*/
     
    4548        /*Recover parameters: */
    4649        kflag=1; pflag=1;
    47 
    48 
    4950
    5051        fem->parameters->FindParam((void*)&connectivity,"connectivity");
     
    8182                VecFree(&old_uf);old_uf=uf;
    8283
    83 
    8484                /*Update parameters: */
    8585                UpdateFromInputsx(fem->elements,fem->nodes,loads, fem->materials,inputs);
     
    111111                if (debug) _printf_("   solving\n");
    112112                Solverx(&uf, Kff, pf, old_uf, solver_string);
     113
     114                /*Compute residue*/
     115                VecDuplicate(uf,&KU); MatMultPatch(Kff,uf,KU);
     116                VecDuplicate(KU,&residue);VecCopy(KU,residue); VecAYPX(residue,-1.0,pf);
     117                VecNorm(residue,NORM_2,&nresidue); VecFree(&residue);
    113118       
    114119                //no need for Kff and pf anymore
    115120                MatFree(&Kff);VecFree(&pf);
    116 
    117121               
    118122                if (debug) _printf_("   merging solution from f to g set\n");
     
    130134                VecDuplicate(old_ug,&dug);VecCopy(old_ug,dug); VecAYPX(dug,-1.0,ug);
    131135                VecNorm(dug,NORM_2,&ndu);VecNorm(old_ug,NORM_2,&nu);VecNorm(dug,NORM_INFINITY,&nduinf); VecFree(&dug);
     136
     137                //residue
     138                if (debug) _printf_("%s%g\n","   Convergence criterion: norm(residue)=",nresidue);
    132139
    133140                //relative criterion
Note: See TracChangeset for help on using the changeset viewer.