SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/zsfilter.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE ZSFILTER(PZS,PMASK,KZSFILTER)
00003 !     #############################################
00004 !
00005 !!**** *ZSFILTER* add a Laplacian to filter orographic signal
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !!
00010 !!    METHOD
00011 !!    ------
00012 !!   
00013 !!    An iterative method is used, adding each time the discretized Laplacian
00014 !!    to the point value.
00015 !!    Note that only points where land is present are modified, taking into
00016 !!    account only such points in the filtering.
00017 !!
00018 !!    EXTERNAL
00019 !!    --------
00020 !!                           
00021 !!    IMPLICIT ARGUMENTS
00022 !!    ------------------
00023 !!
00024 !!    REFERENCE
00025 !!    ---------
00026 !!
00027 !!    AUTHOR
00028 !!    ------
00029 !!
00030 !!    V. Masson          Meteo-France
00031 !!
00032 !!    MODIFICATION
00033 !!    ------------
00034 !!
00035 !!    Original    15/03/96
00036 !!
00037 !----------------------------------------------------------------------------
00038 !
00039 !*    0.     DECLARATION
00040 !            -----------
00041 !
00042 !
00043 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00044 USE PARKIND1  ,ONLY : JPRB
00045 !
00046 IMPLICIT NONE
00047 !
00048 !*    0.1    Declaration of arguments
00049 !            ------------------------
00050 !
00051 REAL,             DIMENSION(:,:), INTENT(INOUT) :: PZS      ! orography
00052 REAL,             DIMENSION(:,:), INTENT(IN)    :: PMASK    ! where filter is applied
00053 INTEGER,                          INTENT(IN)    :: KZSFILTER! iteration number
00054 !
00055 !*    0.2    Declaration of local variables
00056 !            ------------------------------
00057 !
00058 REAL,DIMENSION(0:SIZE(PZS,1)+1,0:SIZE(PZS,2)+1) :: ZZS   ! modified 
00059                                                          ! orography
00060 REAL,DIMENSION(0:SIZE(PZS,1)+1,0:SIZE(PZS,2)+1) :: ZMASK ! modified 
00061                                                          ! orography
00062 INTEGER :: JI,JJ,JITER,IIU,IJU
00063 REAL    :: ZK                 ! filter efficiency coefficient (0.=< ZK =<1.)
00064 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00065 !----------------------------------------------------------------------------
00066 !
00067 !*       1.     Initialisations
00068 !               ---------------
00069 !
00070 IF (LHOOK) CALL DR_HOOK('ZSFILTER',0,ZHOOK_HANDLE)
00071 IIU=SIZE(PZS,1)
00072 IJU=SIZE(PZS,2)
00073 ZK=1.
00074 ZZS(:,:)=0.
00075 ZZS(1:IIU,1:IJU)=PZS(:,:)
00076 ZZS(0,:)    =2.*ZZS(1,:)  -ZZS(2,:)
00077 ZZS(IIU+1,:)=2.*ZZS(IIU,:)-ZZS(IIU-1,:)
00078 ZZS(:,0)    =2.*ZZS(:,1)  -ZZS(:,2)
00079 ZZS(:,IJU+1)=2.*ZZS(:,IJU)-ZZS(:,IJU-1)
00080 ZMASK(:,:)=0.
00081 ZMASK(1:IIU,1:IJU)=PMASK(:,:)
00082 !
00083 !*       2.     Iterative loop
00084 !               --------------
00085 !
00086 DO JITER=1,KZSFILTER
00087   DO JI=1,IIU
00088     DO JJ=1,IJU
00089       PZS(JI,JJ)= ZZS(JI,JJ)                          &
00090            + ZK*0.125* ZMASK(JI,JJ)                     &
00091             * (     ZMASK(JI-1,JJ)   * ZZS(JI-1,JJ)     &
00092                 +   ZMASK(JI+1,JJ)   * ZZS(JI+1,JJ)     &
00093                 +   ZMASK(JI,JJ-1)   * ZZS(JI,JJ-1)     &
00094                 +   ZMASK(JI,JJ+1)   * ZZS(JI,JJ+1)     &
00095                 - ( ZMASK(JI-1,JJ)                      &
00096                    +ZMASK(JI+1,JJ)                      &
00097                    +ZMASK(JI,JJ-1)                      &
00098                    +ZMASK(JI,JJ+1) ) * ZZS(JI,JJ)       )  
00099     ENDDO
00100   ENDDO
00101   ZZS(1:IIU,1:IJU)=PZS(:,:)
00102 ENDDO
00103 IF (LHOOK) CALL DR_HOOK('ZSFILTER',1,ZHOOK_HANDLE)
00104 !
00105 !-------------------------------------------------------------------------------
00106 !
00107 END SUBROUTINE ZSFILTER