- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

I'm writting a subroutine in which the mkl QR factorization subroutine geqp3 is used. However, I find that it seems the geqp3 do nothing! The subroutine is listed below. I don't know what's wrong with my code and urgently need your help. Thanks!

subroutine determine_the_sampled_rows_and_cols(WSS,tempWSS,WTSR,jpvtr,jpvtc,lidf,lids,m,n,num_rank)

use lapack95

implicit none complex(4) WSS(:,:),tempWSS(:,:),WTSR(:,:)

integer(4) num_rank,m,n,j,i,lidf(:),lids(:)

integer(4) jpvtr(:),jpvtc(:)

real(4) threshold

complex(4), allocatable::tempWSS1(:,:)

integer(4), allocatable::jpvtr1(:),jpvtc1(:)

!allocate(tempWSS1(m,n),jpvtr1(m),jpvtc1(n))

!tempWSS1=WSS !jpvtc1(1:n)=0

!call geqp3(tempWSS1,jpvtc1)

!do j=1,num_rank

! do i=1,m

! WTSR(j,i)=WSS(i,jpvtc1(j))

! enddo

!enddo

!

!jpvtr1(1:m)=0

!call geqp3(WTSR,jpvtr1)

!

!do i=1,num_rank

! jpvtr(i)=lidf(jpvtr1(i))

! jpvtc(i)=lids(jpvtc1(i))

!enddo

!

!deallocate(tempWSS1,jpvtr1,jpvtc1)

tempWSS(1:m,1:n)=WSS(1:m,1:n)

jpvtc(1:n)=0

call geqp3(tempWSS(1:m,1:n),jpvtc(1:n))

do j=1,num_rank

do i=1,m

WTSR(j,i)=WSS(i,jpvtc(j))

enddo

enddo

jpvtr(1:m)=0

call geqp3(WTSR,jpvtr)

do i=1,num_rank

jpvtr(i)=lidf(jpvtr(i))

jpvtc(i)=lids(jpvtc(i))

enddo

end

Link Copied

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

How a subprogram functions depends quite a bit on what arguments are passed to it. What arguments did you call the subroutine with when "GEQP3 did nothing" and what basis did you reach that conclusion?

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Dear Mecej4,

Thank you very much for your reply! My expression of "do nothing" is not accurate. What I mean is that after "call geqp3(tempWSS(1:m,1:n),jpvtc(1:n))" the elements in jpvtc still are zeros and the values in tempWSS(1:m,1:n) is the same as that before calling this function. The attached is the debug information and the subroutines related to the problem. Please help me check what is the potential problem with my program and also give me some suggestion of my programming style cause I'm relatively new in using Fortran 95. Thank you very much!

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Your file "debug-infor.docx" does not provide significant new information. In particular, I need to know what the values are of the arguments to geqp3().

Here is a simple example of using geqp3. The output shows that the input arguments were changed (as expected).

[fortran]

program xgeqp3

use mkl95_lapack, only : geqp3

implicit none

real, dimension (3,3) :: A

real :: tau(3)

integer jpiv(3),info,i,j

data A/4.1,1.2,-2.2, -1.9,5.1,3.5, -1.3, -2.4, 7.7/

data jpiv/0,0,0/

call geqp3(A, jpiv, tau, info)

write(*,10)((A(i,j),j=1,3),jpiv(i),tau(i),i=1,3)

10 format(3ES10.2,2x,I2,2x,ES10.2)

end program xgeqp3

[/fortran]

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Thank you for your suggestions. I will try the fortran77 subroutine.

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page