声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

声振论坛 展示 科学计算 算法编程 查看内容

精细时程积分FORTRAN源程序

2015-10-29 01:41| 发布者: aspen| 查看: 1256| 评论: 42|原作者: 风花雪月|来自: 声振论坛

摘要: 主程序main.f90,搞了两个例子进行调用,例子是钟院士那篇文献里的,附后的文献里有的。一个程序是reciseTIM.f90,里面包含了精细时程积分的子程序。 最后的PDF文件是程序说明. 主程序Program Main use Prec ...
主程序main.f90,搞了两个例子进行调用,例子是钟院士那篇文献里的,附后的文献里有的。一个程序是reciseTIM.f90,里面包含了精细时程积分的子程序。

最后的PDF文件是程序说明.

主程序Program Main
  1. use PreciseTimeIntegration

  2. Real(8), Dimension(8, 8) :: K,M,C,INVK
  3. Real(8), Dimension(8, 4) :: R,U,V,A
  4. Real(8) dt
  5. dt=1

  6. R=0
  7. C=0
  8. C(7,7)=5
  9. C(7,8)=-5
  10. C(8,7)=-5
  11. C(8,8)=5
  12. DO i=1,8
  13. M(i,i)=8
  14. END DO
  15. DO i=1,7
  16. K(i,i+1)=-4
  17. k(i+1,i)=-4
  18. END DO
  19. DO i=2,7
  20. k(i,i)=8
  21. END DO
  22. K(1,1)=4
  23. K(8,8)=4
  24. ! WRITE (*,*) M
  25. ! WRITE (*,*) K
  26. ! WRITE (*,*) C
  27. ! INVK=INV(K,8)
  28. ! STOP

  29. U=0
  30. U(8,1)=10
  31. V=0
  32. A=0
  33. call PreciseTIM (M, C, k, R, 8, 4, dt, U, V, A)
  34. write (*,*) U
  35. ! write (*,*) V
  36. ! write (*,*) A

  37. end
复制代码


本程序来自http://bbs.tongji.edu.cn/bbsanc.php?path=%2FPersonalCorpus%2FA%2FABAYA%2FD4F47E4DC%2FA41E7F755

精细时程积分文件:

PreciseTIM.f90

!-----------------------------------------------------------------
    Module PreciseTimeIntegration

    Contains

  1. !//////////////////////////////////////////////////////////////
  2.     Subroutine PreciseTIM (M, G, K, R, N, Nt, tao, X, XX, XXX)
  3. !//////////////////////////////////////////////////////////////
  4. !   精细时程积分法程序,
  5. !       ABAYA,同济大学建筑工程系,2001.7.20
  6. !!//////////////////////////////////////////////////////////////
  7.     Real*8     M(N,N), G(N,N), K(N,N), R(N,Nt), X(N,Nt), &
  8.                XX(N,Nt), XXX(N,Nt), H(2*N,2*N), T(2*N,2*N), &
  9.                R0(2*N,Nt), R1(2*N,Nt), B(N,N), C(N,N), tao
  10.     Call CalH (M, G, K, N, Nt, H, B, C)
  11.     Call CalT (H, tao, N, T)
  12.     Call CalR0R1 (R, R0, R1, N, Nt)
  13.     Call CalX (T, H, R, R0, R1, tao, N, Nt, M, G, B, C, X, XX, XXX)
  14.     End Subroutine PreciseTIM
  15. !//////////////////////////////////////////////////////////////
  16.     Subroutine CalH (M, G, K, N, Nt, H, B, C)
  17.     Real*8     M(N,N), G(N,N), K(N,N), R(N,Nt), INVM(N,N), &
  18.                A(N,N), B(N,N), C(N,N), D(N,N), H(2*N,2*N)
  19.     INVM=INV(M,N)
  20.     A=-0.5*Matmul(INVM,G)
  21.     B=0.25*Matmul(Matmul(G,INVM),G)-K
  22.     C=-0.5*Matmul(G,INVM)
  23.     D=INVM
  24.     H(1:N,1:N)=A
  25.     H(N+1:2*N,1:N)=B
  26.     H(1:N,N+1:2*N)=D
  27.     H(N+1:2*N,N+1:2*N)=C
  28.     End Subroutine CalH
  29. !//////////////////////////////////////////////////////////////
  30.     Subroutine CalT (H, tao, N, T)
  31.     Real*8, Dimension(2*N,2*N) :: H, T, Ta, I
  32.     Real*8 tao, dt
  33.     Integer m
  34.     m=2**20
  35.     dt=tao/m
  36.     I=0; T=0
  37.     Do j=1,2*N
  38.     I(j,j)=1
  39.     End do
  40.     Ta=Matmul(dt*H,(I+0.5*dt*H))
  41.     Do j=1,20
  42.     Ta=2*Ta+Matmul(Ta,Ta)
  43.     End do
  44.     T=I+Ta
  45.     End Subroutine CalT
  46. !//////////////////////////////////////////////////////////////
  47.     Subroutine CalR0R1 (R, R0, R1, N, Nt)
  48.     Real*8 R(N,Nt), R0(2*N,Nt), R1(2*N,Nt)
  49.     R0=0; R1=0;
  50.     R0(N+1:2*N,:)=R
  51.     Do i=2,Nt
  52.     R1(N+1:2*N,i-1)=R(:,i)-R(:,i-1)
  53.     End do
  54.     End Subroutine CalR0R1
  55. !//////////////////////////////////////////////////////////////
  56.     Subroutine CalX (T, H, R, R0, R1, tao, N, Nt, M, G, B, C, X, XX, XXX)
  57.     Real*8     X(N,Nt), XX(N,Nt), XXX(N,Nt), H(2*N,2*N), &
  58.               T(2*N,2*N), R0(2*N,Nt), R1(2*N,Nt), V(2*N,Nt), &
  59.     p(N,Nt), q(N,Nt), R(N,Nt), B(N,N), C(N,N), M(N,N), &
  60.     G(N,N), tao, INVH(2*N,2*N), index
  61.    
  62.     q=X
  63.     p=Matmul(M,XX)+0.5*Matmul(G,X)
  64.     V(1:N,:)=q
  65.     V(N+1:2*N,:)=p
  66.     index=0
  67.     Do i=1,2*N
  68.     Do j=1,Nt
  69.     IF (ABS(R0(i,j)).GT.1E-8) THEN
  70.     index=1; GOTO 10
  71.     END IF
  72.     End do
  73.     End do
  74. 10  If (abs(index).gt.1e-8) then
  75.     INVH=INV(H,2*N)
  76.     Do i=2,Nt
  77.     WRITE (*,'("***********   LOAD STEP: ",I5,"   ***********")') i
  78.     V(:,i)=Matmul(T,(V(:,i-1)+Matmul(INVH,(R0(:,i-1)+ &
  79.            Matmul(INVH,R1(:,i-1))))))-Matmul(INVH &
  80.            ,(R0(:,i-1)+Matmul(INVH,R1(:,i-1))+ &
  81.            tao*R1(:,i-1)))
  82.     End do
  83.     Else
  84.     Do i=2,Nt
  85.     WRITE (*,'("***********   LOAD STEP: ",I5,"   ***********")') i
  86.     V(:,i)=Matmul(T,V(:,i-1))
  87.     End do
  88.     End if

  89.     q=V(1:N,:)
  90.     p=V(N+1:2*N,:)  
  91.     Do i=1,Nt
  92.     X(:,i)=q(:,i)
  93.     XX(:,i)=Matmul(INV(M,N),p(:,i))-0.5*Matmul(Matmul(INV(M,N),G),X(:,i))
  94. XXX(:,i)=Matmul(Matmul(INV(M,N),B),X(:,i))-0.5*Matmul(Matmul(INV(M,N) &
  95. ,G),XX(:,i))+Matmul(Matmul(INV(M,N),C),p(:,i))+Matmul(INV(M,N),R(:,i))
  96.     End do
  97.     End Subroutine CalX
  98. !//////////////////////////////////////////////////////////////
  99.     Function INV (A, N)
  100.     Use Numerical_Libraries
  101.     REAL*8, DIMENSION(N,N) :: A, INV
  102.     INV=0
  103.     CALL DLINRG (N, A, N, INV, N)
  104.     End Function INV
  105. !//////////////////////////////////////////////////////////////
复制代码

    End Module PreciseTimeIntegration
发表评论

最新评论

引用 风花雪月 2005-8-7 16:21
精细时程积分文件:

PreciseTIM.f90

!-----------------------------------------------------------------
    Module PreciseTimeIntegration

    Contains

  1. !//////////////////////////////////////////////////////////////
  2.     Subroutine PreciseTIM (M, G, K, R, N, Nt, tao, X, XX, XXX)
  3. !//////////////////////////////////////////////////////////////
  4. !   精细时程积分法程序,
  5. !       ABAYA,同济大学建筑工程系,2001.7.20
  6. !!//////////////////////////////////////////////////////////////
  7.     Real*8     M(N,N), G(N,N), K(N,N), R(N,Nt), X(N,Nt), &
  8.                XX(N,Nt), XXX(N,Nt), H(2*N,2*N), T(2*N,2*N), &
  9.                R0(2*N,Nt), R1(2*N,Nt), B(N,N), C(N,N), tao
  10.     Call CalH (M, G, K, N, Nt, H, B, C)
  11.     Call CalT (H, tao, N, T)
  12.     Call CalR0R1 (R, R0, R1, N, Nt)
  13.     Call CalX (T, H, R, R0, R1, tao, N, Nt, M, G, B, C, X, XX, XXX)
  14.     End Subroutine PreciseTIM
  15. !//////////////////////////////////////////////////////////////
  16.     Subroutine CalH (M, G, K, N, Nt, H, B, C)
  17.     Real*8     M(N,N), G(N,N), K(N,N), R(N,Nt), INVM(N,N), &
  18.                A(N,N), B(N,N), C(N,N), D(N,N), H(2*N,2*N)
  19.     INVM=INV(M,N)
  20.     A=-0.5*Matmul(INVM,G)
  21.     B=0.25*Matmul(Matmul(G,INVM),G)-K
  22.     C=-0.5*Matmul(G,INVM)
  23.     D=INVM
  24.     H(1:N,1:N)=A
  25.     H(N+1:2*N,1:N)=B
  26.     H(1:N,N+1:2*N)=D
  27.     H(N+1:2*N,N+1:2*N)=C
  28.     End Subroutine CalH
  29. !//////////////////////////////////////////////////////////////
  30.     Subroutine CalT (H, tao, N, T)
  31.     Real*8, Dimension(2*N,2*N) :: H, T, Ta, I
  32.     Real*8 tao, dt
  33.     Integer m
  34.     m=2**20
  35.     dt=tao/m
  36.     I=0; T=0
  37.     Do j=1,2*N
  38.     I(j,j)=1
  39.     End do
  40.     Ta=Matmul(dt*H,(I+0.5*dt*H))
  41.     Do j=1,20
  42.     Ta=2*Ta+Matmul(Ta,Ta)
  43.     End do
  44.     T=I+Ta
  45.     End Subroutine CalT
  46. !//////////////////////////////////////////////////////////////
  47.     Subroutine CalR0R1 (R, R0, R1, N, Nt)
  48.     Real*8 R(N,Nt), R0(2*N,Nt), R1(2*N,Nt)
  49.     R0=0; R1=0;
  50.     R0(N+1:2*N,:)=R
  51.     Do i=2,Nt
  52.     R1(N+1:2*N,i-1)=R(:,i)-R(:,i-1)
  53.     End do
  54.     End Subroutine CalR0R1
  55. !//////////////////////////////////////////////////////////////
  56.     Subroutine CalX (T, H, R, R0, R1, tao, N, Nt, M, G, B, C, X, XX, XXX)
  57.     Real*8     X(N,Nt), XX(N,Nt), XXX(N,Nt), H(2*N,2*N), &
  58.               T(2*N,2*N), R0(2*N,Nt), R1(2*N,Nt), V(2*N,Nt), &
  59.     p(N,Nt), q(N,Nt), R(N,Nt), B(N,N), C(N,N), M(N,N), &
  60.     G(N,N), tao, INVH(2*N,2*N), index
  61.    
  62.     q=X
  63.     p=Matmul(M,XX)+0.5*Matmul(G,X)
  64.     V(1:N,:)=q
  65.     V(N+1:2*N,:)=p
  66.     index=0
  67.     Do i=1,2*N
  68.     Do j=1,Nt
  69.     IF (ABS(R0(i,j)).GT.1E-8) THEN
  70.     index=1; GOTO 10
  71.     END IF
  72.     End do
  73.     End do
  74. 10  If (abs(index).gt.1e-8) then
  75.     INVH=INV(H,2*N)
  76.     Do i=2,Nt
  77.     WRITE (*,'("***********   LOAD STEP: ",I5,"   ***********")') i
  78.     V(:,i)=Matmul(T,(V(:,i-1)+Matmul(INVH,(R0(:,i-1)+ &
  79.            Matmul(INVH,R1(:,i-1))))))-Matmul(INVH &
  80.            ,(R0(:,i-1)+Matmul(INVH,R1(:,i-1))+ &
  81.            tao*R1(:,i-1)))
  82.     End do
  83.     Else
  84.     Do i=2,Nt
  85.     WRITE (*,'("***********   LOAD STEP: ",I5,"   ***********")') i
  86.     V(:,i)=Matmul(T,V(:,i-1))
  87.     End do
  88.     End if

  89.     q=V(1:N,:)
  90.     p=V(N+1:2*N,:)  
  91.     Do i=1,Nt
  92.     X(:,i)=q(:,i)
  93.     XX(:,i)=Matmul(INV(M,N),p(:,i))-0.5*Matmul(Matmul(INV(M,N),G),X(:,i))
  94. XXX(:,i)=Matmul(Matmul(INV(M,N),B),X(:,i))-0.5*Matmul(Matmul(INV(M,N) &
  95. ,G),XX(:,i))+Matmul(Matmul(INV(M,N),C),p(:,i))+Matmul(INV(M,N),R(:,i))
  96.     End do
  97.     End Subroutine CalX
  98. !//////////////////////////////////////////////////////////////
  99.     Function INV (A, N)
  100.     Use Numerical_Libraries
  101.     REAL*8, DIMENSION(N,N) :: A, INV
  102.     INV=0
  103.     CALL DLINRG (N, A, N, INV, N)
  104.     End Function INV
  105. !//////////////////////////////////////////////////////////////
复制代码

    End Module PreciseTimeIntegration
引用 linqus 2005-8-7 18:54
赞一个先,
自己也曾编过线性的wilson时程分析程序.
可以解决剪切层模型问题.没有作验证:)
引用 wgp1976 2005-8-8 15:35
对此比较感兴趣,先睹为快
引用 wangjiaqi4 2005-8-9 14:27
谢谢了,感谢共享这么好的源代码。
引用 simon21 2005-8-9 21:23
谢谢共享
引用 mxtfirst 2005-8-16 10:37
pdf的文档怎么无法下载?
引用 bgzhoumse 2005-8-22 20:39
使用marc进行有限元分析时一定要用fortran语言进行有关的编程吗?可不可以用C语言
引用 NASA 2005-8-22 20:51
Marc的接口是Fortran的,会C语言学Fortran不难
Marc各个版本与fortran版本搭配如下:

marc2003需要fortran6.0以上版本
marc2000以及marc2001需要fortran5.0以上版本
引用 dovenkai 2005-8-23 20:26
ding
引用 liu3806881 2005-8-27 22:39
哈哈,找拉好久的拉
好!!!!
引用 xj2070 2005-8-28 16:09
非常不错的东西,感谢搂住的热心
引用 hit_zzc 2005-8-30 17:22
好咚咚
引用 johhan 2005-8-30 20:40
先看一下,是否有用
引用 jsswdd 2005-9-17 01:34
xiexie
引用 zyzl 2005-9-29 12:31
看看再说
引用 andylei 2005-10-2 11:03
谢了!
引用 qiluin3q 2005-10-7 12:02
精细时程分析?下来看看.
引用 hawking 2005-10-8 22:08
谢谢楼主!
引用 catmagic 2005-10-15 13:05

查看全部评论(42)

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-28 12:30 , Processed in 0.052608 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部