声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2149|回复: 0

[Fortran] wilson时程积分法计算结构的地震响应时程的程序

[复制链接]
发表于 2006-10-10 10:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
  1. $debug      
  2.       IMPLICIT REAL*8(A-H,O-Z)
  3.       DIMENSION AMZL(7,7),AKK1(7,7),AKGD(7,7),AMZL1(7,7)        
  4.       DIMENSION XX(7),XXG0(2720),XXG(2720)
  5.         DIMENSION FF(7,1),XX2PP(2720,7),XX1PP(2720,7),XXPP(2720,7)
  6.         DIMENSION xpie1(7,1),xpie2(7,1),xpie(7,1)
  7.         DIMENSION guodu1(7,1),guodu2(7,1),guodu(7,1)
  8.         DIMENSION IS(7),JS(7)
  9.       DOUBLE PRECISION AKK1       

  10.       DOUBLE PRECISION AMZL,AKGD

  11.         DATA AMZL/4818000.,0,0,0,0,0,0,
  12.      *         0,1475000.,0,0,0,0,0,
  13.      *         0,0,1302000.,0,0,0,0,
  14.      *         0,0,0,1533000.,0,0,0,
  15.      *         0,0,0,0,1840000.,0,0,
  16.      *         0,0,0,0,0,2205000.,0,
  17.      *         0,0,0,0,0,0,3738000./
  18.       DATA AKGD/655000000.,-366000000.,0,0,0,0,0,
  19.      *         -366000000.,734000000.,-368000000.,0,0,0,0,
  20.      *         0,-368000000.,778000000.,-410000000.,0,0,0,
  21.      *         0,0,-410000000.,901000000.,-491000000.,0,0,
  22.      *         0,0,0,-491000000.,1086000000.,-595000000.,0,
  23.      *         0,0,0,0,-595000000.,1344000000.,-749000000.,
  24.      *         0,0,0,0,0,-749000000.,749000000./

  25. C        DATA II/1,1,1,1,1,1,1/
  26.       
  27.         THITA=1.4
  28.         DATAT=0.02
  29.         alfa=0.1956
  30.         bata=0.0095

  31.          DO 75 I=1,7
  32.          DO 75 J=1,7
  33.        AMZL1(I,J)=AMZL(I,J)*(6./(THITA**2*DATAT**2)+
  34.      *         3.*alfa/(THITA*DATAT))
  35. 75       CONTINUE

  36.          DO 85 I=1,7
  37.          DO 85 J=1,7
  38.             AKK1(I,J)=AKGD(I,J)*(1.+3.*bata/(THITA*DATAT))+AMZL1(I,J)
  39. 85       CONTINUE


  40.         CALL INV(AKK1,7,L,IS,JS)



  41.         NMB=100      

  42.       OPEN(1,FILE='TAFTNE21.txt',STATUS='OLD')        
  43.               do 18 j=1,NMB

  44. 18       read(1,*)XXG0(j)
  45.       close(1)

  46.         XXG(1)=XXG0(1)
  47.               do 28 j=2,NMB
  48. 28       XXG(J)=XXG0(j)-XXG0(j-1)


  49.               do 38 j=1,7
  50. 38           FF(J,1)=-AMZL(J,J)*XXG(1)

  51.           CALL MUL(AKK1,FF,7,7,1,XX)

  52.          do 48 j=1,7
  53.       XX2PP(1,J)=XX(J)*6./(THITA**3.*DATAT**2.)
  54.         XX1PP(1,J)=XX2PP(1,J)*DATAT/2.
  55.         XXPP(1,J)=XX2PP(1,J)*DATAT**2/6.
  56. 48    CONTINUE


  57.       do 200 I=2,2720       

  58.          do 49 j=1,7
  59.       xpie2(j,1)=XX2PP(I-1,J)
  60.         xpie1(j,1)=XX1PP(I-1,J)
  61.         xpie(j,1)=XXPP(I-1,J)
  62. 49    CONTINUE

  63.        CALL MUL(AKGD,xpie1,7,7,1,guodu1)
  64.        CALL MUL(AKGD,xpie2,7,7,1,guodu2)

  65.         do 101 j=1,7
  66. 101          FF(J,1)=-AMZL(J,J)*XXG(I)+AMZL(J,J)*(XX1PP(I-1,J)*(6./THITA/DATAT+
  67.      *             3.*alfa)+XX2PP(I-1,J)*(3.+alfa*THITA*DATAT/2.))+
  68.      *             bata*(3.*guodu1(j,1)+THITA*DATAT/2.*guodu2(j,1))

  69.          CALL MUL(AKK1,FF,7,7,1,XX)

  70.          do 108 j=1,7
  71.       XX2PP(I,J)=XX(J)*6./(THITA**3*DATAT**2)-6./(THITA**2*DATAT)
  72.      *                 *XX1PP(I-1,J)+(1.-3./THITA)*XX2PP(I-1,J)
  73.         XX1PP(I,J)=XX1PP(I-1,J)+(XX2PP(I,J)+XX2PP(I-1,J))*DATAT/2.
  74.         XXPP(I,J)=XXPP(I-1,J)+DATAT*XX1PP(I-1,J)+(2.*XX2PP(I-1,J)+
  75.      *                XX2PP(I,J))*DATAT**2/6.
  76. 108    CONTINUE
  77. 200    CONTINUE

  78.       OPEN(2,FILE='XX2PP.out')
  79.       OPEN(3,FILE='XX1PP.out')
  80.       OPEN(4,FILE='XXPP.out')


  81.       write(2,111)((XX2PP(I,J),J=1,7),I=1,2720)
  82.       write(3,111)((XX1PP(I,J),J=1,7),I=1,2720)
  83.         write(4,111)((XXPP(I,J),J=1,7),I=1,2720)


  84.    
  85. 111   format(7e13.5)   
  86.       close(2)
  87.       close(3)
  88.         close(4)

  89.       END   
  90.    


  91.         SUBROUTINE INV(A,N,L,IS,JS)
  92.         DIMENSION A(N,N),IS(N),JS(N)
  93.         DOUBLE PRECISION A,T,D
  94.         L=1
  95.         DO 100 K=1,N
  96.           D=0.0
  97.           DO 10 I=K,N
  98.           DO 10 J=K,N
  99.             IF (ABS(A(I,J)).GT.D) THEN
  100.               D=ABS(A(I,J))
  101.               IS(K)=I
  102.               JS(K)=J
  103.             END IF
  104. 10          CONTINUE
  105.           IF (D+1.0.EQ.1.0) THEN
  106.             L=0
  107.             WRITE(*,20)
  108.             RETURN
  109.           END IF
  110. 20          FORMAT(1X,'ERR**NOT INV')
  111.           DO 30 J=1,N
  112.             T=A(K,J)
  113.             A(K,J)=A(IS(K),J)
  114.             A(IS(K),J)=T
  115. 30          CONTINUE
  116.           DO 40 I=1,N
  117.             T=A(I,K)
  118.             A(I,K)=A(I,JS(K))
  119.             A(I,JS(K))=T
  120. 40          CONTINUE
  121.           A(K,K)=1/A(K,K)
  122.           DO 50 J=1,N
  123.             IF (J.NE.K) THEN
  124.               A(K,J)=A(K,J)*A(K,K)
  125.             END IF
  126. 50          CONTINUE
  127.           DO 70 I=1,N
  128.             IF (I.NE.K) THEN
  129.               DO 60 J=1,N
  130.                 IF (J.NE.K) THEN
  131.                   A(I,J)=A(I,J)-A(I,K)*A(K,J)
  132.                 END IF
  133. 60              CONTINUE
  134.             END IF
  135. 70          CONTINUE
  136.           DO 80 I=1,N
  137.             IF (I.NE.K) THEN
  138.               A(I,K)=-A(I,K)*A(K,K)
  139.             END IF
  140. 80          CONTINUE
  141. 100        CONTINUE
  142.         DO 130 K=N,1,-1
  143.           DO 110 J=1,N
  144.             T=A(K,J)
  145.             A(K,J)=A(JS(K),J)
  146.             A(JS(K),J)=T
  147. 110          CONTINUE
  148.           DO 120 I=1,N
  149.             T=A(I,K)
  150.             A(I,K)=A(I,IS(K))
  151.             A(I,IS(K))=T
  152. 120          CONTINUE
  153. 130        CONTINUE
  154.         RETURN
  155.         END


  156.         SUBROUTINE MUL(A,B,M,N,K,C)
  157.         DIMENSION A(M,N),B(N,K),C(M,K)
  158.         DOUBLE PRECISION A,B,C
  159.         DO 50 I=1,M
  160.         DO 50 J=1,K
  161.           C(I,J)=0.0
  162.           DO 10 L=1,N
  163.             C(I,J)=C(I,J)+A(I,L)*B(L,J)
  164. 10          CONTINUE
  165. 50        CONTINUE
  166.         RETURN
  167.         END
复制代码

[ 本帖最后由 风花雪月 于 2006-10-11 15:16 编辑 ]

评分

1

查看全部评分

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-14 10:38 , Processed in 0.055721 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表