SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
sst_update.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE sst_update (DTS, S, &
7  psst,ttime)
8 ! ###############################################################
9 !!**** *SST_UPDATE*
10 !!
11 !! PURPOSE
12 !! -------
13 !
14 ! performs the time evolution of sst
15 !
16 !!** METHOD
17 !! ------
18 !!
19 !! EXTERNAL
20 !! --------
21 !! none
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !! none
27 !!
28 !! REFERENCE
29 !! ---------
30 !!
31 !!
32 !! AUTHOR
33 !! ------
34 !!
35 !! P. Le Moigne * Meteo-France *
36 !!
37 !! MODIFICATIONS
38 !! -------------
39 !! Original 09/2007
40 !!
41 !-------------------------------------------------------------------------------
42 !
43 !* 0. DECLARATIONS
44 ! ------------
45 !
46 !
48 USE modd_seaflux_n, ONLY : seaflux_t
49 !
51 USE modi_temporal_dists
52 USE modi_temporal_lts
53 !
54 !
55 USE yomhook ,ONLY : lhook, dr_hook
56 USE parkind1 ,ONLY : jprb
57 !
58 IMPLICIT NONE
59 !
60 !* 0.1 declarations of arguments
61 !
62 !
63 !
64 TYPE(data_seaflux_t), INTENT(INOUT) :: dts
65 TYPE(seaflux_t), INTENT(INOUT) :: s
66 !
67 TYPE(date_time), INTENT(IN) :: ttime ! UTC time
68 REAL, DIMENSION(:), INTENT(INOUT) :: psst ! sst
69 !
70 !* 0.2 declarations of local variables
71 !
72 INTEGER :: jxp
73 REAL, DIMENSION(SIZE(PSST)) :: zsst, zsst0
74 REAL :: zsdtjx
75 REAL :: zdt, zalpha
76 REAL(KIND=JPRB) :: zhook_handle
77 !-----------------------------------------------------------------
78 !
79 IF (lhook) CALL dr_hook('SST_UPDATE',0,zhook_handle)
80 !
81 IF (.NOT.s%LTZTIME_DONE) THEN
82  s%LTZTIME_DONE = .true.
83  s%JSX = 1
84  s%TZTIME%TDATE%YEAR = ttime%TDATE%YEAR
85  s%TZTIME%TDATE%MONTH = ttime%TDATE%MONTH
86  s%TZTIME%TDATE%DAY = ttime%TDATE%DAY
87  s%TZTIME%TIME = ttime%TIME
88 ENDIF
89 !
90 zsst0(:) = s%XSST_INI(:)
91 !
92 IF ( temporal_lts( ttime, dts%TDATA_SST(1) ) ) THEN
93  !
94  CALL temporal_dists( dts%TDATA_SST(1)%TDATE%YEAR,dts%TDATA_SST(1)%TDATE%MONTH, &
95  dts%TDATA_SST(1)%TDATE%DAY ,dts%TDATA_SST(1)%TIME, &
96  s%TZTIME%TDATE%YEAR ,s%TZTIME%TDATE%MONTH, &
97  s%TZTIME%TDATE%DAY ,s%TZTIME%TIME, &
98  zsdtjx )
99  !
100  CALL temporal_dists( ttime%TDATE%YEAR ,ttime%TDATE%MONTH, &
101  ttime%TDATE%DAY ,ttime%TIME, &
102  s%TZTIME%TDATE%YEAR ,s%TZTIME%TDATE%MONTH, &
103  s%TZTIME%TDATE%DAY ,s%TZTIME%TIME, &
104  zdt )
105  !
106  zalpha = zdt / zsdtjx
107  !
108  zsst(:)= zsst0(:)+(dts%XDATA_SST(:,1)-zsst0(:))*zalpha
109  !
110 ELSE IF ( .NOT. temporal_lts( ttime, dts%TDATA_SST(dts%NTIME) ) ) THEN
111  !
112  zsst(:) = dts%XDATA_SST(:,dts%NTIME)
113  !
114 ELSE
115  !
116  DO
117  jxp = s%JSX + 1
118  IF ( temporal_lts( ttime, dts%TDATA_SST(jxp)) ) EXIT
119  s%JSX = s%JSX + 1
120  ENDDO
121  !
122  CALL temporal_dists( dts%TDATA_SST(jxp)%TDATE%YEAR,dts%TDATA_SST(jxp)%TDATE%MONTH, &
123  dts%TDATA_SST(jxp)%TDATE%DAY ,dts%TDATA_SST(jxp)%TIME, &
124  dts%TDATA_SST(s%JSX)%TDATE%YEAR ,dts%TDATA_SST(s%JSX)%TDATE%MONTH, &
125  dts%TDATA_SST(s%JSX)%TDATE%DAY ,dts%TDATA_SST(s%JSX)%TIME, &
126  zsdtjx )
127  !
128  CALL temporal_dists( ttime%TDATE%YEAR ,ttime%TDATE%MONTH, &
129  ttime%TDATE%DAY ,ttime%TIME, &
130  dts%TDATA_SST(s%JSX)%TDATE%YEAR,dts%TDATA_SST(s%JSX)%TDATE%MONTH, &
131  dts%TDATA_SST(s%JSX)%TDATE%DAY ,dts%TDATA_SST(s%JSX)%TIME, &
132  zdt )
133  !
134  zalpha = zdt / zsdtjx
135 
136  !
137  zsst(:)= dts%XDATA_SST(:,s%JSX)+(dts%XDATA_SST(:,jxp)-dts%XDATA_SST(:,s%JSX))*zalpha
138  !
139 END IF
140 !
141 psst(:) = zsst(:)
142 !
143 IF (lhook) CALL dr_hook('SST_UPDATE',1,zhook_handle)
144 !-----------------------------------------------------------------
145 !
146 END SUBROUTINE sst_update
subroutine sst_update(DTS, S, PSST, TTIME)
Definition: sst_update.F90:6
logical function temporal_lts(TPT1, TPT2)
Definition: temporal_lts.F90:6
subroutine temporal_dists(KYEARF, KMONTHF, KDAYF, PSECF, KYEARI, KMONTHI, KDAYI, PSECI, PDIST)