SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/sst_update.F90
Go to the documentation of this file.
00001 !     #########
00002     SUBROUTINE SST_UPDATE(PSST,TTIME)
00003 !   ###############################################################
00004 !!****  *SST_UPDATE*
00005 !!
00006 !!    PURPOSE
00007 !!    -------
00008 !
00009 !     performs the time evolution of sst
00010 !              
00011 !!**  METHOD
00012 !!    ------
00013 !!
00014 !!    EXTERNAL
00015 !!    --------
00016 !!    none
00017 !!
00018 !!    IMPLICIT ARGUMENTS
00019 !!    ------------------
00020 !!      
00021 !!    none
00022 !!
00023 !!    REFERENCE
00024 !!    ---------
00025 !!
00026 !!      
00027 !!    AUTHOR
00028 !!    ------
00029 !!
00030 !!      P. Le Moigne          * Meteo-France *
00031 !!
00032 !!    MODIFICATIONS
00033 !!    -------------
00034 !!      Original    09/2007
00035 !!
00036 !-------------------------------------------------------------------------------
00037 !
00038 !*       0.     DECLARATIONS
00039 !               ------------
00040 !
00041 USE MODD_TYPE_DATE_SURF
00042 USE MODD_SEAFLUX_n, ONLY : XSST_INI, TZTIME, LTZTIME_DONE, JSX
00043 USE MODD_DATA_SEAFLUX_n, ONLY : NTIME, XDATA_SST, TDATA_SST
00044 USE MODI_TEMPORAL_DISTS
00045 USE MODI_TEMPORAL_LTS
00046 !
00047 !
00048 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00049 USE PARKIND1  ,ONLY : JPRB
00050 !
00051 IMPLICIT NONE
00052 !
00053 !*      0.1    declarations of arguments
00054 !
00055 !
00056 TYPE(DATE_TIME),      INTENT(IN)    :: TTIME   ! UTC time
00057 REAL,   DIMENSION(:), INTENT(INOUT) :: PSST    ! sst
00058 !
00059 !*      0.2    declarations of local variables
00060 !
00061 INTEGER                                  :: JXP
00062 REAL, DIMENSION(SIZE(PSST))              :: ZSST, ZSST0
00063 REAL                                     :: ZSDTJX
00064 REAL                                     :: ZDT, ZALPHA
00065 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00066 !-----------------------------------------------------------------
00067 !
00068 IF (LHOOK) CALL DR_HOOK('SST_UPDATE',0,ZHOOK_HANDLE)
00069 !
00070 IF (.NOT.LTZTIME_DONE) THEN
00071    LTZTIME_DONE = .TRUE.
00072    JSX = 1
00073    TZTIME%TDATE%YEAR  = TTIME%TDATE%YEAR
00074    TZTIME%TDATE%MONTH = TTIME%TDATE%MONTH
00075    TZTIME%TDATE%DAY   = TTIME%TDATE%DAY
00076    TZTIME%TIME        = TTIME%TIME
00077 ENDIF
00078 !
00079 ZSST0(:) = XSST_INI(:)
00080 !
00081 IF ( TEMPORAL_LTS ( TTIME, TDATA_SST(1) ) ) THEN
00082   !
00083   CALL TEMPORAL_DISTS ( TDATA_SST(1)%TDATE%YEAR,TDATA_SST(1)%TDATE%MONTH, &
00084                         TDATA_SST(1)%TDATE%DAY ,TDATA_SST(1)%TIME,        &
00085                         TZTIME%TDATE%YEAR   ,TZTIME%TDATE%MONTH,          &
00086                         TZTIME%TDATE%DAY    ,TZTIME%TIME,                 &
00087                         ZSDTJX                                            )  
00088   !
00089   CALL TEMPORAL_DISTS ( TTIME%TDATE%YEAR   ,TTIME%TDATE%MONTH,           &
00090                         TTIME%TDATE%DAY    ,TTIME%TIME,                  &
00091                         TZTIME%TDATE%YEAR  ,TZTIME%TDATE%MONTH,          &
00092                         TZTIME%TDATE%DAY   ,TZTIME%TIME,                 &
00093                         ZDT                                              )  
00094   !
00095   ZALPHA = ZDT / ZSDTJX
00096   !
00097   ZSST(:)= ZSST0(:)+(XDATA_SST(:,1)-ZSST0(:))*ZALPHA
00098   !
00099 ELSE IF ( .NOT. TEMPORAL_LTS ( TTIME, TDATA_SST(NTIME) ) ) THEN
00100   !
00101   ZSST(:) = XDATA_SST(:,NTIME)
00102   !
00103 ELSE
00104   !
00105   DO
00106     JXP = JSX + 1
00107     IF ( TEMPORAL_LTS( TTIME, TDATA_SST(JXP)) ) EXIT
00108     JSX = JSX + 1
00109   ENDDO
00110   !  
00111   CALL TEMPORAL_DISTS ( TDATA_SST(JXP)%TDATE%YEAR,TDATA_SST(JXP)%TDATE%MONTH,   &
00112                         TDATA_SST(JXP)%TDATE%DAY ,TDATA_SST(JXP)%TIME,          &
00113                         TDATA_SST(JSX)%TDATE%YEAR ,TDATA_SST(JSX)%TDATE%MONTH,  &
00114                         TDATA_SST(JSX)%TDATE%DAY  ,TDATA_SST(JSX)%TIME,         &
00115                         ZSDTJX                                            )  
00116   !
00117   CALL TEMPORAL_DISTS ( TTIME%TDATE%YEAR   ,TTIME%TDATE%MONTH,                  &
00118                         TTIME%TDATE%DAY    ,TTIME%TIME,                         &
00119                         TDATA_SST(JSX)%TDATE%YEAR,TDATA_SST(JSX)%TDATE%MONTH,   &
00120                         TDATA_SST(JSX)%TDATE%DAY ,TDATA_SST(JSX)%TIME,          &
00121                         ZDT                                             )  
00122   !
00123   ZALPHA = ZDT / ZSDTJX
00124 
00125   !
00126   ZSST(:)= XDATA_SST(:,JSX)+(XDATA_SST(:,JXP)-XDATA_SST(:,JSX))*ZALPHA
00127   !                
00128 END IF
00129 !
00130 PSST(:) = ZSST(:)
00131 !
00132 IF (LHOOK) CALL DR_HOOK('SST_UPDATE',1,ZHOOK_HANDLE)
00133 !-----------------------------------------------------------------
00134 !
00135 END SUBROUTINE SST_UPDATE