SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/zoom_pgd_seaflux.F90
Go to the documentation of this file.
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