dzp2d.f
上传用户:ls4004p
上传日期:2007-08-05
资源大小:2314k
文件大小:2k
源码类别:

并行计算

开发平台:

Matlab

  1. C**********************************************************************
  2. C     D Z P 2 D
  3. C
  4. C     Joachim Falk , Uni Hamburg , (0049)/(0) - 40 / 4123 5050
  5. C     Institute for Geophysics
  6. C     email falk@dkrz.de
  7. C
  8. C       fs = jumper for free surface (1=on, 2=off)
  9. C       ZA, ZE: first and last grid-row of differentiation
  10. C       SA, SE: first and last grid-column of differentiation
  11. C**********************************************************************
  12.       SUBROUTINE DZP2D(IN, OUT, nx, nz, dz, ZA, ZE, SA, SE, fs)  
  13.       IMPLICIT NONE
  14.       INCLUDE 'param.f'
  15.       REAL IN(MAXCOLS,MAXROWS), OUT(MAXCOLS,MAXROWS), 
  16.      &     dz, G1, G2, G3, F1
  17.       INTEGER nx, nz, r, c, INIT, ZA, ZE, SA, SE, fs
  18.       SAVE F1, G1, G2, G3, INIT
  19.       DATA INIT /0/  
  20.   
  21.       IF (INIT .eq. 0) THEN  
  22.          INIT =   1  
  23.          F1   =   1. / dz           
  24.          G1   =   75. / (64. * dz)  
  25.          G2   =   -25. / (384. * dz)    
  26.          G3   =   3. / (640. * dz)      
  27.       ENDIF  
  28.       DO c = 1 , SA-1
  29.          DO r = 1 , nz
  30.             OUT(c,r) = 0.
  31.          ENDDO
  32.       ENDDO
  33.       DO c = SE+1 , nx
  34.          DO r = 1 , nz
  35.             OUT(c,r) = 0.
  36.          ENDDO
  37.       ENDDO
  38.       DO r = 1 , ZA-1
  39.          DO c = SA , SE
  40.             OUT(c,r) = 0.
  41.          ENDDO
  42.       ENDDO
  43.       DO r =  ZA , ZA+1
  44.          DO c = SA , SE
  45.             OUT(c,r) = F1 * ( IN(c,r+1)- IN(c,r) ) 
  46.          ENDDO
  47.       ENDDO  
  48.       DO r = ZA+2 , ZE-3
  49.          DO c = SA , SE
  50. C            OUT(c,r) =        
  51. C     &          F1 * (IN(c,r+1) - IN(c,r  ))  ! second order
  52.             OUT(c,r) =        
  53.      &          G1 * (IN(c,r+1) - IN(c,r  )) + 
  54.      &          G2 * (IN(c,r+2) - IN(c,r-1)) +  
  55.      &          G3 * (IN(c,r+3) - IN(c,r-2))
  56.          ENDDO
  57.       ENDDO  
  58.       DO r = ZE-2 , ZE
  59.          DO c = SA , SE
  60.             OUT(c,r) =  F1 * ( IN(c,r+1) - IN(c,r) ) 
  61.          ENDDO
  62.       ENDDO  
  63.          
  64. C      DO r = ZE+1 , nz
  65. C         DO c = SA , SE
  66. C            OUT(c,r) = 0.
  67. C         ENDDO
  68. C      ENDDO
  69.       RETURN
  70.       END