SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/interp_grid.F90
Go to the documentation of this file.
00001 !######################
00002 MODULE MODI_INTERP_GRID
00003 !######################
00004 
00005 INTERFACE INTERP_GRID
00006 
00007 SUBROUTINE INTERP_GRID_1D(PZ1,PT1,PZ2,PT2)
00008 !
00009 REAL, DIMENSION(:,:), INTENT(IN)  :: PZ1  ! input vertical grid
00010 REAL, DIMENSION(:,:), INTENT(IN)  :: PT1  ! input temperatures
00011 REAL, DIMENSION(:),   INTENT(IN)  :: PZ2  ! output vertical grid
00012 REAL, DIMENSION(:,:), INTENT(OUT)  :: PT2  ! output temperatures
00013 !
00014 END SUBROUTINE INTERP_GRID_1D
00015 !
00016 SUBROUTINE INTERP_GRID_2D(PZ1,PT1,PZ2,PT2)
00017 !
00018 REAL, DIMENSION(:,:), INTENT(IN) :: PZ1  ! input vertical grid
00019 REAL, DIMENSION(:,:), INTENT(IN) :: PT1  ! input temperatures
00020 REAL, DIMENSION(:,:), INTENT(IN) :: PZ2  ! output vertical grid
00021 REAL, DIMENSION(:,:), INTENT(OUT) :: PT2  ! output temperatures
00022 !
00023 END SUBROUTINE INTERP_GRID_2D
00024 !
00025 END INTERFACE
00026 
00027 END MODULE MODI_INTERP_GRID
00028 
00029 !     ##########################################
00030       SUBROUTINE INTERP_GRID_1D(PZ1,PT1,PZ2,PT2)
00031 !     ##########################################
00032 !!
00033 !!****  *INTERP_GRID* - interpolation on the vertical
00034 !!
00035 !!    PURPOSE
00036 !!    -------
00037 !!
00038 !! input  grid/data is (x,z1)
00039 !! output grid/data is (x,z2)
00040 !!
00041 !!**  METHOD
00042 !!    ------
00043 !!
00044 !!    REFERENCE
00045 !!    ---------
00046 !!      
00047 !!
00048 !!    AUTHOR
00049 !!    ------
00050 !!     V. Masson 
00051 !!
00052 !!    MODIFICATIONS
00053 !!    -------------
00054 !!      Original    01/2004
00055 !!------------------------------------------------------------------
00056 !
00057 USE MODD_SURF_PAR,   ONLY : XUNDEF
00058 USE MODI_COEF_VER_INTERP_LIN_SURF
00059 USE MODI_VER_INTERP_LIN_SURF
00060 !
00061 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00062 USE PARKIND1  ,ONLY : JPRB
00063 !
00064 IMPLICIT NONE
00065 !
00066 !* 0.1 Declaration of dummy arguments
00067 !
00068 REAL, DIMENSION(:,:), INTENT(IN)   :: PZ1  ! input vertical grid
00069 REAL, DIMENSION(:,:), INTENT(IN)   :: PT1  ! input temperatures
00070 REAL, DIMENSION(:),   INTENT(IN)   :: PZ2  ! output vertical grid
00071 REAL, DIMENSION(:,:), INTENT(OUT)  :: PT2  ! output temperatures
00072 !
00073 !* 0.2 Declaration of local variables
00074 !
00075 INTEGER :: JL, JI ! loop counter
00076 REAL,    DIMENSION(SIZE(PZ1,1),SIZE(PZ2)) :: ZZ2      ! output grid
00077 REAL,    DIMENSION(SIZE(PZ1,1),SIZE(PZ2)) :: ZCOEFLIN ! interpolation coefficients
00078 INTEGER, DIMENSION(SIZE(PZ1,1),SIZE(PZ2)) :: IKLIN    ! lower interpolating level of
00079 !                                                     ! grid 1 for each level of grid 2 
00080 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00081 !-----------------------------------------------------------------------------
00082 IF (LHOOK) CALL DR_HOOK('MODI_INTERP_GRID:INTERP_GRID_1D',0,ZHOOK_HANDLE)
00083 DO JL=1,SIZE(PZ2)
00084   ZZ2(:,JL) = PZ2(JL)
00085 END DO
00086 !
00087  CALL COEF_VER_INTERP_LIN_SURF(PZ1,ZZ2,KKLIN=IKLIN,PCOEFLIN=ZCOEFLIN)
00088 !
00089 !
00090 PT2= VER_INTERP_LIN_SURF(PT1,IKLIN,ZCOEFLIN)
00091 !
00092 !  On reporte le mask sur tous les niveaux
00093 !
00094 DO JL=1,SIZE(PT1,2)
00095   DO JI=1,SIZE(PT1,1)
00096     IF (PT1(JI,JL)==XUNDEF) THEN
00097       PT2(JI,:)=XUNDEF
00098     ENDIF
00099   END DO
00100 END DO
00101 IF (LHOOK) CALL DR_HOOK('MODI_INTERP_GRID:INTERP_GRID_1D',1,ZHOOK_HANDLE)
00102 !-----------------------------------------------------------------------------
00103 END SUBROUTINE INTERP_GRID_1D
00104 !
00105 !     ##########################################
00106       SUBROUTINE INTERP_GRID_2D(PZ1,PT1,PZ2,PT2)
00107 !     ##########################################
00108 !
00109 USE MODD_SURF_PAR,   ONLY : XUNDEF
00110 USE MODI_COEF_VER_INTERP_LIN_SURF
00111 USE MODI_VER_INTERP_LIN_SURF
00112 !
00113 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00114 USE PARKIND1  ,ONLY : JPRB
00115 !
00116 IMPLICIT NONE
00117 !
00118 !* 0.1 Declaration of dummy arguments
00119 !
00120 REAL, DIMENSION(:,:), INTENT(IN)  :: PZ1  ! input vertical grid
00121 REAL, DIMENSION(:,:), INTENT(IN)  :: PT1  ! input temperatures
00122 REAL, DIMENSION(:,:), INTENT(IN)  :: PZ2  ! output vertical grid
00123 REAL, DIMENSION(:,:), INTENT(OUT) :: PT2  ! output temperatures
00124 !
00125 !* 0.2 Declaration of local variables
00126 !
00127 INTEGER :: JL, JI ! loop counter
00128 REAL,    DIMENSION(SIZE(PZ1,1),SIZE(PZ2,2)) :: ZCOEFLIN ! interpolation coefficients
00129 INTEGER, DIMENSION(SIZE(PZ1,1),SIZE(PZ2,2)) :: IKLIN    ! lower interpolating level of
00130                                                         ! grid 1 for each level of grid 2
00131 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00132 !-----------------------------------------------------------------------------
00133 IF (LHOOK) CALL DR_HOOK('MODI_INTERP_GRID:INTERP_GRID_2D',0,ZHOOK_HANDLE)
00134  CALL COEF_VER_INTERP_LIN_SURF(PZ1,PZ2,IKLIN,ZCOEFLIN)
00135 !
00136 PT2= VER_INTERP_LIN_SURF(PT1,IKLIN,ZCOEFLIN)
00137 !
00138 !  On reporte le mask sur tous les niveaux
00139 !
00140 DO JL=1,SIZE(PT1,2)
00141   DO JI=1,SIZE(PT1,1)
00142     IF (PT1(JI,JL)==XUNDEF) THEN
00143       PT2(JI,:)=XUNDEF
00144     ENDIF
00145   END DO
00146 END DO
00147 IF (LHOOK) CALL DR_HOOK('MODI_INTERP_GRID:INTERP_GRID_2D',1,ZHOOK_HANDLE)
00148 !-----------------------------------------------------------------------------
00149 END SUBROUTINE INTERP_GRID_2D