|
SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE HOR_INTERPOL(KLUOUT,PFIELDIN,PFIELDOUT) 00003 ! ################################################################################# 00004 ! 00005 !!**** *HOR_INTERPOL * - Call the interpolation of a surface field 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 ! 00010 !!** METHOD 00011 !! ------ 00012 !! 00013 !! REFERENCE 00014 !! --------- 00015 !! 00016 !! 00017 !! AUTHOR 00018 !! ------ 00019 !! V. Masson 00020 !! 00021 !! MODIFICATIONS 00022 !! ------------- 00023 !! Original 01/2004 00024 !! P. Le Moigne 10/2005, Phasage Arome 00025 !!------------------------------------------------------------------ 00026 ! 00027 ! 00028 USE MODD_PREP, ONLY : CINGRID_TYPE, CINTERP_TYPE 00029 ! 00030 USE MODI_HOR_INTERPOL_GAUSS 00031 USE MODI_HOR_INTERPOL_ROTLATLON 00032 USE MODI_HOR_INTERPOL_AROME 00033 USE MODI_HOR_INTERPOL_CONF_PROJ 00034 USE MODI_HOR_INTERPOL_CARTESIAN 00035 USE MODI_HOR_INTERPOL_LATLON 00036 ! 00037 ! 00038 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00039 USE PARKIND1 ,ONLY : JPRB 00040 ! 00041 USE MODI_ABOR1_SFX 00042 ! 00043 USE MODI_HOR_INTERPOL_BUFFER 00044 IMPLICIT NONE 00045 ! 00046 !* 0.1 declarations of arguments 00047 ! 00048 INTEGER, INTENT(IN) :: KLUOUT ! logical unit of output listing 00049 REAL, DIMENSION(:,:), INTENT(IN) :: PFIELDIN ! field to interpolate horizontally 00050 REAL, DIMENSION(:,:), INTENT(OUT) :: PFIELDOUT ! interpolated field 00051 ! 00052 !* 0.2 declarations of local variables 00053 ! 00054 INTEGER :: JL ! loop counter 00055 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00056 ! 00057 !------------------------------------------------------------------------------------- 00058 ! 00059 IF (LHOOK) CALL DR_HOOK('HOR_INTERPOL',0,ZHOOK_HANDLE) 00060 SELECT CASE (CINTERP_TYPE) 00061 ! 00062 !* 1. Interpolation with horibl (from gaussian, Legendre or regular grid) 00063 ! ------------------------------------------------------------------- 00064 ! 00065 CASE('HORIBL') 00066 SELECT CASE(CINGRID_TYPE) 00067 ! 00068 !* 1.1 Interpolation from gaussian or Legendre 00069 ! 00070 CASE ('GAUSS ') 00071 CALL HOR_INTERPOL_GAUSS(KLUOUT,PFIELDIN,PFIELDOUT) 00072 ! 00073 !* 1.2 Interpolation from regular grid 00074 ! 00075 CASE ('AROME ') 00076 CALL HOR_INTERPOL_AROME(KLUOUT,PFIELDIN,PFIELDOUT) 00077 ! 00078 !* 1.3 Interpolation from regular lat/lon coord 00079 ! 00080 CASE ('LATLON ') 00081 CALL HOR_INTERPOL_LATLON(KLUOUT,PFIELDIN,PFIELDOUT) 00082 ! 00083 !* 1.4 Interpolation from rotated lat/lon coord 00084 ! 00085 CASE ('ROTLATLON ') 00086 CALL HOR_INTERPOL_ROTLATLON(KLUOUT,PFIELDIN,PFIELDOUT) 00087 00088 CASE DEFAULT 00089 CALL ABOR1_SFX('HOR_INTERPOL: WRONG GRID TYPE'//CINGRID_TYPE) 00090 00091 END SELECT 00092 ! 00093 !* 2. Prescribed uniform field 00094 ! ------------------------ 00095 ! 00096 CASE('UNIF ') 00097 DO JL=1,SIZE(PFIELDIN,2) 00098 PFIELDOUT(:,JL) = PFIELDIN(1,JL) 00099 END DO 00100 ! 00101 !* 3. Bilinear interpolation 00102 ! ---------------------- 00103 ! 00104 CASE('BILIN ') 00105 SELECT CASE(CINGRID_TYPE) 00106 CASE ('CONF PROJ ') 00107 CALL HOR_INTERPOL_CONF_PROJ(KLUOUT,PFIELDIN,PFIELDOUT) 00108 CASE ('CARTESIAN ') 00109 CALL HOR_INTERPOL_CARTESIAN(KLUOUT,PFIELDIN,PFIELDOUT) 00110 END SELECT 00111 ! 00112 !* 4. no interpolation, only packing 00113 ! ------------------------------ 00114 ! 00115 CASE('BUFFER') 00116 CALL HOR_INTERPOL_BUFFER(KLUOUT,PFIELDIN,PFIELDOUT) 00117 00118 ! 00119 !* 4. no interpolation 00120 ! ---------------- 00121 ! 00122 CASE('NONE ') 00123 DO JL=1,SIZE(PFIELDIN,2) 00124 PFIELDOUT(:,JL) = PFIELDIN(:,JL) 00125 END DO 00126 00127 CASE DEFAULT 00128 CALL ABOR1_SFX('HOR_INTERPOL: WRONG INTERPOLATION TYPE'//CINTERP_TYPE) 00129 00130 END SELECT 00131 IF (LHOOK) CALL DR_HOOK('HOR_INTERPOL',1,ZHOOK_HANDLE) 00132 ! 00133 !------------------------------------------------------------------------------------- 00134 END SUBROUTINE HOR_INTERPOL
1.8.0