SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/prep_flake_extern.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE PREP_FLAKE_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 USE MODD_SURF_PAR,   ONLY : XUNDEF
00016 !
00017 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00018 USE PARKIND1  ,ONLY : JPRB
00019 !
00020 IMPLICIT NONE
00021 !
00022 !*      0.1    declarations of arguments
00023 !
00024  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00025  CHARACTER(LEN=7),   INTENT(IN)  :: HSURF     ! type of field
00026  CHARACTER(LEN=28),  INTENT(IN)  :: HFILE     ! name of file
00027  CHARACTER(LEN=6),   INTENT(IN)  :: HFILETYPE ! type of input file
00028  CHARACTER(LEN=28),  INTENT(IN)  :: HFILEPGD     ! name of file
00029  CHARACTER(LEN=6),   INTENT(IN)  :: HFILEPGDTYPE ! type of input file
00030 INTEGER,            INTENT(IN)  :: KLUOUT    ! logical unit of output listing
00031 REAL,DIMENSION(:,:), POINTER    :: PFIELD    ! field to interpolate horizontally
00032 !
00033 !*      0.2    declarations of local variables
00034 !
00035 !
00036  CHARACTER(LEN=12) :: YRECFM         ! Name of the article to be read
00037 INTEGER           :: IRESP          ! reading return code
00038 INTEGER           :: ILUOUT
00039 !
00040 INTEGER           :: INI            ! total 1D dimension
00041  CHARACTER(LEN=6)  :: YWATER         ! lake scheme
00042 INTEGER           :: IDIM_WATER     ! number of water points
00043 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00044 !
00045 !-------------------------------------------------------------------------------------
00046 !
00047 !*      1.     Preparation of IO for reading in the file
00048 !              -----------------------------------------
00049 !
00050 !* Note that all points are read, even those without physical meaning.
00051 !  These points will not be used during the horizontal interpolation step.
00052 !  Their value must be defined as XUNDEF.
00053 !
00054 IF (LHOOK) CALL DR_HOOK('PREP_FLAKE_EXTERN',0,ZHOOK_HANDLE)
00055 !
00056  CALL OPEN_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE,'WATER ')
00057 !
00058  CALL READ_SURF(HFILEPGDTYPE,'WATER',YWATER,IRESP)
00059 !
00060 !-------------------------------------------------------------------------------------
00061 !
00062 !*      2.     Reading of grid
00063 !              ---------------
00064 !
00065  CALL PREP_GRID_EXTERN(HFILEPGDTYPE,KLUOUT,CINGRID_TYPE,CINTERP_TYPE,INI)
00066 !
00067  CALL READ_SURF(HFILEPGDTYPE,'DIM_WATER',IDIM_WATER,IRESP)
00068 !
00069 IF (IDIM_WATER==0) THEN
00070   CALL GET_LUOUT(HPROGRAM,ILUOUT)
00071   WRITE(ILUOUT,*) ' '
00072   WRITE(ILUOUT,*) 'No inland water data available in input file ',HFILE
00073   WRITE(ILUOUT,*) 'Please change your input file '
00074   WRITE(ILUOUT,*) '             or '
00075   WRITE(ILUOUT,*) 'specify inland water temperature XTS_WATER_UNIF'
00076   CALL ABOR1_SFX('PREP_FLAKE_EXTERN: No inland water data available in input file')
00077 END IF
00078 !
00079 !---------------------------------------------------------------------------------------
00080 SELECT CASE(HSURF)
00081 !---------------------------------------------------------------------------------------
00082 !
00083 !*     3.      Orography
00084 !              ---------
00085 !
00086   CASE('ZS     ')
00087     ALLOCATE(PFIELD(INI,1))
00088     YRECFM='ZS'
00089     CALL READ_SURF(HFILEPGDTYPE,YRECFM,PFIELD(:,1),IRESP,HDIR='A')
00090     CALL CLOSE_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE)
00091 !
00092 !*      4.  Sea surface temperature
00093 !           -----------------------
00094 !
00095   CASE('TS     ')
00096     ALLOCATE(PFIELD(INI,1))
00097     YRECFM='TS_WATER'
00098     CALL CLOSE_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE)
00099     CALL OPEN_AUX_IO_SURF(HFILE,HFILETYPE,'WATER ')
00100     CALL READ_SURF(HFILETYPE,YRECFM,PFIELD(:,1),IRESP,HDIR='A')
00101     CALL CLOSE_AUX_IO_SURF(HFILE,HFILETYPE)
00102 !
00103 END SELECT
00104 !
00105 !*      5.  FLake variables
00106 !           -----------------------
00107 !
00108 IF (HSURF/='ZS    ' .AND. HSURF/='TS    ') THEN
00109 
00110   CALL CLOSE_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE)
00111 
00112   IF (YWATER=='FLAKE ') THEN
00113 
00114     CALL OPEN_AUX_IO_SURF(HFILE,HFILETYPE,'WATER ')
00115 
00116     SELECT CASE(HSURF)
00117 
00118     CASE('T_SNOW ')
00119       ALLOCATE(PFIELD(INI,1))
00120       YRECFM='T_SNOW  '  
00121       CALL READ_SURF(HFILETYPE,YRECFM,PFIELD(:,1),IRESP,HDIR='A')
00122 !
00123     CASE('T_ICE  ')
00124       ALLOCATE(PFIELD(INI,1))
00125       YRECFM='T_ICE   '  
00126       CALL READ_SURF(HFILETYPE,YRECFM,PFIELD(:,1),IRESP,HDIR='A')
00127 !
00128     CASE('T_MNW  ')
00129       ALLOCATE(PFIELD(INI,1))
00130       YRECFM='T_MNW   '  
00131       CALL READ_SURF(HFILETYPE,YRECFM,PFIELD(:,1),IRESP,HDIR='A')
00132 !
00133     CASE('T_BOT  ')
00134       ALLOCATE(PFIELD(INI,1))
00135       YRECFM='T_BOT   '  
00136       CALL READ_SURF(HFILETYPE,YRECFM,PFIELD(:,1),IRESP,HDIR='A')
00137 !
00138     CASE('T_B1   ')
00139       ALLOCATE(PFIELD(INI,1))
00140       YRECFM='T_B1    '  
00141       CALL READ_SURF(HFILETYPE,YRECFM,PFIELD(:,1),IRESP,HDIR='A')
00142 !
00143     CASE('H_SNOW ')
00144       ALLOCATE(PFIELD(INI,1))
00145       YRECFM='H_SNOW  '  
00146       CALL READ_SURF(HFILETYPE,YRECFM,PFIELD(:,1),IRESP,HDIR='A')
00147 !
00148     CASE('H_ICE  ')
00149       ALLOCATE(PFIELD(INI,1))
00150       YRECFM='H_ICE   '  
00151       CALL READ_SURF(HFILETYPE,YRECFM,PFIELD(:,1),IRESP,HDIR='A')
00152 !
00153     CASE('H_ML   ')
00154       ALLOCATE(PFIELD(INI,1))
00155       YRECFM='H_ML    '  
00156       CALL READ_SURF(HFILETYPE,YRECFM,PFIELD(:,1),IRESP,HDIR='A')
00157 !
00158     CASE('H_B1   ')
00159       ALLOCATE(PFIELD(INI,1))
00160       YRECFM='H_B1    '  
00161       CALL READ_SURF(HFILETYPE,YRECFM,PFIELD(:,1),IRESP,HDIR='A')
00162 !
00163 !---------------------------------------------------------------------------------------
00164     END SELECT
00165 
00166     CALL CLOSE_AUX_IO_SURF(HFILE,HFILETYPE)
00167 
00168   ELSE
00169 !* no Flake field in the input file
00170     ALLOCATE(PFIELD(INI,1))
00171     PFIELD = XUNDEF
00172   END IF
00173 END IF
00174 !-------------------------------------------------------------------------------------
00175 !
00176 !*      6.     End of IO
00177 !              ---------
00178 !
00179 IF (LHOOK) CALL DR_HOOK('PREP_FLAKE_EXTERN',1,ZHOOK_HANDLE)
00180 !
00181 !---------------------------------------------------------------------------------------
00182 !
00183 END SUBROUTINE PREP_FLAKE_EXTERN