SURFEX v7.3
General documentation of Surfex
|
00001 ! ######spl 00002 SUBROUTINE ZOOM_PGD_SEAFLUX(HPROGRAM,HINIFILE,HINIFILETYPE,HFILE,HFILETYPE) 00003 ! ############################################################## 00004 ! 00005 !!**** *PGD_SEAFLUX* monitor for averaging and interpolations of SEAFLUX physiographic fields 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 !! 00010 !! METHOD 00011 !! ------ 00012 !! 00013 ! 00014 !! EXTERNAL 00015 !! -------- 00016 !! 00017 !! IMPLICIT ARGUMENTS 00018 !! ------------------ 00019 !! 00020 !! REFERENCE 00021 !! --------- 00022 !! 00023 !! AUTHOR 00024 !! ------ 00025 !! 00026 !! P. Le Moigne Meteo-France 00027 !! 00028 !! MODIFICATION 00029 !! ------------ 00030 !! 00031 !! Original 09/2008 00032 !! G. TANGUY 03/2009 : add reading and interpolation of XDATA_SST and 00033 !! TDATA_SST in the case LDATA_SST=T 00034 !! 00035 !---------------------------------------------------------------------------- 00036 ! 00037 !* 0. DECLARATION 00038 ! ----------- 00039 ! 00040 USE MODD_DATA_COVER_PAR, ONLY : JPCOVER 00041 USE MODD_PREP, ONLY : CINGRID_TYPE, CINTERP_TYPE, LINTERP 00042 ! 00043 USE MODD_SEAFLUX_n, ONLY : XCOVER, LCOVER, XZS, XSEABATHY 00044 USE MODD_SEAFLUX_GRID_n, ONLY : CGRID, XGRID_PAR, XLAT, XLON, XMESH_SIZE, NDIM 00045 USE MODD_DATA_SEAFLUX_n, ONLY : LSST_DATA, NTIME, XDATA_SST, TDATA_SST 00046 ! 00047 USE MODI_GET_LUOUT 00048 USE MODI_OPEN_AUX_IO_SURF 00049 USE MODI_GET_SURF_SIZE_n 00050 USE MODI_PACK_PGD 00051 USE MODI_PREP_GRID_EXTERN 00052 USE MODI_PREP_OUTPUT_GRID 00053 USE MODI_READ_SURF 00054 USE MODI_HOR_INTERPOL 00055 USE MODI_READ_PGD_SEAFLUX_PAR_n 00056 USE MODI_CLOSE_AUX_IO_SURF 00057 USE MODI_CLEAN_PREP_OUTPUT_GRID 00058 ! 00059 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00060 USE PARKIND1 ,ONLY : JPRB 00061 ! 00062 IMPLICIT NONE 00063 ! 00064 !* 0.1 Declaration of arguments 00065 ! ------------------------ 00066 ! 00067 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! Type of program 00068 CHARACTER(LEN=28), INTENT(IN) :: HINIFILE ! input atmospheric file name 00069 CHARACTER(LEN=6), INTENT(IN) :: HINIFILETYPE! input atmospheric file type 00070 CHARACTER(LEN=28), INTENT(IN) :: HFILE ! output file name 00071 CHARACTER(LEN=6), INTENT(IN) :: HFILETYPE ! output file type 00072 ! 00073 ! 00074 !* 0.2 Declaration of local variables 00075 ! ------------------------------ 00076 ! 00077 !* 0.3 Declaration of namelists 00078 ! ------------------------ 00079 ! 00080 REAL, DIMENSION(:,:), ALLOCATABLE :: ZSEABATHY, ZWORK 00081 INTEGER :: ILUOUT 00082 INTEGER :: INI 00083 INTEGER :: IRESP 00084 INTEGER :: JTIME ! loop index 00085 INTEGER :: IVERSION, IBUGFIX 00086 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00087 ! 00088 !------------------------------------------------------------------------------- 00089 ! 00090 IF (LHOOK) CALL DR_HOOK('ZOOM_PGD_SEAFLUX',0,ZHOOK_HANDLE) 00091 CALL GET_LUOUT(HPROGRAM,ILUOUT) 00092 ! 00093 !* 1. Preparation of IO for reading in the file 00094 ! ----------------------------------------- 00095 ! 00096 !* Note that all points are read, even those without physical meaning. 00097 ! These points will not be used during the horizontal interpolation step. 00098 ! Their value must be defined as XUNDEF. 00099 ! 00100 ! 00101 CALL OPEN_AUX_IO_SURF(HINIFILE,HINIFILETYPE,'FULL ') 00102 ! 00103 !------------------------------------------------------------------------------- 00104 ! 00105 !* 5. Number of points and packing 00106 ! ---------------------------- 00107 ! 00108 CALL GET_SURF_SIZE_n('SEA ',NDIM) 00109 ! 00110 ALLOCATE(LCOVER (JPCOVER)) 00111 ALLOCATE(XCOVER (NDIM,JPCOVER)) 00112 ALLOCATE(XZS (NDIM)) 00113 ALLOCATE(XLAT (NDIM)) 00114 ALLOCATE(XLON (NDIM)) 00115 ALLOCATE(XMESH_SIZE (NDIM)) 00116 ! 00117 CALL PACK_PGD(HPROGRAM, 'SEA ', & 00118 CGRID, XGRID_PAR, LCOVER, & 00119 XCOVER, XZS, & 00120 XLAT, XLON, XMESH_SIZE ) 00121 ! 00122 !------------------------------------------------------------------------------ 00123 ! 00124 !* 2. Reading of grid 00125 ! --------------- 00126 ! 00127 CALL PREP_GRID_EXTERN(HINIFILETYPE,ILUOUT,CINGRID_TYPE,CINTERP_TYPE,INI) 00128 ! 00129 CALL PREP_OUTPUT_GRID(ILUOUT,CGRID,XGRID_PAR,XLAT,XLON) 00130 ! 00131 !* mask where interpolations must be done 00132 ! 00133 LINTERP(:) = .TRUE. 00134 ! 00135 !------------------------------------------------------------------------------ 00136 ! 00137 !* 3. Reading of fields 00138 ! ----------------- 00139 ! 00140 ALLOCATE(ZSEABATHY(INI,1)) 00141 CALL READ_SURF(HPROGRAM,'BATHY',ZSEABATHY(:,1),IRESP,HDIR='A') 00142 ! 00143 ALLOCATE(ZWORK(NDIM,1)) 00144 CALL HOR_INTERPOL(ILUOUT,ZSEABATHY(:,1:1),ZWORK(:,1:1)) 00145 ALLOCATE(XSEABATHY (NDIM)) 00146 XSEABATHY(:) = ZWORK(:,1) 00147 DEALLOCATE(ZSEABATHY,ZWORK) 00148 ! 00149 !============================================================ 00150 ! G. TANGUY 03/2009 00151 ! reading of fields for SST_DATA 00152 CALL READ_SURF(HPROGRAM,'SST_DATA',LSST_DATA,IRESP) 00153 ! 00154 IF (LSST_DATA) CALL READ_PGD_SEAFLUX_PAR_n(HPROGRAM,INI,HDIR='A') 00155 ! 00156 !============================================================ 00157 ! 00158 CALL CLOSE_AUX_IO_SURF(HINIFILE,HINIFILETYPE) 00159 ! 00160 !============================================================ 00161 ! 00162 CALL CLEAN_PREP_OUTPUT_GRID 00163 IF (LHOOK) CALL DR_HOOK('ZOOM_PGD_SEAFLUX',1,ZHOOK_HANDLE) 00164 !------------------------------------------------------------------------------- 00165 ! 00166 END SUBROUTINE ZOOM_PGD_SEAFLUX