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

并行计算

开发平台:

Matlab

  1. C**********************************************************************
  2. C       D X P 2 D
  3. C
  4. C       Joachim Falk , Uni Hamburg , (0049)/(0) - 40 / 4123 5050
  5. C       Institute for Geophysics
  6. C       11.07.1996
  7. C       email   falk@dkrz.de
  8. C
  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 DXP2D(IN,OUT, nx, nz, dx, ZA, ZE, SA, SE)  
  13.       IMPLICIT NONE  
  14.       INCLUDE 'param.f'
  15.       REAL IN(MAXCOLS,MAXROWS), OUT(MAXCOLS,MAXROWS), 
  16.      &     G1, G2, G3, F1, dx
  17.       INTEGER nx, nz, r, c, INIT, ZA, ZE, SA, SE
  18.       
  19.       SAVE F1, G1, G2, G3 
  20.       DATA INIT /0/  
  21.   
  22.       IF (INIT .eq. 0) THEN  
  23.          INIT =   1  
  24.          F1   =   1. / dx          
  25.          G1   =   75. / (64. * dx) 
  26.          G2   =   -25. / (384. * dx)    
  27.          G3   =   3. / (640. * dx)      
  28.       ENDIF  
  29.       DO r=1,ZA-1
  30.          DO c=SA,SE
  31.             OUT(c,r) = 0.0
  32.          ENDDO
  33.       ENDDO
  34.       DO r=1,nz
  35.          DO c=1,SA-1
  36.             OUT(c,r)=0.0
  37.          ENDDO
  38.          DO c=SE+1,nx
  39.             OUT(c,r)=0.0
  40.          ENDDO
  41.       ENDDO
  42.       DO r = ZA , ZE  
  43.          DO c = SA , SA+1
  44.             OUT(c,r)=F1*(IN(c+1,r)-IN(c,r))
  45.          ENDDO  
  46.          DO c = SA+2 , SE-3
  47. C                OUT(c,r) =  
  48. C     &              F1 * (IN(c+1,r) - IN(c  ,r))  ! second order
  49.                 OUT(c,r) = ( 
  50.      &              G1 * (IN(c+1,r) - IN(c  ,r)) +  
  51.      &              G2 * (IN(c+2,r) - IN(c-1,r)) +  
  52.      &              G3 * (IN(c+3,r) - IN(c-2,r)) )
  53.          ENDDO
  54.          DO c = SE-2 , SE
  55.             OUT(c,r) = F1*(IN(c+1,r)-IN(c,r)) 
  56.          ENDDO  
  57.       ENDDO 
  58.       DO r=ZE+1,nz
  59.          DO c=SA,SE
  60.             OUT(c,r) = 0.0
  61.          ENDDO
  62.       ENDDO
  63.       RETURN
  64.       END