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