⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acousticf.f

📁 A C++ class library for scientific computing
💻 F
字号:
     !      INTEGER N, iters!      REAL check!      N = 128!      iters = N*3!      CALL echo_f77(N,iters,check)!      PRINT *, check!      END       SUBROUTINE echo_f77(N, niters, check)      INTEGER N, niters, iter      REAL check      REAL P1(N,N), P2(N,N), P3(N,N), C(N,N)      INTEGER i, j      CALL echo_f77_set(c, P1, P2, P3, N)      CALL checkArray(P2, N)      CALL checkArray(c, N)      DO iter=1, niters        DO j=2,N-1          DO i=2,N-1            P3(i,j) = (2-4*c(i,j))*P2(i,j) + c(i,j)*(P2(i,j-1)      .          + P2(i,j+1) + P2(i-1,j) + P2(i+1,j)) - P1(i,j)          END DO        END DO        DO j=1,N          DO i=1,N            P1(i,j) = P2(i,j)            P2(i,j) = P3(i,j)          END DO        END DO      END DO      check = P1(N/2,7*N/8)      RETURN      END      SUBROUTINE echo_f77_set(c, P1, P2, P3, N)      INTEGER N      REAL c(N,N), P1(N,N), P2(N,N), P3(N,N)      INTEGER i, j, blockLeft, blockRight, blockTop, blockBottom      INTEGER channelLeft, channelRight, channel1Height, channel2Height      INTEGER cr, cc      REAL s2!     Default velocity in the air      DO j=1,N        DO i=1,N          c(i,j) = 0.2        END DO      END DO    !     Solid block with which the pulse collids       blockLeft = 1      blockRight = 2 * N / 5.0      blockTop = N / 3.0      blockBottom = 2 * N / 3.0      DO j=blockLeft,blockRight        DO i=blockTop,blockBottom          c(i,j) = 0.5        END DO      END DO!     Channel directing the pulse leftwards      channelLeft = 4 * N / 5.0      channelRight = N      channel1Height = 3 * N / 8.0      channel2Height = 5 * N / 8.0      DO j = channelLeft,channelRight        c(channel1Height,j) = 0.0        c(channel2Height,j) = 0.0      END DO!     Initial pressure distribution: a gaussian pulse inside the channel      cr = N / 2      cc = 7 * N / 8.0      s2 = 64.0 * 9.0 / ((N/2.0) ** 2)      print *, 'cr = ', cr, ' cc = ', cc, ' s2 = ', s2      DO j=1,N        DO i=1,N          P1(i,j) = 0.0          P2(i,j) = exp(-((i-cr)**2 + (j-cc)**2) * s2)          P3(i,j) = 0.0        END DO      END DO      RETURN      END      SUBROUTINE checkArray(A, N)      INTEGER N      REAL A(N,N)      INTEGER i,j      REAL check      check = 0.0      DO j=1,N        DO i=1,N          check = check + (i*n+j)*A(i,j)        END DO      END DO      PRINT *, 'Array check: ', check      RETURN      END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -