SURFEX v7.3
General documentation of Surfex
|
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