Public Types | Public Member Functions | List of all members
quadraticEqn Class Reference

Container to encapsulate various operations for quadratic equation of the forms with real coefficients: More...

Inheritance diagram for quadraticEqn:
Inheritance graph
[legend]
Collaboration diagram for quadraticEqn:
Collaboration graph
[legend]

Public Types

enum  components { A, B, C }
 
- Public Types inherited from VectorSpace< quadraticEqn, scalar, 3 >
typedef VectorSpace< Form, Cmpt, Ncmpts > vsType
 
typedef Cmpt cmptType
 
typedef Cmpt magType
 
typedef Cmpt * iterator
 

Public Member Functions

 quadraticEqn ()
 
 quadraticEqn (const Foam::zero)
 
 quadraticEqn (const scalar a, const scalar b, const scalar c)
 
scalar a () const
 
scalar b () const
 
scalar c () const
 
scalar & a ()
 
scalar & b ()
 
scalar & c ()
 
scalar value (const scalar x) const
 
scalar derivative (const scalar x) const
 
scalar error (const scalar x) const
 
Roots< 2 > roots () const
 
- Public Member Functions inherited from VectorSpace< quadraticEqn, scalar, 3 >
 VectorSpace ()=default
 
 VectorSpace (const Foam::zero)
 
 VectorSpace (const VectorSpace< Form, Cmpt, Ncmpts > &vs)
 
 VectorSpace (const VectorSpace< Form2, Cmpt2, Ncmpts > &)
 
 VectorSpace (Istream &is)
 
const Cmpt & component (const direction) const
 
Cmpt & component (const direction)
 
void component (Cmpt &, const direction) const
 
void replace (const direction, const Cmpt &)
 
const Cmpt * cdata () const noexcept
 
Cmpt * data () noexcept
 
const ConstBlock< SubVector, BStart > block () const
 
const Foam::VectorSpace< Form, Cmpt, Ncmpts >::template ConstBlock< SubVector, BStart > block () const
 
const Cmpt & operator[] (const direction) const
 
Cmpt & operator[] (const direction)
 
void operator= (const VectorSpace< Form, Cmpt, Ncmpts > &)
 
void operator= (const Foam::zero)
 
void operator+= (const VectorSpace< Form, Cmpt, Ncmpts > &)
 
void operator-= (const VectorSpace< Form, Cmpt, Ncmpts > &)
 
void operator*= (const scalar)
 
void operator/= (const scalar)
 
iterator begin () noexcept
 
const_iterator begin () const noexcept
 
iterator end () noexcept
 
const_iterator end () const noexcept
 
const_iterator cbegin () const noexcept
 
const_iterator cend () const noexcept
 

Additional Inherited Members

- Static Public Member Functions inherited from VectorSpace< quadraticEqn, scalar, 3 >
static constexpr direction size () noexcept
 
static Form uniform (const Cmpt &s)
 
- Public Attributes inherited from VectorSpace< quadraticEqn, scalar, 3 >
const typedef Cmpt * const_iterator
 
Cmpt v_ [Ncmpts]
 
- Static Public Attributes inherited from VectorSpace< quadraticEqn, scalar, 3 >
static constexpr direction dim
 
static constexpr direction nComponents
 
static constexpr direction mRows
 
static constexpr direction nCols
 
static const char *const typeName
 
static const char *const componentNames []
 
static const Form zero
 
static const Form one
 
static const Form max
 
static const Form min
 
static const Form rootMax
 
static const Form rootMin
 

Detailed Description

Container to encapsulate various operations for quadratic equation of the forms with real coefficients:

\[ a*x^2 + b*x + c = 0 x^2 + B*x + C = 0 \]

The expressions for the roots of quadraticEqn are as follows:

\[ x1 = - (b + sign(b) sqrt(b^2 - 4ac)/(2*a)) x2 = c/(a*x1) \]

where (b^2 - 4ac) is evaluated by fused multiply-adds to avoid detrimental cancellation.

Reference:

    Cancellation-avoiding quadratic formula (tag:F):
        Ford, W. (2014).
        Numerical linear algebra with applications: Using MATLAB.
        London: Elsevier/Academic Press.
        DOI:10.1016/C2011-0-07533-6

    Kahan's algo. to compute 'b^2-a*c' using fused multiply-adds (tag:JML):
        Jeannerod, C. P., Louvet, N., & Muller, J. M. (2013).
        Further analysis of Kahan's algorithm for the accurate
        computation of 2× 2 determinants.
        Mathematics of Computation, 82(284), 2245-2264.
        DOI:10.1090/S0025-5718-2013-02679-8
See also
Test-quadraticEqn.C
Source files

Definition at line 84 of file quadraticEqn.H.

Member Enumeration Documentation

◆ components

enum components
Enumerator

Definition at line 91 of file quadraticEqn.H.

Constructor & Destructor Documentation

◆ quadraticEqn() [1/3]

quadraticEqn ( )
inline

Definition at line 23 of file quadraticEqnI.H.

◆ quadraticEqn() [2/3]

quadraticEqn ( const Foam::zero  )
inline

Definition at line 27 of file quadraticEqnI.H.

◆ quadraticEqn() [3/3]

quadraticEqn ( const scalar  a,
const scalar  b,
const scalar  c 
)
inline

Definition at line 34 of file quadraticEqnI.H.

References A, B, Foam::constant::physicoChemical::b, Foam::constant::universal::c, and C.

Member Function Documentation

◆ a() [1/2]

Foam::scalar & a ( ) const
inline

Definition at line 48 of file quadraticEqnI.H.

References A.

Referenced by quadraticEqn::roots().

Here is the caller graph for this function:

◆ b() [1/2]

Foam::scalar & b ( ) const
inline

Definition at line 54 of file quadraticEqnI.H.

References B.

Referenced by quadraticEqn::roots().

Here is the caller graph for this function:

◆ c() [1/2]

Foam::scalar & c ( ) const
inline

Definition at line 60 of file quadraticEqnI.H.

References C.

Referenced by quadraticEqn::roots().

Here is the caller graph for this function:

◆ a() [2/2]

scalar& a ( )
inline

◆ b() [2/2]

scalar& b ( )
inline

◆ c() [2/2]

scalar& c ( )
inline

◆ value()

Foam::scalar value ( const scalar  x) const
inline

◆ derivative()

Foam::scalar derivative ( const scalar  x) const
inline

Definition at line 90 of file quadraticEqnI.H.

References Foam::constant::physicoChemical::b, and x.

◆ error()

Foam::scalar error ( const scalar  x) const
inline

Definition at line 96 of file quadraticEqnI.H.

References Foam::constant::physicoChemical::b, Foam::constant::universal::c, Foam::mag(), and x.

Here is the call graph for this function:

◆ roots()

Foam::Roots< 2 > roots ( ) const

Definition at line 27 of file quadraticEqn.C.

References quadraticEqn::a(), quadraticEqn::b(), quadraticEqn::c(), Foam::roots::complex, Foam::mag(), Foam::roots::nan, Foam::sign(), Foam::sqrt(), and x.

Here is the call graph for this function:

The documentation for this class was generated from the following files: