24小时热门版块排行榜    

查看: 2089  |  回复: 0

gailisen

新虫 (初入文坛)

[求助] 采用runge-kutta法求解常微分方程组时,时间步长怎么设定,积分时间最长为多少

我编制了一个验证弹性碰撞碰撞开始时和碰撞结束时的速度等值反向的FORTRAN程序。
采用的runge-kutta算法,使用的NETLIB上的程序包rksuite。我设置得误差限是1e-6,接触刚度为1E10数量级的,我设置得步长是1e-6s,积分总时间为0~0.1s。
我通过计算发现弹性碰撞开始到弹性碰撞结束发生在1E-6s的数量级上。我把这个过程找到了。并验证了程序的正确性。

但是,我们老师给我提出了一个问题,如果想要用此程序计算第100s,第1000s的结果,我的程序能不能实现。
我通过调试发现:最多能够计算到0.2s左右。我试过了增大、减小积分步长,增大、减小误差限,但是效果都不明显,都只能计算到0.2s左右。
而且,我发现一般参考书上的解常微分方程的积分时间最多也只是1s左右。

我想问问各位前辈,该怎样修改程序才能够计算到任意时间,比如1000s的结果?

希望各位前辈不吝赐教。

我采用的runge-kutta求解器的下载地址为:
http://www.netlib.org/ode/rksuite/rksuite.f
下面是我编写的微分方程的主程序部分:
PROGRAM MAIN
      IMPLICIT NONE
      EXTERNAL F, SETUP, STAT, UT
      INTEGER, PARAMETER :: NEQ = 4, LENWRK = 128, Nr = 1, DOF = 2,
     1                       nDOF = 4, METHOD = 2
      INTEGER(8) K
      INTEGER I, NOUT, STPCST, STPSOK, TOTF, UFLAG
      LOGICAL ERRASS, MESAGE
      DOUBLE PRECISION T,Y(NEQ),YP(NEQ), TSTART, YSTART(NEQ), TEND, TOL,
     1                   THRES(NEQ), HSTART, WORK(LENWRK), TWANT,
     2                   HNEXT, TINC, TLAST, WASTE, YMAX(NEQ),
     3                   Rr, Mr, Jr, L, Ke, Ce, de, mu, Ri, Mi, Mt0, w,
     4                   Fx, Fy, Ji, Rou, PI, MCHPES, DWARF

      INTRINSIC COS, SIN
      
! 各变量赋初始值      
      TSTART = 0.0
      YSTART = (/0.095,0.0,0.2,0.0/)
      TLAST = 10
      TEND = 15
! 圆周率
      PI = 3.1415926
! 滚动体参数
! 滚动体端面圆半径(m)   
      Rr = 0.0135
! 滚动体质量(kg)
      Mr = 0.213
! 滚动体转动惯量
      Jr = 0.5*Mr*Rr*Rr
! 接触参数
! Hertz线接触系数(N/m^2)
      K = 8.06D10
! 滚动体与滚道接触长度(m)
      L = 0.048
! 接触刚度
      Ke = K*L**(8/9)

! 接触摩擦系数
      mu = 0.0
! 内圈参数
! 内圈滚道半径(m)
      Ri = 0.08
! 外圈参数
! 外圈滚道半径(m)
      Rou = 0.11
      
! 初始化输出结果
      OPEN(8,FILE='RESULT_3.TXT')
      WRITE(8,'(A,I10)') 'Template 1a with METHOD =', METHOD
      WRITE (8,'(/A/)')    '    t           y    '
      WRITE (8,'(1X,F11.6,4(3X,F11.6))') TSTART, YSTART      

! 设置误差限
      TOL = 1D-4
      THRES = 1D-12

! 调用子程序SETUP
      MESAGE = .TRUE.
      ERRASS = .FALSE.
      HSTART = 0.0D0
      CALL SETUP(NEQ,TSTART,YSTART,TEND,TOL,THRES,METHOD,'Usual
     1            Task',ERRASS,HSTART,WORK,LENWRK,MESAGE)      


! 计算NOUT等分点处的解
      NOUT = 1D8
      TINC = (TLAST-TSTART)/NOUT

      DO 40 I =1, NOUT
         TWANT = TLAST + (I-NOUT)*TINC
         CALL UT(F,TWANT,T,Y,YP,YMAX,WORK,UFLAG)

         IF (UFLAG.GT.2) GO TO 60

! Success. T = TWANT. Output computed and true solution components.
      WRITE (8,'(1X,F11.6,4(3X,F11.6))') T, Y
   40 CONTINUE
! The integration is complete or has failed in a way reported in a
! message to the standard output channel.
   60 CONTINUE
! YMAX(L) is the largest magnitude computed for the solution component
! Y(L) in the course of the integration from TSTART to the last T.  It
! is used to decide whether THRES(L) is reasonable and to select a new
! THRES(L) if it is not.

      WRITE (8,'(A/)') '             YMAX(I) '
      DO 80 I = 1, NEQ
         WRITE (8,'(13X,1PE8.2)')    YMAX(I)
   80 CONTINUE

! 调用子程序STAT
      CALL STAT(TOTF,STPCST,WASTE,STPSOK,HNEXT)
      WRITE (8,'(/A,I10)')
     1       ' The cost of the integration in evaluations of F is', TOTF

      STOP
      CLOSE(8)
      END PROGRAM MAIN





! *******************************************************************************



!微分方程组

      SUBROUTINE F(T,Y,YP)
      IMPLICIT NONE
      INTEGER(8) K
      DOUBLE PRECISION T, Y(4), YP(4), nh(3), Fni(3), v(3), vt(3),
     1      Ffi(3), nt(3), Fno(3), Ffo(3), PI, Rr, Mr, Jr, L, Ke, mu,Ri,
     2      Rou, dr, delta_i, delta_o, Ro, Fn_i, Ff_i, d_vt, Fn_o, Ff_o
         

! 圆周率
      PI = 3.1415926
! 滚动体参数
! 滚动体端面圆半径(m)   
      Rr = 0.0135
! 滚动体质量(kg)
      Mr = 0.213
! 滚动体转动惯量
      Jr = 0.5*Mr*Rr*Rr
! 接触参数
! Hertz线接触系数(N/m^2)
      K = 8.06E10
! 滚动体与滚道接触长度(m)
      L = 0.048
! 接触刚度
      Ke = K*L**(8/9)

! 接触摩擦系数
      mu = 0.0
! 内圈参数
! 内圈滚道半径(m)
      Ri = 0.08
! 外圈参数
! 外圈滚道半径(m)
      Rou = 0.11  

! 滚动体几何中心到坐标原点距离
      dr = Y(1)**2 + Y(2)**2; dr = sqrt(dr)
! 接触法线方向
      nh =(/Y(1),Y(2),0/) ; nh = nh/dr

! 滚动与内圈滚道之间嵌入量
      delta_i  = 0
! 滚动与外圈滚道之间嵌入量
      delta_o = 0
      IF ((dr-Rr).LT.Ri) THEN
          delta_i = Ri - (dr-Rr)
      ENDIF
      IF ( dr+Rr .GT. Rou ) THEN
         delta_o = (dr+Rr) - Rou
      ENDIF
! Fn: 法向接触力,Ff: 切向摩擦力
      Fn_i = 0 ; Ff_i = 0
! 滚动体与内圈滚道之间作用力大小
      IF (  delta_i .GT. 0 ) THEN
         Fn_i = K*delta_i ; Ff_i = mu*Fn_i
      ENDIF
! 滚动体与内圈滚道之间作用力(定义在全局惯性坐标系中)
      Fni = Fn_i*nh
! 滚动体相对于接触面(内圈)的相对运动速度
      v  = (/Y(3),Y(4),0/)
      vt =  v - nh*dot_product(v,nh)
      d_vt = sqrt(vt(1)**2 + vt(2)**2 + vt(3)**2)
      IF  ( d_vt .LT. 1e-12 ) THEN
         Ffi = (/0,0,0/)
      ELSE
         nt = -vt/d_vt
         Ffi = Ff_i *nt
      ENDIF


! 滚动体与外圈滚道之间作用力大小
      Fn_o = 0 ; Ff_o = 0
      IF (  delta_o .GT. 0 ) THEN
         Fn_o = K*delta_o
         Ff_o = mu*Fn_o
      ENDIF
! 滚动体与外圈滚道之间作用力(定义在全局惯性坐标系中)
      Fno = Fn_o*(-nh)
! 滚动体相对于接触面(外圈)的相对运动速度
      v  = (/Y(3),Y(4),0/)
      vt =  v - nh*dot_product(v,-nh)
      d_vt = sqrt(vt(1)**2 + vt(2)**2 + vt(3)**2)
      IF ( d_vt .LT. 1e-12 ) THEN
         Ffo = (/0,0,0/)
      ELSE
         nt = -vt/d_vt
         Ffo = Ff_o *nt
      ENDIF
! 运动微分方程
      YP(1) = Y(3)
      YP(2) = Y(4)   
      YP(3) = ( Fni(1) + Ffi(1) + Fno(1) + Ffo(1) )/Mr
      YP(4) = ( Fni(2) + Ffi(2) + Fno(2) + Ffo(2) )/Mr
      RETURN

      END SUBROUTINE F
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

找到一些相关的精华帖子,希望有用哦~

科研从小木虫开始,人人为我,我为人人
相关版块跳转 我要订阅楼主 gailisen 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 E4V9bALS54sj 2026-09-19 3/150 2026-09-20 01:39 by 9i7PCSZyMzot
[论文投稿] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 E4V9bALS54sj 2026-09-19 3/150 2026-09-20 01:27 by 9i7PCSZyMzot
[博后之家] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 E4V9bALS54sj 2026-09-19 3/150 2026-09-20 01:15 by 9i7PCSZyMzot
[考博] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 E4V9bALS54sj 2026-09-19 3/150 2026-09-20 01:03 by 9i7PCSZyMzot
[论文投稿] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 E4V9bALS54sj 2026-09-19 3/150 2026-09-20 00:51 by 9i7PCSZyMzot
[考研] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +3 4pRyVGCVerAA 2026-09-19 3/150 2026-09-20 00:15 by 9i7PCSZyMzot
[硕博家园] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 4pRyVGCVerAA 2026-09-19 3/150 2026-09-20 00:03 by 9i7PCSZyMzot
[找工作] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +4 4pRyVGCVerAA 2026-09-19 4/200 2026-09-20 00:03 by 9i7PCSZyMzot
[考博] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 4pRyVGCVerAA 2026-09-19 4/200 2026-09-19 23:51 by 9i7PCSZyMzot
[基金申请] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 4pRyVGCVerAA 2026-09-19 4/200 2026-09-19 23:39 by 9i7PCSZyMzot
[考研] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 4pRyVGCVerAA 2026-09-19 4/200 2026-09-19 23:27 by 9i7PCSZyMzot
[论文投稿] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 4pRyVGCVerAA 2026-09-19 4/200 2026-09-19 23:27 by 9i7PCSZyMzot
[考博] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +3 4pRyVGCVerAA 2026-09-19 4/200 2026-09-19 23:03 by 9i7PCSZyMzot
[公派出国] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 4pRyVGCVerAA 2026-09-18 7/350 2026-09-19 21:03 by 9i7PCSZyMzot
[教师之家] 现代”学阀”该如何界定 +3 iaeyuan 2026-09-19 3/150 2026-09-19 20:52 by 没昵称呀
[基金申请] 国社科系统bug了,是不是要放榜了? +7 kynobel 2026-09-16 9/450 2026-09-19 14:52 by 接好运婷
[考博] 申博发邮件 +8 Lmengk 2026-09-15 9/450 2026-09-19 09:27 by 中间体超市
[有机交流] 各位大神,目前国内有哪些比较好用的逆合成软件? 20+3 zapen 2026-09-15 9/450 2026-09-18 18:17 by zapen
[考博] 上海工程技术大学激光智能制造课题组|2027级博士研究生招生公告 +7 水士口 2026-09-16 8/400 2026-09-16 13:47 by kkklens
[考博] 上海工程技术大学激光智能制造课题组招收博士研究生 +8 两三岁ss 2026-09-14 8/400 2026-09-16 09:46 by 水士口
信息提示
请填处理意见