Loading...
Searching...
No Matches

## crotg()

subroutine crotg | ( | complex(wp) | a,
|  | complex(wp) | b,
|  | real(wp) | c,
|  | complex(wp) | s )

CROTG generates a Givens rotation with real cosine and complex sine.

Purpose:

      !>
      !> CROTG constructs a plane rotation
      !>    [  c         s ] [ a ] = [ r ]
      !>    [ -conjg(s)  c ] [ b ]   [ 0 ]
      !> where c is real, s is complex, and c**2 + conjg(s)*s = 1.
      !>
      !> The computation uses the formulas
      !>    |x| = sqrt( Re(x)**2 + Im(x)**2 )
      !>    sgn(x) = x / |x|  if x /= 0
      !>           = 1        if x  = 0
      !>    c = |a| / sqrt(|a|**2 + |b|**2)
      !>    s = sgn(a) * conjg(b) / sqrt(|a|**2 + |b|**2)
      !>    r = sgn(a)*sqrt(|a|**2 + |b|**2)
      !> When a and b are real and r /= 0, the formulas simplify to
      !>    c = a / r
      !>    s = b / r
      !> the same as in SROTG when |a| > |b|.  When |b| >= |a|, the
      !> sign of c and s will be different from those computed by SROTG
      !> if the signs of a and b are not the same.
      !>
      !>

See also
  lartg: generate plane rotation, more accurate than BLAS rot,
  lartgp: generate plane rotation, more accurate than BLAS rot

Parameters

  [in,out]

  A

      !>          A is COMPLEX
      !>          On entry, the scalar a.
      !>          On exit, the scalar r.
      !>

  [in]

  B

      !>          B is COMPLEX
      !>          The scalar b.
      !>

  [out]

  C

      !>          C is REAL
      !>          The scalar c.
      !>

  [out]

  S

      !>          S is COMPLEX
      !>          The scalar s.
      !>

Author
  Weslley Pereira, University of Colorado Denver, USA

Date
  December 2021

Further Details:

      !>
      !> Based on the algorithm from
      !>
      !>  Anderson E. (2017)
      !>  Algorithm 978: Safe Scaling in the Level 1 BLAS
      !>  ACM Trans Math Softw 44:1--28
      !>  https://doi.org/10.1145/3061665
      !>
      !>