- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
I am trying to use F90 call to sbtrd but from the user manual I do not see how I get the output variables d and e.
the call line according to the manual is
call sbtrd(ab[, q] [,vect] [,uplo] [,info])
and the variables are listed as:
Fortran 95 Interface Notes
Routines in Fortran 95 interface have fewer arguments in the calling sequence than their FORTRAN 77 counterparts. For general conventions applied to skip redundant or restorable arguments, see Fortran 95 Interface Conventions.
Specific details for the routine sbtrd interface are the following:
ab Holds the array A of size (kd+1,n).
q Holds the matrix Q of size (n,n).
d Holds the vector with the number of elements n.
e Holds the vector with the number of elements n - 1.
uplo Must be 'U' or 'L'. The default value is 'U'.
vect If omitted, this argument is restored based on the presence of argument q as follows: vect = 'V', if q is present, vect = 'N', if q is omitted.
If present, vect must be equal to 'V' or 'U' and the argument q must also be present. Note that there will be an error condition if vect is present and q omitted.
so where are d and e in the call line?
thanks for any help
Nigel
the call line according to the manual is
call sbtrd(ab[, q] [,vect] [,uplo] [,info])
and the variables are listed as:
Fortran 95 Interface Notes
Routines in Fortran 95 interface have fewer arguments in the calling sequence than their FORTRAN 77 counterparts. For general conventions applied to skip redundant or restorable arguments, see Fortran 95 Interface Conventions.
Specific details for the routine sbtrd interface are the following:
ab Holds the array A of size (kd+1,n).
q Holds the matrix Q of size (n,n).
d Holds the vector with the number of elements n.
e Holds the vector with the number of elements n - 1.
uplo Must be 'U' or 'L'. The default value is 'U'.
vect If omitted, this argument is restored based on the presence of argument q as follows: vect = 'V', if q is present, vect = 'N', if q is omitted.
If present, vect must be equal to 'V' or 'U' and the argument q must also be present. Note that there will be an error condition if vect is present and q omitted.
so where are d and e in the call line?
thanks for any help
Nigel
링크가 복사됨
6 응답
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
Quoting - Nigel Wilcox
I am trying to use F90 call to sbtrd but from the user manual I do not see how I get the output variables d and e.
the call line according to the manual is
call sbtrd(ab[, q] [,vect] [,uplo] [,info])
and the variables are listed as:
Fortran 95 Interface Notes
Routines in Fortran 95 interface have fewer arguments in the calling sequence than their FORTRAN 77 counterparts. For general conventions applied to skip redundant or restorable arguments, see Fortran 95 Interface Conventions.
Specific details for the routine sbtrd interface are the following:
ab Holds the array A of size (kd+1,n).
q Holds the matrix Q of size (n,n).
d Holds the vector with the number of elements n.
e Holds the vector with the number of elements n - 1.
uplo Must be 'U' or 'L'. The default value is 'U'.
vect If omitted, this argument is restored based on the presence of argument q as follows: vect = 'V', if q is present, vect = 'N', if q is omitted.
If present, vect must be equal to 'V' or 'U' and the argument q must also be present. Note that there will be an error condition if vect is present and q omitted.
so where are d and e in the call line?
thanks for any help
Nigel
the call line according to the manual is
call sbtrd(ab[, q] [,vect] [,uplo] [,info])
and the variables are listed as:
Fortran 95 Interface Notes
Routines in Fortran 95 interface have fewer arguments in the calling sequence than their FORTRAN 77 counterparts. For general conventions applied to skip redundant or restorable arguments, see Fortran 95 Interface Conventions.
Specific details for the routine sbtrd interface are the following:
ab Holds the array A of size (kd+1,n).
q Holds the matrix Q of size (n,n).
d Holds the vector with the number of elements n.
e Holds the vector with the number of elements n - 1.
uplo Must be 'U' or 'L'. The default value is 'U'.
vect If omitted, this argument is restored based on the presence of argument q as follows: vect = 'V', if q is present, vect = 'N', if q is omitted.
If present, vect must be equal to 'V' or 'U' and the argument q must also be present. Note that there will be an error condition if vect is present and q omitted.
so where are d and e in the call line?
thanks for any help
Nigel
Hi Nigel,
I guess as every F95 with optional parameters, say,
call sbtrd(ab, e=YOUR_MATRIX_E)
A.
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
Quoting - ArturGuzik
Hi Nigel,
I guess as every F95 with optional parameters, say,
call sbtrd(ab, e=YOUR_MATRIX_E)
A.
I tried that Artur but I get the following build error
C:Projects_NSWE2536_ Error: There is no matching specific subroutine for this generic subroutine call. [SBTRD]
C:Projects_NSWE2536_ Compilation Aborted (code 1)
d and e should not be optional because they are the output of the routine
Thanks
Nigel
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
Hi Nigel,
d and e are simply duplicate (sub)diagonal elements of ab, so d & e areomitted in the F95 interface.
See also s/dSYTRD, c/zHETRD, s/dSPTRD, c/zHPTRD, s/dSBTRD, c/zHBTRD.
The documentation inaccuracies will be fixed.
Thanks,
Vladimir
d and e are simply duplicate (sub)diagonal elements of ab, so d & e areomitted in the F95 interface.
See also s/dSYTRD, c/zHETRD, s/dSPTRD, c/zHPTRD, s/dSBTRD, c/zHBTRD.
The documentation inaccuracies will be fixed.
Thanks,
Vladimir
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
Quoting - Vladimir Koldakov (Intel)
Hi Nigel,
d and e are simply duplicate (sub)diagonal elements of ab, so d & e areomitted in the F95 interface.
See also s/dSYTRD, c/zHETRD, s/dSPTRD, c/zHPTRD, s/dSBTRD, c/zHBTRD.
The documentation inaccuracies will be fixed.
Thanks,
Vladimir
d and e are simply duplicate (sub)diagonal elements of ab, so d & e areomitted in the F95 interface.
See also s/dSYTRD, c/zHETRD, s/dSPTRD, c/zHPTRD, s/dSBTRD, c/zHBTRD.
The documentation inaccuracies will be fixed.
Thanks,
Vladimir
Sorry Vladimir I'm not sure I understand.
d and e are the diagonal and off diagonal terms of the matrix T which is the tri diagonal reduced form of ab. So are you saying that they are reurned in ab, in which case how are they packed? ab is (ku+1,N) in form and d is (N) long and e (N-1) long?
thanks
Nigel
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
Quoting - Nigel Wilcox
Sorry Vladimir I'm not sure I understand.
d and e are the diagonal and off diagonal terms of the matrix T which is the tri diagonal reduced form of ab. So are you saying that they are reurned in ab, in which case how are they packed? ab is (ku+1,N) in form and d is (N) long and e (N-1) long?
thanks
Nigel
Nigel,
you may take a look at interface itself. The output arguments are
OPTIONAL :: INFO
INTENT(INOUT) :: AB(:,:)
INTENT(INOUT), OPTIONAL, TARGET :: Q(:,:)
The E, D are deallocated once F77 version completes its job, and as Vladimir said, they are not returned (and not available, so that's why the error about interface you received). I have to admit that I have no idea how T elements are returned. The easy solution would be just call pure (F77-style) LAPACK version:-)
A.
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
Hi, Nigel,
As you can see at the NETLIB site: http://www.netlib.org/lapack/double/dsbtrd.f
* On exit, the diagonal elements of AB are overwritten by the
* diagonal elements of the tridiagonal matrix T; if KD > 0, the
* elements on the first superdiagonal (if UPLO = 'U') or the
* first subdiagonal (if UPLO = 'L') are overwritten by the
* off-diagonal elements of T; the rest of AB is overwritten by
* values generated during the reduction.
As you can see at the NETLIB site: http://www.netlib.org/lapack/double/dsbtrd.f
* On exit, the diagonal elements of AB are overwritten by the
* diagonal elements of the tridiagonal matrix T; if KD > 0, the
* elements on the first superdiagonal (if UPLO = 'U') or the
* first subdiagonal (if UPLO = 'L') are overwritten by the
* off-diagonal elements of T; the rest of AB is overwritten by
* values generated during the reduction.
You can find on this pagethe code to copy (sub)diagonal elements for UPPER and LOWER cases.
Thanks,
Vladimir
