Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
6975 Discussions

MKL ERROR: Parameter 4 was incorrect on entry to SGESV

Jason_W_2
Beginner
425 Views

 

I am seeing this error above when trying to call the subroutine SGESV. Can someone explain to me what this means. I have also attached the code below.

 

Regards

Jason

 

 


    
    
    PROGRAM AXIALFD

    
    implicit none
    
    INTEGER :: LINEAR, IWHICH,I,J
    REAL :: PE,peinv
    REAL :: DA
    REAL :: NGRID
    REAL :: NRHS = 1
    INTEGER :: LDA,LDB,INFO
    REAL :: DX,dx2
    REAL :: TOL
    REAL :: CHANGE
    REAL :: ITER
    REAL, DIMENSION( 1:10) :: F,C,C11,X
    REAL, DIMENSION(1:10,1:10) :: AA
    REAL, DIMENSION(1:2) :: ANS
    REAL :: RATERXN
    REAL :: DRATE
    REAL :: SUM
    INTEGER,DIMENSION(1:10) :: ipiv
    
 
    ! filename axialFD.m 
! This code solves the equations for a reactor with 
! axial dispersion using the finite difference method. 
! a = 1, 2, 3 for planar, cylindrical, and spherical geometry 
! If the problem is linear, set linear = 1 to avoid a second iteration. 

! set linear to 1 if problem is linear - this avoids one unnecessary iteration 
linear = 0 
! set the type of reaction rate 
iwhich = 2 
!set ngrid, Peclet (Pe), and Damkohler (Da) before calling 
Pe = 10
Da = 10
ngrid = 10
peinv = 1/Pe; 
dx = 1/(ngrid-1); 
dx2 = dx*dx; 
   LDA = 10
    LDB = 10
    
    
! iterate 
tol = 1.e-12; 
change = 1; 
iter=0; 


! initial guess 
DO i=1,ngrid 
c(i) = 0.0; 
x(i) = (i-1)/(ngrid-1); 

end DO

!if ( change >tol) then
iter=iter+1; 


! Set up the matrices 
! set the matrices to zero 
do i=1,ngrid 
f(i) = 0; 
do j=1,ngrid 
aa(i,j) = 0.; 

end do
end do

 

! set the matrices for the differential equation 
do j=2, ngrid-1 
ans(1) = c(j)*c(j); 
ans(2) = 2*c(j); 
raterxn = ans(1); 
drate = ans(2); 
aa(j,j-1) = peinv + dx/2; 
aa(j,j) = -2*peinv - Da*dx2*drate; 
aa(j,j+1) = peinv - dx/2; 
f(j) = Da*dx2*(raterxn - drate*c(j)); 


end do

ans(1) = c(1)*c(1); 
ans(2) = 2*c(1); 
raterxn = ans(1); 
drate = ans(2); 
aa(1,1) = -2*peinv - 2*dx - Pe*dx2 - Da*dx2*drate; 
aa(1,2) = 2*peinv; 
f(1) = Da*dx2*(raterxn - drate*c(1)) - 2*dx - dx2*Pe; 

ans(1) = c(ngrid)*c(ngrid); 
ans(2) = 2*c(ngrid); 
raterxn = ans(1); 
drate = ans(2); 
aa(ngrid,ngrid-1) = 2*peinv; 
aa(ngrid,ngrid) = -2*peinv -Da*dx2*drate; 
f(ngrid)=Da*dx2*(raterxn - drate*c(ngrid)); 

 


do i=1,ngrid  
print*,f(i)

end do

print*,''
 DO I = 1,ngrid
PRINT * , (aa(I,J), J=1,ngrid)


END DO


! Solve one iteration. 
call sgesv( NGRID, NRHS, AA, lda, ipiv, f,ldb, info )
!call sgesv( n, nrhs, a, lda, ipiv, b, ldb, info )
!c11 = aa/f; 

! Calculate the criterion to stop the iterations. 
sum=0.; 
do i=1,ngrid 
sum = sum + abs(c11(i) - c(i)); 
c(i) = c11(i); 
end do 
if (linear==1) then ;goto 10 
change = sum 
end if
!END IF

10 print*, iter

    print*,''
    print*,''
   

  print*,''
       
     do i=1,NGRID
           
   ! print*, F(i) 
      end do

 

 

END PROGRAM AXIALFD

 

0 Kudos
2 Replies
mecej4
Honored Contributor III
425 Views

A number of variables that should have been declared INTEGER have been declared REAL. For example, NGRID = 10 is declared and passed as REAL with the value 10.0. The MKL routine expects an INTEGER as the first argument, and interprets the passed value as the integer 1092616192, which MKL notes to be in violation of the requirement that the number of filled rows of A be less or equal to the declared (maximum) number of rows of A.

After you fix the errors related to types of arguments, you have to fix another error: you must define C11 before using it.

0 Kudos
Jason_W_2
Beginner
425 Views

Thanks much.. it worked perfectly

 

Regards

0 Kudos
Reply