Changeset 13065


Ignore:
Timestamp:
08/16/12 11:09:34 (13 years ago)
Author:
Mathieu Morlighem
Message:

CHG: simpler way of computing root of cubic equation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp

    r13064 r13065  
    81838183
    81848184        int        i;
    8185         IssmDouble a,c,d,z,s,viscosity;
     8185        IssmDouble z,s,viscosity,p,q,delta;
    81868186        IssmDouble tau_perp,tau_par,eps_b,A;
    81878187        IssmDouble epsilonvx[5]; /*exx eyy exy exz eyz*/
     
    82158215        A=matice->GetA();
    82168216
    8217         /*Solve for tau_perp*/
    8218         int        numroots;
    8219         IssmDouble roots[3];
    8220         a = A;
    8221         c = A *tau_perp*tau_perp;
    8222         d = - eps_b;
    8223         cubic(a,0.,c,d,roots,&numroots);
    8224         tau_par=roots[0];
    8225         //printf(" (%g =0?)\n",a*roots[0]*roots[0]*roots[0]+c*roots[0]+d);
     8217        /*Solve for tau_perp (http://fr.wikipedia.org/wiki/Méthode_de_Cardan)*/
     8218        p     = tau_perp *tau_perp;
     8219        q     = - eps_b/A;
     8220        delta = q *q + p*p*p*4./27.;
     8221        _assert_(delta>0);
     8222        tau_par = pow(0.5*(-q+sqrt(delta)),1./3.) - pow(0.5*(q+sqrt(delta)),1./3.);
    82268223
    82278224        /*Viscosity*/
    82288225        viscosity = 1./(2.*A*(tau_par*tau_par + tau_perp*tau_perp));
    8229         //printf("denom = %g (%g,%g)\n",tau_par*tau_par + tau_perp*tau_perp,tau_par,tau_perp);
    82308226        _assert_(!isnan(viscosity));
     8227        _assert_(viscosity > 0.);
    82318228
    82328229        /*Assign output pointer*/
Note: See TracChangeset for help on using the changeset viewer.