SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/prep_watflux_extern.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE PREP_WATFLUX_EXTERN(HPROGRAM,HSURF,HFILE,HFILETYPE,HFILEPGD,HFILEPGDTYPE,KLUOUT,PFIELD)
00003 !     #################################################################################
00004 !
00005 USE MODD_TYPE_DATE_SURF
00006 !
00007 USE MODI_PREP_GRID_EXTERN
00008 USE MODI_READ_SURF
00009 USE MODI_OPEN_AUX_IO_SURF
00010 USE MODI_CLOSE_AUX_IO_SURF
00011 USE MODI_ABOR1_SFX
00012 USE MODI_GET_LUOUT
00013 !
00014 USE MODD_PREP,       ONLY : CINGRID_TYPE, CINTERP_TYPE
00015 !
00016 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00017 USE PARKIND1  ,ONLY : JPRB
00018 !
00019 IMPLICIT NONE
00020 !
00021 !*      0.1    declarations of arguments
00022 !
00023  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00024  CHARACTER(LEN=7),   INTENT(IN)  :: HSURF     ! type of field
00025  CHARACTER(LEN=28),  INTENT(IN)  :: HFILE     ! name of file
00026  CHARACTER(LEN=6),   INTENT(IN)  :: HFILETYPE ! type of input file
00027  CHARACTER(LEN=28),  INTENT(IN)  :: HFILEPGD     ! name of file
00028  CHARACTER(LEN=6),   INTENT(IN)  :: HFILEPGDTYPE ! type of input file
00029 INTEGER,            INTENT(IN)  :: KLUOUT    ! logical unit of output listing
00030 REAL,DIMENSION(:,:), POINTER    :: PFIELD    ! field to interpolate horizontally
00031 !
00032 !*      0.2    declarations of local variables
00033 !
00034 !
00035  CHARACTER(LEN=12) :: YRECFM         ! Name of the article to be read
00036 INTEGER           :: IRESP          ! reading return code
00037 INTEGER           :: ILUOUT
00038 INTEGER           :: IDIM_WATER
00039 !
00040 INTEGER           :: INI            ! total 1D dimension
00041 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00042 !
00043 !-------------------------------------------------------------------------------------
00044 !
00045 !*      1.     Preparation of IO for reading in the file
00046 !              -----------------------------------------
00047 !
00048 !* Note that all points are read, even those without physical meaning.
00049 !  These points will not be used during the horizontal interpolation step.
00050 !  Their value must be defined as XUNDEF.
00051 !
00052 IF (LHOOK) CALL DR_HOOK('PREP_WATFLUX_EXTERN',0,ZHOOK_HANDLE)
00053 !
00054 !-------------------------------------------------------------------------------------
00055 !
00056 !*      2.     Reading of grid
00057 !              ---------------
00058 !
00059  CALL OPEN_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE,'WATER ')
00060  CALL PREP_GRID_EXTERN(HFILEPGDTYPE,KLUOUT,CINGRID_TYPE,CINTERP_TYPE,INI)
00061 !
00062  CALL READ_SURF(HFILEPGDTYPE,'DIM_WATER',IDIM_WATER,IRESP)
00063 !
00064 IF (IDIM_WATER==0) THEN
00065   CALL GET_LUOUT(HPROGRAM,ILUOUT)
00066   WRITE(ILUOUT,*) ' '
00067   WRITE(ILUOUT,*) 'No inland water data available in input file ',HFILE
00068   WRITE(ILUOUT,*) 'Please change your input file '
00069   WRITE(ILUOUT,*) '             or '
00070   WRITE(ILUOUT,*) 'specify inland water temperature XTS_WATER_UNIF'
00071   CALL ABOR1_SFX('PREP_WATFLUX_EXTERN: No inland water data available in input file')
00072 END IF
00073 !---------------------------------------------------------------------------------------
00074 SELECT CASE(HSURF)
00075 !---------------------------------------------------------------------------------------
00076 !
00077 !*     3.      Orography
00078 !              ---------
00079 !
00080   CASE('ZS     ')
00081     ALLOCATE(PFIELD(INI,1))
00082     YRECFM='ZS'
00083     CALL READ_SURF(HFILEPGDTYPE,YRECFM,PFIELD(:,1),IRESP,HDIR='A')
00084     CALL CLOSE_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE)
00085 !
00086 !*      4.  Sea surface temperature
00087 !           -----------------------
00088 !
00089   CASE('TSWATER')
00090     ALLOCATE(PFIELD(INI,1))
00091     YRECFM='TS_WATER'
00092     CALL CLOSE_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE)
00093     CALL OPEN_AUX_IO_SURF(HFILE,HFILETYPE,'WATER ')
00094     CALL READ_SURF(HFILETYPE,YRECFM,PFIELD(:,1),IRESP,HDIR='A')
00095     CALL CLOSE_AUX_IO_SURF(HFILE,HFILETYPE)
00096 !
00097 !---------------------------------------------------------------------------------------
00098 END SELECT
00099 !-------------------------------------------------------------------------------------
00100 !
00101 !*      6.     End of IO
00102 !              ---------
00103 !
00104 IF (LHOOK) CALL DR_HOOK('PREP_WATFLUX_EXTERN',1,ZHOOK_HANDLE)
00105 !
00106 !---------------------------------------------------------------------------------------
00107 !
00108 END SUBROUTINE PREP_WATFLUX_EXTERN