SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/interpol_sst_mth.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE INTERPOL_SST_MTH(KYEAR,KMONTH,KDAY,PSST)
00003 !     #######################################################
00004 !
00005 !!****  *INTERPOL_SST_MTH* - Interpolation of monthly SST
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !!
00010 !!
00011 !!**  METHOD
00012 !!    ------
00013 !!
00014 !!
00015 !!    EXTERNAL
00016 !!    --------
00017 !!
00018 !!    IMPLICIT ARGUMENTS
00019 !!    ------------------
00020 !!
00021 !!    REFERENCE
00022 !!    ---------
00023 !!
00024 !!    AUTHOR
00025 !!    ------
00026 !!      
00027 !     B.Decharme  Meteo-France
00028 !!
00029 !!    MODIFICATIONS
00030 !!    -------------
00031 !!      Original    28/01/10
00032 !-------------------------------------------------------------------------------
00033 !
00034 !*       0.    DECLARATIONS
00035 !              ------------
00036 !
00037 USE MODD_SEAFLUX_n,  ONLY : XSST_MTH, CINTERPOL_SST
00038 !
00039 USE MODI_INTERPOL_QUADRA
00040 !
00041 !
00042 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00043 USE PARKIND1  ,ONLY : JPRB
00044 !
00045 IMPLICIT NONE
00046 !
00047 !*       0.1   Declaration of arguments
00048 !------------------------
00049 ! 
00050 INTEGER, INTENT(IN ) :: KYEAR  ! year of date
00051 INTEGER, INTENT(IN ) :: KMONTH ! month of date
00052 INTEGER, INTENT(IN ) :: KDAY   ! day of date
00053 !
00054 REAL, DIMENSION(:), INTENT(OUT) :: PSST   ! Sea surface temperature at time t 
00055 !
00056 !*       0.2   Declaration of local variables
00057 !              ------------------------------
00058 !
00059 REAL    :: ZDAT,ZNDAT
00060 INTEGER :: IMTH1,IMTH2,IMTH3
00061 INTEGER :: INDAYS ! number of days in KMONTH
00062 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00063 !-------------------------------------------------------------------------------
00064 !
00065 !*       1.    Number of days in a month
00066 !              -------------------------
00067 !
00068 IF (LHOOK) CALL DR_HOOK('INTERPOL_SST_MTH',0,ZHOOK_HANDLE)
00069 SELECT CASE (KMONTH)
00070     CASE(4,6,9,11)
00071       INDAYS=30
00072     CASE(1,3,5,7:8,10,12)
00073       INDAYS=31
00074     CASE(2)
00075       IF( ((MOD(KYEAR,4)==0).AND.(MOD(KYEAR,100)/=0)) .OR. (MOD(KYEAR,400)==0))THEN
00076         INDAYS=29
00077       ELSE
00078         INDAYS=28
00079       ENDIF
00080 END SELECT
00081 !
00082 !
00083 !-------------------------------------------------------------------------------
00084 !
00085 !*       2.    SST Interpolation using previous, current and next month
00086 !              --------------------------------------------------------
00087 !
00088 ZDAT = REAL(KDAY)
00089 ZNDAT= REAL(INDAYS)
00090 !
00091 ! The current month correspond to the indice 2 (or KMONTH+1 if ANNUAL)
00092 !
00093 IF(CINTERPOL_SST=='MONTH ')THEN
00094   CALL INTERPOL_QUADRA(ZDAT,ZNDAT,XSST_MTH(:,1),XSST_MTH(:,2),XSST_MTH(:,3),PSST)
00095 ELSE
00096   IMTH1=KMONTH
00097   IMTH2=KMONTH+1
00098   IMTH3=KMONTH+2
00099   CALL INTERPOL_QUADRA(ZDAT,ZNDAT,XSST_MTH(:,IMTH1),XSST_MTH(:,IMTH2),XSST_MTH(:,IMTH3),PSST)
00100 ENDIF
00101 IF (LHOOK) CALL DR_HOOK('INTERPOL_SST_MTH',1,ZHOOK_HANDLE)
00102 !
00103 !-------------------------------------------------------------------------------
00104 !
00105 END SUBROUTINE INTERPOL_SST_MTH