文档章节

RK4

ludlows
 ludlows
发布于 2014/10/07 22:55
字数 475
阅读 14
收藏 0
MODULE Global_data
  !Symbolic names for kind types of single- and double-precision reals: 
  INTEGER, PARAMETER :: SP = KIND(1.0) 
  INTEGER, PARAMETER :: DP = KIND(1.0D0) 
  !Frequently used mathematical constants (with precision to spare): 
  REAL(DP), PARAMETER :: Pi=3.141592653589793238462643383279502884197_dp 
  ! order of the problem
  INTEGER, PARAMETER :: no_of_equations=2
  ! parameters for the equation
  REAL(DP) :: y_initial(no_of_equations)
  REAL(DP) :: x_start,x_finish,h,kappa
END MODULE Global_data

MODULE RungeKutta_method
! here we just need dp, kappa, h and no_of_equations
! if we set wp=>sp we can change to single precision numbers
  USE global_data, ONLY : wp=>dp,h,kappa,no_of_equations
  IMPLICIT NONE

CONTAINS

  FUNCTION func(x,y)
!    we assign y to have 'no_of_equations's elements throughout to keep the program consistent
    REAL(wp) , INTENT(IN) :: x,y(no_of_equations)
    REAL(wp) :: func(no_of_equations)
!   The ODE here is y'' + kappa y' + x y = 0
!   so that the set of first ODEs is
!    y_1' = y_2
!    y_2' = - kappa y_2 - x y_1
! where we write y_1 = y and y_2 = y'
    func(1) = y(2)
    func(2) = -kappa*y(2) - x*y(1)

  END FUNCTION func

  FUNCTION rungekutta4(x,y)

    REAL(wp) , INTENT(IN) :: x,y(no_of_equations)
    REAL(wp),DIMENSION(no_of_equations) :: rungekutta4,k1,k2,k3,k4
    ! Note here that k1,k2,... etc are two element arrays.
    k1 = h*func(x,y)
    k2 = h*func(x+0.5_wp*h,y+0.5_wp*k1)
    k3 = h*func(x+0.5_wp*h,y+0.5_wp*k2)
    k4 = h*func(x+h,y+k3)
    rungekutta4 = y + (k1+2._wp*(k2+k3) + k4)/6._wp

  END FUNCTION rungekutta4

END MODULE RungeKutta_method

PROGRAM euler
  ! we need all the variables from global data
  USE global_data, ONLY : wp=>dp,kappa,h,x_start,x_finish,y_initial,no_of_equations
  ! RungeKutta_method gives us our rungekutta method function
  USE RungeKutta_method
  IMPLICIT NONE
  
  INTEGER :: i,no_of_steps
  REAL(wp) :: x,y(no_of_equations)
  
  ! Setup initial conditions
  ! set x_0 = 0
  x_start = 0._wp
  ! set x_n = 1
  x_finish = 1._wp
  ! Set y(x=0) = 0
  y_initial(1)=0._wp  
  ! Set y'(x=0) = 1
  y_initial(2)=1._wp
  ! Set the number of steps
  no_of_steps = 10
  ! Set the parameter kappa from the ODE
  kappa = 5._wp
  ! Set the step size
  h = (x_finish-x_start)/dble(no_of_steps)

  ! Open a file to write to and output some info to screen
  WRITE(6,*)' Run with ::',no_of_steps,' steps.'
  OPEN(unit=10,file="runge_kutta.dat")

  ! Set the start values of x and y
  x = x_start
  y = y_initial
  WRITE(6,'(3(E15.8,1X))')x,y
  WRITE(10,'(3(E15.8,1X))')x,y
    
  ! Loop over the required no. of steps to reach x_finish
  DO i=1,no_of_steps
	! update the values of x and y
     y = rungekutta4(x,y)
     x = x + h

     ! pick out only 10 value to print at.
     if(mod(i,no_of_steps/10)==0)THEN
     	! print to screen and file
         WRITE(6,'(3(E15.8,1X))')x,y
         WRITE(10,'(3(E15.8,1X))')x,y
     END if
        
  END DO

  CLOSE(unit=10)
  
END PROGRAM euler


© 著作权归作者所有

共有 人打赏支持
ludlows
粉丝 0
博文 15
码字总数 4195
作品 0
海淀
程序员
私信 提问
加载中

评论(2)

ludlows
ludlows

引用来自“明天以后”的评论

. 什么语言 没看懂...
fortran 这语言太老了啊
明天以后
明天以后
. 什么语言 没看懂...
利用RK4更新四元數並轉換成歐拉角及 OpenGL 的 Viewer

開發平台 : 硬體規格 Odroid-U2 作業系統 Ubuntu 13.10 Codename: saucy 下面都是一些基本的程式可示需求修改, 之後我會把算法跟GUI整再一起開發. 四元數更新 : Windows : dev-c++ 專案 : qu...

cctsao1008
2014/11/28
0
2

没有更多内容

加载失败,请刷新页面

加载更多

没有更多内容

IDE 插件新版本发布,开发效率 “biu” 起来了

近日,Cloud Toolkit正式推出了面向 IntelliJ 和 Eclipse 两个平台的新款插件,本文挑选了其中三个重大特性进行解读,点击文末官网跳转链接,可查看详细的版本说明。 本地应用一键部署到任何...

阿里云云栖社区
28分钟前
6
0
金丝雀发布、滚动发布、蓝绿发布到底有什么差别?关键点是什么?

根据 2017 年的 DevOps 发展报告,高效能组织和低效能组织在软件交付的效率上有数量级上的差异。技术组织的软件交付能力是一种综合能力,涉及众多环节,其中发布是尤为重要的环节。 作为技术...

问题终结者
56分钟前
3
0
Kubernetes Client-go Informer 源码分析

几乎所有的Controller manager 和CRD Controller 都会使用Client-go 的Informer 函数,这样通过Watch 或者Get List 可以获取对应的Object,下面我们从源码分析角度来看一下Client go Informe...

阿里云官方博客
今天
4
0
传统IDC部署网站(三)

11. 重置密码 密钥和密码都支持远程登陆, 二选一 两个都可以登陆, 密钥相对于密码来说,相对安全一点 本地登陆无法是用密钥 修改密码 root 用户 passwd root 修改普通用户 passwd usernam...

miko0089
今天
6
0
bash特性

1.支持别名 alias 2.命令替换 $(COMMANS) 或者 `COMMAND` 3. bash支持的引号: `` :命令替换 "":弱引用,可以实现变量替换 '':强引用,不实现变量替换 4.文件名通配 globbing:(man 7 glo...

忙碌的小蜜蜂
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部