SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE PREP_HOR_WATFLUX_FIELD(HPROGRAM,HSURF,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE) 00003 ! ################################################################################# 00004 ! 00005 !!**** *PREP_HOR_WATFLUX_FIELD* - Reads, interpolates and prepares a water field 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 ! 00010 !!** METHOD 00011 !! ------ 00012 !! 00013 !! REFERENCE 00014 !! --------- 00015 !! 00016 !! 00017 !! AUTHOR 00018 !! ------ 00019 !! S. Malardel 00020 !! 00021 !! MODIFICATIONS 00022 !! ------------- 00023 !! Original 01/2004 00024 !! P. Le Moigne 10/2005, Phasage Arome 00025 !!------------------------------------------------------------------ 00026 ! 00027 ! 00028 ! 00029 USE MODD_PREP, ONLY : CINGRID_TYPE, CINTERP_TYPE, XZS_LS, XLAT_OUT, XLON_OUT, & 00030 XX_OUT, XY_OUT, CMASK 00031 USE MODD_WATFLUX_n, ONLY : XTS 00032 USE MODD_WATFLUX_GRID_n, ONLY : XLAT, XLON 00033 ! 00034 USE MODI_READ_PREP_WATFLUX_CONF 00035 USE MODI_PREP_WATFLUX_GRIB 00036 USE MODI_PREP_WATFLUX_UNIF 00037 USE MODI_PREP_WATFLUX_BUFFER 00038 USE MODI_HOR_INTERPOL 00039 USE MODI_GET_LUOUT 00040 USE MODI_PREP_WATFLUX_EXTERN 00041 ! 00042 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00043 USE PARKIND1 ,ONLY : JPRB 00044 ! 00045 USE MODI_ABOR1_SFX 00046 IMPLICIT NONE 00047 ! 00048 !* 0.1 declarations of arguments 00049 ! 00050 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes 00051 CHARACTER(LEN=7), INTENT(IN) :: HSURF ! type of field 00052 CHARACTER(LEN=28), INTENT(IN) :: HATMFILE ! name of the Atmospheric file 00053 CHARACTER(LEN=6), INTENT(IN) :: HATMFILETYPE! type of the Atmospheric file 00054 CHARACTER(LEN=28), INTENT(IN) :: HPGDFILE ! name of the Atmospheric file 00055 CHARACTER(LEN=6), INTENT(IN) :: HPGDFILETYPE! type of the Atmospheric file 00056 ! 00057 !* 0.2 declarations of local variables 00058 ! 00059 CHARACTER(LEN=6) :: YFILETYPE ! type of input file 00060 CHARACTER(LEN=28) :: YFILE ! name of file 00061 CHARACTER(LEN=6) :: YFILEPGDTYPE ! type of input file 00062 CHARACTER(LEN=28) :: YFILEPGD ! name of file 00063 REAL, POINTER, DIMENSION(:,:) :: ZFIELDIN ! field to interpolate horizontally 00064 REAL, ALLOCATABLE, DIMENSION(:,:) :: ZFIELDOUT ! field interpolated horizontally 00065 INTEGER :: ILUOUT ! output listing logical unit 00066 ! 00067 LOGICAL :: GUNIF ! flag for prescribed uniform field 00068 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00069 !------------------------------------------------------------------------------------- 00070 ! 00071 ! 00072 !* 1. Reading of input file name and type 00073 ! 00074 IF (LHOOK) CALL DR_HOOK('PREP_HOR_WATFLUX_FIELD',0,ZHOOK_HANDLE) 00075 CALL GET_LUOUT(HPROGRAM,ILUOUT) 00076 ! 00077 CALL READ_PREP_WATFLUX_CONF(HPROGRAM,HSURF,YFILE,YFILETYPE,YFILEPGD,YFILEPGDTYPE,& 00078 HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,ILUOUT,GUNIF) 00079 ! 00080 CMASK = 'WATER' 00081 ! 00082 !------------------------------------------------------------------------------------- 00083 ! 00084 !* 2. Reading of input configuration (Grid and interpolation type) 00085 ! 00086 IF (GUNIF) THEN 00087 CALL PREP_WATFLUX_UNIF(ILUOUT,HSURF,ZFIELDIN) 00088 ELSE IF (YFILETYPE=='GRIB ') THEN 00089 CALL PREP_WATFLUX_GRIB(HPROGRAM,HSURF,YFILE,ILUOUT,ZFIELDIN) 00090 ELSE IF (YFILETYPE=='MESONH' .OR. YFILETYPE=='ASCII ' .OR. YFILETYPE=='LFI ') THEN 00091 CALL PREP_WATFLUX_EXTERN(HPROGRAM,HSURF,YFILE,YFILETYPE,YFILEPGD,YFILEPGDTYPE,ILUOUT,ZFIELDIN) 00092 ELSE IF (YFILETYPE=='BUFFER') THEN 00093 CALL PREP_WATFLUX_BUFFER(HPROGRAM,HSURF,ILUOUT,ZFIELDIN) 00094 ELSE 00095 CALL ABOR1_SFX('PREP_HOR_WATFLUX_FIELD: data file type not supported : '//YFILETYPE) 00096 END IF 00097 ! 00098 ! 00099 !* 4. Horizontal interpolation 00100 ! 00101 ALLOCATE(ZFIELDOUT(SIZE(XLAT),SIZE(ZFIELDIN,2))) 00102 ! 00103 CALL HOR_INTERPOL(ILUOUT,ZFIELDIN,ZFIELDOUT) 00104 ! 00105 !* 5. Return to historical variable 00106 ! 00107 SELECT CASE (HSURF) 00108 CASE('ZS ') 00109 ALLOCATE(XZS_LS(SIZE(ZFIELDOUT,1))) 00110 XZS_LS(:) = ZFIELDOUT(:,1) 00111 CASE('TSWATER') 00112 ALLOCATE(XTS(SIZE(ZFIELDOUT,1))) 00113 XTS(:) = ZFIELDOUT(:,1) 00114 END SELECT 00115 ! 00116 !------------------------------------------------------------------------------------- 00117 ! 00118 !* 6. Deallocations 00119 ! 00120 DEALLOCATE(ZFIELDIN ) 00121 DEALLOCATE(ZFIELDOUT) 00122 IF (LHOOK) CALL DR_HOOK('PREP_HOR_WATFLUX_FIELD',1,ZHOOK_HANDLE) 00123 ! 00124 !------------------------------------------------------------------------------------- 00125 ! 00126 END SUBROUTINE PREP_HOR_WATFLUX_FIELD