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