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