I'm a student, and I had to do a freefall program. But I'm having some issues with variables. As soon as a subroutine ends, they go bananas! The problematic trio is 'y','v' and 'nshow'. When the subroutine Euler ends, 'v' gets the module of y, y go to zero and nshow to 32767!(adsbygoogle = window.adsbygoogle || []).push({});

How can I fix that?

_________________________________________

______________________________________________________Code (Text):PROGRAM free_fall

IMPLICIT NONE

DOUBLE PRECISION y,a,g,t,dt,v

INTEGER nshow, counter

t = 0.0d0

OPEN(UNIT=1, FILE="TEST.dat")

OPEN(UNIT=2, FILE="TESTEULER.dat")

CALL initial (y,v,a,g,t,dt)

WRITE (1,*) v,y,nshow

!^Here my variables change misteriously

counter=0

CALL Euler (y,v,a,t,dt,nshow,counter)

CALL print_table(y,v,a,dt,t,nshow)

END

SUBROUTINE initial(a,y,v,g,t,dt)

DOUBLE PRECISION y,a,g,t,dt,v

WRITE(*,*) 'time step ='

READ(*,*) dt

WRITE(*,*) 'height ='

READ(*,*) y

WRITE(*,*) 'initial velocity ='

READ(*,*) v

WRITE(*,*) 'number of times steps between output ='

READ(*,*) nshow

WRITE (1,*) v,y,nshow

!^Until this point, variables are OK

END

SUBROUTINE Euler(y,v,a,t,dt,nshow,counter)

DOUBLE PRECISION y,a,t,dt,v

INTEGER nshow,counter

OPEN(UNIT=4, FILE="vt.dat")

OPEN(UNIT=3, FILE="yt.dat")

a = -9.8

100 v = v+a*dt;

y = y+v*dt

t = t+dt

counter = counter + 1

IF (mod(counter,nshow) .EQ. 0.0D0) CALL print_table(y,v,a,dt,t,nshow)

WRITE (2,*) t,y,v,dt,a,counter,nshow

WRITE (*,*) t,y,v,dt,a

IF (y .LE. 0.0D0) go to 200

go to 100

200 STOP

END

SUBROUTINE print_table(y,v,a,dt,t)

DOUBLE PRECISION y,t,v

WRITE (4,*) t,v

WRITE (3,*) t,y

!Each table will be made in a file. TEST and TESTEULER are, obviously, tests

END

**Physics Forums | Science Articles, Homework Help, Discussion**

The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

# Issues with changing variables

**Physics Forums | Science Articles, Homework Help, Discussion**