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

并行计算

开发平台:

Matlab

  1. C**********************************************************************
  2. C       D X M 2 D 
  3. C
  4. C       Joachim Falk , Uni Hamburg , (0049)/(0) - 40 / 4123 5047
  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 DXM2D(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,
  18.      &        ZA, ZE, SA, SE
  19.       
  20.       SAVE F1, G1, G2, G3, INIT
  21.       DATA INIT /0/  
  22.            
  23.       IF (INIT .eq. 0) THEN  
  24.          INIT =   1  
  25.          F1   =   1. / dx          
  26.          G1   =   75. / (64. * dx) 
  27.          G2   =   -25. / (384. * dx)    
  28.          G3   =   3. / (640. * dx)      
  29.       ENDIF  
  30.        DO r=1,nz
  31.           DO c = 1 , SA-1
  32.              OUT(c,r) = 0.  
  33.           ENDDO  
  34.           DO c = SE+1 , nx
  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.       
  44.       DO r = ZA , ZE  
  45.          DO c = SA , SA+2
  46.             OUT(c,r) = F1 * (IN(c,r) - IN(c-1,r))  
  47.          ENDDO  
  48.          DO c = SA+3 , SE-2
  49. C            OUT(c,r) =        
  50. C     &          F1 * (IN(c  ,r) - IN(c-1,r)) ! second order
  51.             OUT(c,r) =        
  52.      &          G1 * (IN(c  ,r) - IN(c-1,r)) +  
  53.      &          G2 * (IN(c+1,r) - IN(c-2,r)) +  
  54.      &          G3 * (IN(c+2,r) - IN(c-3,r))
  55.          ENDDO
  56.          DO c = SE-1 , SE
  57.             OUT(c,r) = F1 * (IN(c,r) - IN(c-1,r))  
  58.          ENDDO  
  59.       ENDDO 
  60.       
  61.        DO r = ZE+1 , nz
  62.           DO c = SA , SE
  63.              OUT(c,r) = 0.0
  64.           ENDDO
  65.        ENDDO
  66.       RETURN
  67.       END