Fortran program for oscillator using Euler method

  • Fortran
  • Thread starter koushan
  • Start date
  • #1
5
0

Main Question or Discussion Point

I am trying to run a program with fortran. The program is about solving the Oscillator using Euler Method. I am trying to run this code and applying array arguments (as I want to extend it to 3 dimensions afterwards).
When I try to compile, it comes up with an error "Unclassifiable statement at (1)". I don't know how to resolved this error.
This is my code:

program Oscilator
implicit none

real :: h !(Step size)
integer, parameter :: n=100
real, dimension(1:n) :: x,v,t
external dx,dv
integer :: i

x(1) = 0.017
t(1) = 0.0
v(1) = 0.0

write(*,*) 't x v'

do while(t(i) <= n)
h = t(i+1) - t(i)
call Euler(h,x,v)
write(6,'(4(e12.5,3x))') t(i), x(i), v(i)

t(i)=t(i+1)
x(i)=x(i+1)
v(i)=v(i+1)

end do

end program Oscilator

function dx(t)
implicit none
real dx, t
dx = exp(-0.9*t)*(-2.5*exp(0.557*t)-2.8*exp(-0.557*t))
end function dx

function dv(t)
implicit none
real dv, t
dv=-0.2941*exp(-0.343*t)-5.9439*exp(-1.457*t)
end function dv

subroutine Euler(h,x,v)
implicit none
real :: v,x,h,dv
integer :: i

x(i+1) = x(i) + v(i)*h
v(i+1) = v(i) + dv(i)*h


end subroutine Euler
 

Answers and Replies

  • #2
SteamKing
Staff Emeritus
Science Advisor
Homework Helper
12,798
1,666
Please use
Code:
 tags when attaching source files.

IDK about your error, but the program has some serious errors in implementation.

For example, in the main program, you have a DO WHILE construct calculating values for the arrays t,x, and v.
The problem is, the array index i is never defined or calculated, either inside or outside the DO WHILE construct.

The condition for termination (t(i) <= n) can't be met because what value of the t array should be used?  There are no statements which define any of the values of the t array except for t(1) = 0.0.
 
  • #3
DrClaude
Mentor
7,259
3,413
When I try to compile, it comes up with an error "Unclassifiable statement at (1)".
I don't know either about this error. What compiler are you using?

To add to what SteamKing said, here are some more flagrant errors:

do while(t(i) <= n)
h = t(i+1) - t(i)
t(i) has never been defined. And usually, you would do this the other way around: you define h, and then increment t.

write(6,'(4(e12.5,3x))') t(i), x(i), v(i)

t(i)=t(i+1)
x(i)=x(i+1)
v(i)=v(i+1)
If you're only going to print out t, x, and v, there is no need to store them in an array.


function dx(t)
implicit none
real dx, t
dx = exp(-0.9*t)*(-2.5*exp(0.557*t)-2.8*exp(-0.557*t))
end function dx
This function is never used.


dv=-0.2941*exp(-0.343*t)-5.9439*exp(-1.457*t)
This is an extremely strange equation to see in combination with the Euler method. You seem to already know what ##v(t)## is. What problem are you actually trying to solve?

subroutine Euler(h,x,v)
implicit none
real :: v,x,h,dv
integer :: i

x(i+1) = x(i) + v(i)*h
v(i+1) = v(i) + dv(i)*h

end subroutine Euler
x and v are not arrays in the subroutine, so they shouldn't have any index. dv is not declared as external. dv takes a real as an argument, not an integer. i is never defined.
 
  • #4
AlephZero
Science Advisor
Homework Helper
6,994
291
Most likely, the error is because you and your compiler have different ideas about whether the program file is in fixed format or free format. Or, you are using an editor which has added some unwanted (and invisible) characters to the file.

But as others have said, there are plenty more problems to fix after have sorted that out!
 

Related Threads on Fortran program for oscillator using Euler method

  • Last Post
Replies
5
Views
6K
Replies
1
Views
6K
Replies
2
Views
12K
Replies
15
Views
30K
  • Last Post
Replies
5
Views
2K
  • Last Post
Replies
4
Views
2K
  • Last Post
Replies
1
Views
10K
  • Last Post
Replies
2
Views
6K
Top