|
SURFEX v7.3
General documentation of Surfex
|
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
1.8.0