Rank mismatch in argument (Fortran 90)

  • Context: Fortran 
  • Thread starter Thread starter MelihAltunan
  • Start date Start date
  • Tags Tags
    Argument rank
Click For Summary

Discussion Overview

The discussion revolves around a rank mismatch error encountered in a Fortran 90 subroutine related to fluid dynamics problems using Lattice Boltzmann Methods (LBM). Participants explore the causes of the error and seek solutions, focusing on the proper declaration and dimensions of variables within the subroutine.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Homework-related

Main Points Raised

  • One participant describes a rank mismatch error involving the variable 'rho' and suggests it may be due to differing dimensions in the subroutine.
  • Another participant advises checking the declaration of 'rho' in other parts of the program to ensure consistency in dimensions.
  • A participant reports additional errors, including a segmentation fault and a mismatch in the number of arguments when calling the subroutine.
  • One participant emphasizes the importance of providing the entire program or a minimal example to avoid speculation and facilitate troubleshooting.
  • Another participant points out that certain variables may not have been declared, suggesting the absence of an IMPLICIT NONE statement could lead to issues.
  • A participant mentions trying the IMPLICIT NONE statement but still encountering the same problem, and later shares that they have attached the code for review.
  • A participant asserts that the problem is clear and encourages comparing the subroutine's signature with how it is called to identify discrepancies.
  • A later reply indicates that the participant resolved the issue after recognizing the mismatch in the call and subroutine signature.

Areas of Agreement / Disagreement

Participants generally agree on the need to ensure consistent variable declarations and dimensions, but there are varying opinions on the best approach to troubleshoot the issue, with some advocating for sharing more code while others focus on specific error messages.

Contextual Notes

Limitations include potential missing assumptions about variable declarations and the specific context in which the subroutine is called, which may affect the understanding of the rank mismatch error.

MelihAltunan
Messages
8
Reaction score
0
Hello everyone, i am dealing with the code which can help me to solve fluid dynamics problems with using LBM methods. Anyways, since i am beginner on Fortran i couldn't solve the rank mismatch error, i think it is easy one but i just can't fix it, i am waiting for your help. Here is the problem part;

subroutine collesion(u,v,f,feq,rho,omega,w,cx,cy,n,m,tm,tminv,stmiv)
real f(0:8,0:n,0:m)
real feq(0:8,0:n,0:m),rho(0:n,0:m)
real w(0:8), cx(0:8),cy(0:8)
real u(0:n,0:m), v(0:n,0:m)
real tm(0:8,0:8),tminv(0:8,0:8),stmiv(0:8,0:8)
real fmom(0:8,0:n,0:m),fmeq(0:8,0:n,0:m)
!calculate equilibrium moments
do i=0,n
do j=0,m
fmeq(0,i,j)=rho(i,j)
fmeq(1,i,j)=rho(i,j)*(-2.0+3.0*rho(i,j)*(u(i,j)*u(i,j)+v(i,j)*v(i,j)))
fmeq(2,i,j)=rho(i,j)*(1.0-3.0*rho(i,j)*(u(i,j)*u(i,j)+v(i,j)*v(i,j)))
fmeq(3,i,j)=rho(i,j)*u(i,j)
fmeq(4,i,j)=-rho(i,j)*u(i,j)
fmeq(5,i,j)=rho(i,j)*v(i,j)
fmeq(6,i,j)=-rho(i,j)*v(i,j)
fmeq(7,i,j)=rho(i,j)*(u(i,j)*u(i,j)-v(i,j)*v(i,j))
fmeq(8,i,j)=rho(i,j)*u(i,j)*v(i,j)
end do
end do

the error is Warning: Rank mismatch in argument 'rho' at (1) (rank-2 and scalar)

i guess it's because fmeq and rho have different ranks but how i can write in a proper way?

Thank you for now.
 
Technology news on Phys.org
I would check elsewhere in the program where the subroutine collesion is called. It is possible that the variable 'rho' has not been declared with the proper dimensions in other parts of the program. The error message suggests that there is a mismatch in the dimensions of the arguments between calling the routine collesion and the dimensions of rho in the subroutine itself.
 
i checked the code rho has same dimensions everywhere and also i am receiving 'segmentation fault-invalid memory reference' error on simply fortran then it shows the line 11 above (fmeq(0,i,j)=rho(i,j)). And when i try to run on microsoft developer studio it says 'wrong number of arguments to procedure COLLESION invoked from main: 13 found, 14 expected' without showing any lines. Do you have any idea about that? thank you for your help.
 
Asking for help like this without posting the entire program can lead to a lot of speculation and a waste of time.

Either post the entire program or a minimal one that still shows the problem...then, again, when one does the step of going to a minimal program often the problem is found.
 
By the way, I noticed that omega, n, and m do not seem to have been declared in your subroutine...this leads me to believe that you do NOT have an IMPLICIT NONE statement in your program...which opens the door for a lot of things.
 
i tried with IMPLICIT NONE but it had same problem again. Considering what you said, i added the code as an attachment. So, the best way is if you run the code with your own compiler, you will see the what is an error. I would be pleased if you can check the code that i uploaded. Thanks.
 

Attachments

No need to compile...the problem is very clear, just compare the signature of the subroutine as declared (order and quantity of arguments) and see how you are calling it:

Code:
call collesion(u,v,feq,rho,omega,w,cx,cy,n,m,tm,tminv,stmiv)
subroutine collesion(u,v,f,feq,rho,omega,w,cx,cy,n,m,tm,tminv,stmiv)

Notice anything?
 
yea, i noticed :), it is working now, thanks a lot.
 

Similar threads

  • · Replies 8 ·
Replies
8
Views
6K
  • · Replies 4 ·
Replies
4
Views
3K
Replies
1
Views
2K
  • · Replies 17 ·
Replies
17
Views
3K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 1 ·
Replies
1
Views
7K
  • · Replies 14 ·
Replies
14
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 20 ·
Replies
20
Views
2K