Advertisement
Guest User

Untitled

a guest
Nov 18th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.76 KB | None | 0 0
  1. program rungekutta
  2. implicit none
  3. integer, parameter :: dp = selected_real_kind(15,300)
  4. integer :: i
  5. real(kind=dp) z, y, t
  6. do i=1,100
  7. call rk2(dydt, dzdt, z, y, t)
  8. print *, z, y
  9. end do
  10.  
  11. contains
  12. subroutine rk2(z, y, t)
  13. implicit none
  14. integer, parameter :: dp = selected_real_kind(15,300)
  15. real(kind=dp) :: k1y, k1z, k2y, k2z, n, h=0.1, y=1, z=0, t
  16. k1y = dydt(y,z,t)*h
  17. k1z = dzdt(y,z,t)*h
  18. k2z = dzdt(y + (0.5*k1y), z + (0.5*k1z), t + (0.5*h))*h
  19. k2y = dydt(y, z +(0.5*k1z), t)*h
  20. y = y + k2y
  21. z = z + k2z
  22. end subroutine
  23.  
  24. function dzdt(y,z,t)
  25. real(kind=dp) :: y, z, t, dzdt, omega=1, A=0, B, C=0, D=0
  26. B = omega**2
  27. dzdt = A*y**3 + B*y - C*z + D*sin(omega*t)
  28. end function
  29.  
  30. function dydt(z)
  31. real(kind=dp) :: z, dydt
  32. dydt = z
  33. end function
  34. end program
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement