-
Notifications
You must be signed in to change notification settings - Fork 480
develop DLARF1F and implement in ORM2R, #1011 #1019
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
langou
merged 16 commits into
Reference-LAPACK:master
from
EduardFedorenkov:1011-add-larf1f-and-larf1l-in-lapack
Jun 19, 2024
Merged
Changes from 1 commit
Commits
Show all changes
16 commits
Select commit
Hold shift + click to select a range
b8a6443
develop DLARF1F and implement in ORM2R, #1011
EduardFedorenkov 0d2bff7
fix DLARF1F in case lastv = 1, #1011
EduardFedorenkov a4698c3
align DLARF1F versions, #1011
EduardFedorenkov 5e7dad3
remove dlarf1f prototype and add slarf1f, slarf1l, #1011
EduardFedorenkov 8dd7e13
update single precision routines to use slarf1f and slarf1l, #1011
EduardFedorenkov 6c0a98f
implement clarf1f, #1011
EduardFedorenkov 5889e3e
try clarf1f in cunm2r, #1011
EduardFedorenkov 1d4010e
fix lastv possible range in slarf1f and slarf1l, #1011
EduardFedorenkov ea943fc
fix lastv possible range in clarf1f, #1011
EduardFedorenkov b8b9771
implement clarf1l, #1011
EduardFedorenkov 8ed1ab5
update single complex routines to use clarf1f and clarf1l, #1011
EduardFedorenkov b579759
small fix in larf1f and larf1l, #1011
EduardFedorenkov cbd638d
define larf1f and larf1l in lapack_64.h, #1011
EduardFedorenkov ba27bf0
small fix in routines to use larf1f and larf1l, #1011
EduardFedorenkov 690067c
add firstv param in larf1l, #1011
EduardFedorenkov c8b1a51
code style small fixes, #1011
EduardFedorenkov File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,267 @@ | ||
| *> \brief \b CLARF1L applies an elementary reflector to a general rectangular | ||
| * matrix assuming v(lastv) = 1, where lastv is the last non-zero | ||
| * | ||
| * =========== DOCUMENTATION =========== | ||
| * | ||
| * Online html documentation available at | ||
| * http://www.netlib.org/lapack/explore-html/ | ||
| * | ||
| *> \htmlonly | ||
| *> Download CLARF1L + dependencies | ||
| *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/clarf.f"> | ||
| *> [TGZ]</a> | ||
| *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/clarf.f"> | ||
| *> [ZIP]</a> | ||
| *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarf.f"> | ||
| *> [TXT]</a> | ||
| *> \endhtmlonly | ||
| * | ||
| * Definition: | ||
| * =========== | ||
| * | ||
| * SUBROUTINE CLARF1L( SIDE, M, N, V, INCV, TAU, C, LDC, WORK ) | ||
| * | ||
| * .. Scalar Arguments .. | ||
| * CHARACTER SIDE | ||
| * INTEGER INCV, LDC, M, N | ||
| * COMPLEX TAU | ||
| * .. | ||
| * .. Array Arguments .. | ||
| * COMPLEX C( LDC, * ), V( * ), WORK( * ) | ||
| * .. | ||
| * | ||
| * | ||
| *> \par Purpose: | ||
| * ============= | ||
| *> | ||
| *> \verbatim | ||
| *> | ||
| *> CLARF1L applies a complex elementary reflector H to a complex m by n matrix | ||
| *> C, from either the left or the right. H is represented in the form | ||
| *> | ||
| *> H = I - tau * v * v**H | ||
| *> | ||
| *> where tau is a real scalar and v is a real vector assuming v(lastv) = 1, | ||
| *> where lastv is the last non-zero element. | ||
| *> | ||
| *> If tau = 0, then H is taken to be the unit matrix. | ||
| *> | ||
| *> To apply H**H (the conjugate transpose of H), supply conjg(tau) instead | ||
| *> tau. | ||
| *> \endverbatim | ||
| * | ||
| * Arguments: | ||
| * ========== | ||
| * | ||
| *> \param[in] SIDE | ||
| *> \verbatim | ||
| *> SIDE is CHARACTER*1 | ||
| *> = 'L': form H * C | ||
| *> = 'R': form C * H | ||
| *> \endverbatim | ||
| *> | ||
| *> \param[in] M | ||
| *> \verbatim | ||
| *> M is INTEGER | ||
| *> The number of rows of the matrix C. | ||
| *> \endverbatim | ||
| *> | ||
| *> \param[in] N | ||
| *> \verbatim | ||
| *> N is INTEGER | ||
| *> The number of columns of the matrix C. | ||
| *> \endverbatim | ||
| *> | ||
| *> \param[in] V | ||
| *> \verbatim | ||
| *> V is COMPLEX array, dimension | ||
| *> (1 + (M-1)*abs(INCV)) if SIDE = 'L' | ||
| *> or (1 + (N-1)*abs(INCV)) if SIDE = 'R' | ||
| *> The vector v in the representation of H. V is not used if | ||
| *> TAU = 0. | ||
| *> \endverbatim | ||
| *> | ||
| *> \param[in] INCV | ||
| *> \verbatim | ||
| *> INCV is INTEGER | ||
| *> The increment between elements of v. INCV <> 0. | ||
| *> \endverbatim | ||
| *> | ||
| *> \param[in] TAU | ||
| *> \verbatim | ||
| *> TAU is COMPLEX | ||
| *> The value tau in the representation of H. | ||
| *> \endverbatim | ||
| *> | ||
| *> \param[in,out] C | ||
| *> \verbatim | ||
| *> C is COMPLEX array, dimension (LDC,N) | ||
| *> On entry, the m by n matrix C. | ||
| *> On exit, C is overwritten by the matrix H * C if SIDE = 'L', | ||
| *> or C * H if SIDE = 'R'. | ||
| *> \endverbatim | ||
| *> | ||
| *> \param[in] LDC | ||
| *> \verbatim | ||
| *> LDC is INTEGER | ||
| *> The leading dimension of the array C. LDC >= max(1,M). | ||
| *> \endverbatim | ||
| *> | ||
| *> \param[out] WORK | ||
| *> \verbatim | ||
| *> WORK is COMPLEX array, dimension | ||
| *> (N) if SIDE = 'L' | ||
| *> or (M) if SIDE = 'R' | ||
| *> \endverbatim | ||
| * | ||
| * Authors: | ||
| * ======== | ||
| * | ||
| *> \author Univ. of Tennessee | ||
| *> \author Univ. of California Berkeley | ||
| *> \author Univ. of Colorado Denver | ||
| *> \author NAG Ltd. | ||
| * | ||
| *> \ingroup larf1f | ||
| * | ||
| * ===================================================================== | ||
| SUBROUTINE CLARF1L( SIDE, M, N, V, INCV, TAU, C, LDC, WORK ) | ||
| * | ||
| * -- LAPACK auxiliary routine -- | ||
| * -- LAPACK is a software package provided by Univ. of Tennessee, -- | ||
| * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- | ||
| * | ||
| * .. Scalar Arguments .. | ||
| CHARACTER SIDE | ||
| INTEGER INCV, LDC, M, N | ||
| COMPLEX TAU | ||
| * .. | ||
| * .. Array Arguments .. | ||
| COMPLEX C( LDC, * ), V( * ), WORK( * ) | ||
| * .. | ||
| * | ||
| * ===================================================================== | ||
| * | ||
| * .. Parameters .. | ||
| COMPLEX ONE, ZERO | ||
| PARAMETER ( ONE = ( 1.0E+0, 0.0E+0 ), | ||
| $ ZERO = ( 0.0E+0, 0.0E+0 ) ) | ||
| * .. | ||
| * .. Local Scalars .. | ||
| LOGICAL APPLYLEFT | ||
| INTEGER I, LASTV, LASTC | ||
| * .. | ||
| * .. External Subroutines .. | ||
| EXTERNAL CGEMV, CGERC, CSCAL | ||
| * .. | ||
| * .. Intrinsic Functions .. | ||
| INTRINSIC CONJG | ||
| * .. | ||
| * .. External Functions .. | ||
| LOGICAL LSAME | ||
| INTEGER ILACLR, ILACLC | ||
| EXTERNAL LSAME, ILACLR, ILACLC | ||
| * .. | ||
| * .. Executable Statements .. | ||
| * | ||
| APPLYLEFT = LSAME( SIDE, 'L' ) | ||
| LASTV = 1 | ||
| LASTC = 0 | ||
| IF( TAU.NE.ZERO ) THEN | ||
| ! Set up variables for scanning V. LASTV begins pointing to the end | ||
| ! of V up to V(1). | ||
| IF( APPLYLEFT ) THEN | ||
| LASTV = M | ||
| ELSE | ||
| LASTV = N | ||
| END IF | ||
| IF( INCV.GT.0 ) THEN | ||
| I = 1 + (LASTV-1) * INCV | ||
| ELSE | ||
| I = 1 | ||
| END IF | ||
| ! Look for the last non-zero row in V. | ||
| DO WHILE( LASTV.GT.1 .AND. V( I ).EQ.ZERO ) | ||
| LASTV = LASTV - 1 | ||
| I = I - INCV | ||
| END DO | ||
| IF( APPLYLEFT ) THEN | ||
| ! Scan for the last non-zero column in C(1:lastv,:). | ||
| LASTC = ILACLC(LASTV, N, C, LDC) | ||
| ELSE | ||
| ! Scan for the last non-zero row in C(:,1:lastv). | ||
| LASTC = ILACLR(M, LASTV, C, LDC) | ||
| END IF | ||
| END IF | ||
| IF( LASTC.EQ.0 ) THEN | ||
| RETURN | ||
| END IF | ||
| IF( APPLYLEFT ) THEN | ||
| * | ||
| * Form H * C | ||
| * | ||
| IF( LASTV.EQ.1 ) THEN | ||
| * | ||
| * C(1,1:lastc) := ( 1 - tau ) * C(1,1:lastc) | ||
| * | ||
| CALL CSCAL( LASTC, ONE - TAU, C, LDC ) | ||
| ELSE | ||
| * | ||
| * w(1:lastc,1) := C(1:lastv-1,1:lastc)**T * v(1:lastv-1,1) | ||
| * | ||
| CALL CGEMV( 'Conjugate transpose', LASTV - 1, LASTC, | ||
| $ ONE, C, LDC, V, INCV, ZERO, WORK, 1 ) | ||
| * | ||
| * w(1:lastc,1) += C(lastv,1:lastc)**H * v(lastv,1) | ||
| * | ||
| DO I = 1, LASTC | ||
| WORK( I ) = WORK( I ) + CONJG( C( LASTV, I ) ) | ||
| END DO | ||
| * | ||
| * C(lastv,1:lastc) += - tau * v(lastv,1) * w(1:lastc,1)**H | ||
| * | ||
| DO I = 1, LASTC | ||
| C( LASTV, I ) = C( LASTV, I ) | ||
| $ - TAU * CONJG( WORK( I ) ) | ||
| END DO | ||
| * | ||
| * C(1:lastv-1,1:lastc) += - tau * v(1:lastv-1,1) * w(1:lastc,1)**H | ||
| * | ||
| CALL CGERC( LASTV - 1, LASTC, -TAU, V, INCV, WORK, 1, C, | ||
| $ LDC) | ||
| END IF | ||
| ELSE | ||
| * | ||
| * Form C * H | ||
| * | ||
| IF( LASTV.EQ.1 ) THEN | ||
| * | ||
| * C(1:lastc,1) := ( 1 - tau ) * C(1:lastc,1) | ||
| * | ||
| CALL CSCAL( LASTC, ONE - TAU, C, 1 ) | ||
| ELSE | ||
| * | ||
| * w(1:lastc,1) := C(1:lastc,1:lastv-1) * v(1:lastv-1,1) | ||
| * | ||
| CALL CGEMV( 'No transpose', LASTC, LASTV - 1, ONE, C, | ||
| $ LDC, V, INCV, ZERO, WORK, 1 ) | ||
| * | ||
| * w(1:lastc,1) += C(1:lastc,lastv) * v(lastv,1) | ||
| * | ||
| CALL CAXPY( LASTC, ONE, C( 1, LASTV ), 1, WORK, 1 ) | ||
| * | ||
| * C(1:lastc,lastv) += - tau * v(lastv,1) * w(1:lastc,1) | ||
| * | ||
| CALL CAXPY( LASTC, -TAU, WORK, 1, C( 1, LASTV ), 1 ) | ||
| * | ||
| * C(1:lastc,1:lastv-1) += - tau * w(1:lastc,1) * v(1:lastv-1)**H | ||
| * | ||
| CALL CGERC( LASTC, LASTV - 1, -TAU, WORK, 1, V, | ||
| $ INCV, C, LDC ) | ||
| END IF | ||
| END IF | ||
| RETURN | ||
| * | ||
| * End of CLARF1L | ||
| * | ||
| END | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.