rotg3
Rotg: generate plane rotation (cf. lartg)
Usage
Functions
subroutine crotg
(a,
b,
c,
s)
DROTG subroutine
srotg
(a,
b,
c,
s)
SROTG subroutine
zrotg
(a,
b,
c,
s)
Detailed Description
Function Documentation
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
A
!> A is COMPLEX !> On entry, the scalar a. !> On exit, the scalar r. !>
B
!> B is COMPLEX !> The scalar b. !>
C
!> C is REAL !> The scalar c. !>
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 !> !>
Definition at line 88 of file crotg.f90.
subroutine drotg (real(wp) a, real(wp) b, real(wp) c, real(wp) s)
DROTG
Purpose:
!> !> DROTG constructs a plane rotation !> [ c s ] [ a ] = [ r ] !> [ -s c ] [ b ] [ 0 ] !> satisfying c**2 + s**2 = 1. !> !> The computation uses the formulas !> sigma = sgn(a) if |a| > |b| !> = sgn(b) if |b| >= |a| !> r = sigma*sqrt( a**2 + b**2 ) !> c = 1; s = 0 if r = 0 !> c = a/r; s = b/r if r != 0 !> The subroutine also computes !> z = s if |a| > |b|, !> = 1/c if |b| >= |a| and c != 0 !> = 1 if c = 0 !> This allows c and s to be reconstructed from z as follows: !> If z = 1, set c = 0, s = 1. !> If |z| < 1, set c = sqrt(1 - z**2) and s = z. !> If |z| > 1, set c = 1/z and s = sqrt( 1 - c**2). !> !>
See also
lartg: generate plane rotation, more accurate than BLAS rot,
lartgp: generate plane rotation, more accurate than BLAS rot
Parameters
A
!> A is DOUBLE PRECISION !> On entry, the scalar a. !> On exit, the scalar r. !>
B
!> B is DOUBLE PRECISION !> On entry, the scalar b. !> On exit, the scalar z. !>
C
!> C is DOUBLE PRECISION !> The scalar c. !>
S
!> S is DOUBLE PRECISION !> The scalar s. !>
Author
Edward Anderson, Lockheed Martin
Contributors:
Weslley Pereira, University of Colorado Denver, USA
Further Details:
!> !> 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 !> !>
Definition at line 91 of file drotg.f90.
subroutine srotg (real(wp) a, real(wp) b, real(wp) c, real(wp) s)
SROTG
Purpose:
!> !> SROTG constructs a plane rotation !> [ c s ] [ a ] = [ r ] !> [ -s c ] [ b ] [ 0 ] !> satisfying c**2 + s**2 = 1. !> !> The computation uses the formulas !> sigma = sgn(a) if |a| > |b| !> = sgn(b) if |b| >= |a| !> r = sigma*sqrt( a**2 + b**2 ) !> c = 1; s = 0 if r = 0 !> c = a/r; s = b/r if r != 0 !> The subroutine also computes !> z = s if |a| > |b|, !> = 1/c if |b| >= |a| and c != 0 !> = 1 if c = 0 !> This allows c and s to be reconstructed from z as follows: !> If z = 1, set c = 0, s = 1. !> If |z| < 1, set c = sqrt(1 - z**2) and s = z. !> If |z| > 1, set c = 1/z and s = sqrt( 1 - c**2). !> !>
See also
lartg: generate plane rotation, more accurate than BLAS rot,
lartgp: generate plane rotation, more accurate than BLAS rot
Parameters
A
!> A is REAL !> On entry, the scalar a. !> On exit, the scalar r. !>
B
!> B is REAL !> On entry, the scalar b. !> On exit, the scalar z. !>
C
!> C is REAL !> The scalar c. !>
S
!> S is REAL !> The scalar s. !>
Author
Edward Anderson, Lockheed Martin
Contributors:
Weslley Pereira, University of Colorado Denver, USA
Further Details:
!> !> 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 !> !>
Definition at line 91 of file srotg.f90.
subroutine zrotg (complex(wp) a, complex(wp) b, real(wp) c, complex(wp) s)
ZROTG generates a Givens rotation with real cosine and complex sine.
Purpose:
!> !> ZROTG 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 DROTG when |a| > |b|. When |b| >= |a|, the !> sign of c and s will be different from those computed by DROTG !> 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
A
!> A is DOUBLE COMPLEX !> On entry, the scalar a. !> On exit, the scalar r. !>
B
!> B is DOUBLE COMPLEX !> The scalar b. !>
C
!> C is DOUBLE PRECISION !> The scalar c. !>
S
!> S is DOUBLE 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 !> !>
Definition at line 88 of file zrotg.f90.
History
- Arch Linux 2026-11-01: the text shown here
- Debian 13 (Trixie)