New Reply

[Fortran] Passing elements of array to subroutine

 
Share Thread
Jul20-12, 01:54 AM   #1
 

[Fortran] Passing elements of array to subroutine


I have one main program where I have calculated some array, say A(i,j)
If I want ot use the values in subroutine, and calculate some more values and give back the result to main program, how my syntax should be?
I tried this way. Its not working.
program a
.......................
call sub(A,B,C)
end program a

subroutine (X,Y,Z)
allocated memory same as A,B,C to X,Y,Z
some formulae
return
end subroutine sub

Thank you.
PhysOrg.com science news on PhysOrg.com

>> Leading 3-D printer firms to merge in $403M deal (Update)
>> LA to give every student an iPad; $30M order
>> CIA faulted for choosing Amazon over IBM on cloud contract
Jul20-12, 02:03 AM   #2
 
Recognitions:
Science Advisor Science Advisor
Hi Vasanth, it's a good idea to specify what programming language you are using when asking a question. But let me guess it's fortran.

By default Fortran passes all parameters by "reference". This means that when you pass the array to the subroutine it merely passes a reference to the actual same array in the main program. So any changes made in the subroutine are automatically reflected in the variable back in the main program. Also there is no need to allocate memory in to it in the subroutine.
Jul20-12, 02:04 AM   #3
 
Recognitions:
Science Advisor Science Advisor
double post
Jul20-12, 02:14 AM   #4
 

[Fortran] Passing elements of array to subroutine


Thank you so much. Yeah I am using FORTRAN.. sorry I missed to mention.
say do 10 i=1,10
do 10 j=1,10
A(i,j)=i+j
10 continue

This 10 cross 10 values must go to subroutine for a formula which uses
say g(i,j)=A(i,j)+2 and my o/p should be values of g(i,j)

For this case, if I am not allocating the memory for dummy variable, its showing errors of rank mismatch.
I am new to subroutines. If I am doing basic mistakes, pls correct me.
Thanks again.
Jul20-12, 03:14 AM   #5
 
Recognitions:
Science Advisor Science Advisor
Quote by VasanthG View Post
Thank you so much. Yeah I am using FORTRAN.. sorry I missed to mention.
say do 10 i=1,10
do 10 j=1,10
A(i,j)=i+j
10 continue

This 10 cross 10 values must go to subroutine for a formula which uses
say g(i,j)=A(i,j)+2 and my o/p should be values of g(i,j)

For this case, if I am not allocating the memory for dummy variable, its showing errors of rank mismatch.
I am new to subroutines. If I am doing basic mistakes, pls correct me.
Thanks again.
Yes you still need to define the array in the subroutine, but any modifications to that array will automatically be reflected as changes to the original array in the main program.

Code:
program test
  implicit none
  integer a(20)
  ....
  call example(a)
  ...

contains
subroutine example(x)
 implicit none
 integer x(20)
 ...           ! Changes to x() here cause changes in a() in the main program
end subroutine example
end program test

BTW. Whether or not it actually passes by reference or just uses "copyback" is implementation dependent. But in any case the "side effect" on "x" in the subroutine will change the values of "a" in the main.
Jul20-12, 03:22 AM   #6
 
Thank you so much for your time and help. I'll implement it in my code and check.
Jul20-12, 06:48 AM   #7
 
Mentor
Thread title edited.
New Reply

Similar discussions for: [Fortran] Passing elements of array to subroutine
Thread Forum Replies
FORTRAN-Passing array to subroutine-segmentation fault Programming & Comp Sci 5
Fortran - Allocate array in subroutine Programming & Comp Sci 6
FORTRAN 90 subroutine Programming & Comp Sci 3
Fortran, subroutine with allocatable, intent(out) array Programming & Comp Sci 2
Fortran 90 & elements array comparaison Programming & Comp Sci 3