SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/prep_hor_watflux_field.F90
Go to the documentation of this file.
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