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