SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/prep_hor_seaflux_field.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE PREP_HOR_SEAFLUX_FIELD(HPROGRAM,HSURF,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
00003 !     #################################################################################
00004 !
00005 !!****  *PREP_HOR_SEAFLUX_FIELD* - reads, interpolates and prepares a sea 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 !!      P. Le Moigne 09/2007, sst from clim
00026 !!------------------------------------------------------------------
00027 !
00028 
00029 !
00030 !
00031 USE MODD_PREP,           ONLY : CINGRID_TYPE, CINTERP_TYPE, XZS_LS, XLAT_OUT, XLON_OUT, &
00032                                 XX_OUT, XY_OUT, CMASK
00033 USE MODD_SEAFLUX_n,      ONLY : XSST
00034 USE MODD_OCEAN_n,        ONLY : LMERCATOR
00035 USE MODD_DATA_SEAFLUX_n, ONLY : LSST_DATA
00036 USE MODD_SEAFLUX_GRID_n, ONLY : XLAT, XLON
00037 !
00038 USE MODI_READ_PREP_SEAFLUX_CONF
00039 USE MODI_PREP_SEAFLUX_GRIB
00040 USE MODI_PREP_SEAFLUX_UNIF
00041 USE MODI_PREP_SEAFLUX_BUFFER
00042 USE MODI_PREP_SEAFLUX_NETCDF
00043 USE MODI_HOR_INTERPOL
00044 USE MODI_GET_LUOUT
00045 USE MODI_PREP_SEAFLUX_EXTERN
00046 USE MODI_PREP_SST_INIT
00047 !
00048 USE MODI_PREP_HOR_OCEAN_FIELDS
00049 !
00050 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00051 USE PARKIND1  ,ONLY : JPRB
00052 !
00053 USE MODI_ABOR1_SFX
00054 IMPLICIT NONE
00055 !
00056 !*      0.1    declarations of arguments
00057 !
00058  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00059  CHARACTER(LEN=7),   INTENT(IN)  :: HSURF     ! type of field
00060  CHARACTER(LEN=28),  INTENT(IN)  :: HATMFILE    ! name of the Atmospheric file
00061  CHARACTER(LEN=6),   INTENT(IN)  :: HATMFILETYPE! type of the Atmospheric file
00062  CHARACTER(LEN=28),  INTENT(IN)  :: HPGDFILE    ! name of the Atmospheric file
00063  CHARACTER(LEN=6),   INTENT(IN)  :: HPGDFILETYPE! type of the Atmospheric file
00064 !
00065 !*      0.2    declarations of local variables
00066 !
00067  CHARACTER(LEN=6)              :: YFILETYPE ! type of input file
00068  CHARACTER(LEN=28)             :: YFILE     ! name of file
00069  CHARACTER(LEN=6)              :: YFILEPGDTYPE ! type of input file
00070  CHARACTER(LEN=28)             :: YFILEPGD     ! name of file
00071 REAL, POINTER, DIMENSION(:,:) :: ZFIELDIN  ! field to interpolate horizontally
00072 REAL, ALLOCATABLE, DIMENSION(:,:) :: ZFIELDOUT ! field interpolated   horizontally
00073 INTEGER                       :: ILUOUT    ! output listing logical unit
00074 !
00075 LOGICAL                       :: GUNIF     ! flag for prescribed uniform field
00076 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00077 !-------------------------------------------------------------------------------------
00078 !
00079 !
00080 !*      1.     Reading of input file name and type
00081 !
00082 IF (LHOOK) CALL DR_HOOK('PREP_HOR_SEAFLUX_FIELD',0,ZHOOK_HANDLE)
00083  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00084 !
00085  CALL READ_PREP_SEAFLUX_CONF(HPROGRAM,HSURF,YFILE,YFILETYPE,YFILEPGD,YFILEPGDTYPE,&
00086                             HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,ILUOUT,GUNIF)
00087 !
00088 CMASK = 'SEA'
00089 !--------------------------------------------------------------------- ----------------
00090 !
00091 !*      2.     Reading of input  configuration (Grid and interpolation type)
00092 !
00093 IF (GUNIF) THEN
00094   CALL PREP_SEAFLUX_UNIF(ILUOUT,HSURF,ZFIELDIN)
00095 ELSE IF (YFILETYPE=='GRIB  ') THEN
00096   CALL PREP_SEAFLUX_GRIB(HPROGRAM,HSURF,YFILE,ILUOUT,ZFIELDIN)
00097 ELSE IF (YFILETYPE=='MESONH' .OR. YFILETYPE=='ASCII ' .OR. YFILETYPE=='LFI   ') THEN        
00098    CALL PREP_SEAFLUX_EXTERN(HPROGRAM,HSURF,YFILE,YFILETYPE,YFILEPGD,YFILEPGDTYPE,ILUOUT,ZFIELDIN)
00099 ELSE IF (YFILETYPE=='BUFFER') THEN
00100    CALL PREP_SEAFLUX_BUFFER(HPROGRAM,HSURF,ILUOUT,ZFIELDIN)
00101 ELSE IF (YFILETYPE=='NETCDF') THEN
00102   CALL PREP_SEAFLUX_NETCDF(HPROGRAM,HSURF,YFILE,ILUOUT,ZFIELDIN)
00103 ELSE
00104   CALL ABOR1_SFX('PREP_HOR_SEAFLUX_FIELD: data file type not supported : '//YFILETYPE)
00105 END IF
00106 !
00107 !
00108 !*      4.     Horizontal interpolation
00109 !
00110 ALLOCATE(ZFIELDOUT(SIZE(XLAT),SIZE(ZFIELDIN,2)))
00111 !
00112  CALL HOR_INTERPOL(ILUOUT,ZFIELDIN,ZFIELDOUT)
00113 !
00114 !*      5.     Return to historical variable
00115 !
00116 SELECT CASE (HSURF)
00117  CASE('ZS     ') 
00118   ALLOCATE(XZS_LS(SIZE(ZFIELDOUT,1)))
00119   XZS_LS(:) = ZFIELDOUT(:,1)
00120  CASE('SST    ')
00121   ALLOCATE(XSST(SIZE(ZFIELDOUT,1)))
00122   XSST(:) = ZFIELDOUT(:,1)
00123   IF (LSST_DATA) THEN
00124      CALL PREP_SST_INIT(XSST)
00125   END IF
00126   IF (LMERCATOR) THEN
00127     CALL PREP_HOR_OCEAN_FIELDS(HPROGRAM,HSURF,YFILE,YFILETYPE,ILUOUT,GUNIF)
00128   ENDIF
00129 END SELECT
00130 !
00131 !-------------------------------------------------------------------------------------
00132 !
00133 !*      6.     Deallocations
00134 !
00135 DEALLOCATE(ZFIELDIN )
00136 DEALLOCATE(ZFIELDOUT)
00137 IF (LHOOK) CALL DR_HOOK('PREP_HOR_SEAFLUX_FIELD',1,ZHOOK_HANDLE)
00138 !
00139 !-------------------------------------------------------------------------------------
00140 !
00141 END SUBROUTINE PREP_HOR_SEAFLUX_FIELD