SURFEX v8.1
General documentation of Surfex
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, PSST)
7 ! ###############################################################
8 !!**** *SST_UPDATE*
9 !!
10 !! PURPOSE
11 !! -------
12 !
13 ! performs the time evolution of sst
14 !
15 !!** METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !! none
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! none
26 !!
27 !! REFERENCE
28 !! ---------
29 !!
30 !!
31 !! AUTHOR
32 !! ------
33 !!
34 !! P. Le Moigne * Meteo-France *
35 !!
36 !! MODIFICATIONS
37 !! -------------
38 !! Original 09/2007
39 !!
40 !-------------------------------------------------------------------------------
41 !
42 !* 0. DECLARATIONS
43 ! ------------
44 !
45 !
47 USE modd_seaflux_n, ONLY : seaflux_t
48 !
49 USE modi_temporal_dists
50 USE modi_temporal_lts
51 !
52 !
53 USE yomhook ,ONLY : lhook, dr_hook
54 USE parkind1 ,ONLY : jprb
55 !
56 IMPLICIT NONE
57 !
58 !* 0.1 declarations of arguments
59 !
60 !
61 !
62 TYPE(data_seaflux_t), INTENT(INOUT) :: DTS
63 TYPE(seaflux_t), INTENT(INOUT) :: S
64 !
65 REAL, DIMENSION(:), INTENT(INOUT) :: PSST ! sst
66 !
67 !* 0.2 declarations of local variables
68 !
69 INTEGER :: JXP
70 REAL, DIMENSION(SIZE(PSST)) :: ZSST, ZSST0
71 REAL :: ZSDTJX
72 REAL :: ZDT, ZALPHA
73 REAL(KIND=JPRB) :: ZHOOK_HANDLE
74 !-----------------------------------------------------------------
75 !
76 IF (lhook) CALL dr_hook('SST_UPDATE',0,zhook_handle)
77 !
78 IF (.NOT.s%LTZTIME_DONE) THEN
79  s%LTZTIME_DONE = .true.
80  s%JSX = 1
81  s%TZTIME%TDATE%YEAR = s%TTIME%TDATE%YEAR
82  s%TZTIME%TDATE%MONTH = s%TTIME%TDATE%MONTH
83  s%TZTIME%TDATE%DAY = s%TTIME%TDATE%DAY
84  s%TZTIME%TIME = s%TTIME%TIME
85 ENDIF
86 !
87 zsst0(:) = s%XSST_INI(:)
88 !
89 IF ( temporal_lts( s%TTIME, dts%TDATA_SST(1) ) ) THEN
90  !
91  CALL temporal_dists ( dts%TDATA_SST(1)%TDATE%YEAR,dts%TDATA_SST(1)%TDATE%MONTH, &
92  dts%TDATA_SST(1)%TDATE%DAY ,dts%TDATA_SST(1)%TIME, &
93  s%TZTIME%TDATE%YEAR ,s%TZTIME%TDATE%MONTH, &
94  s%TZTIME%TDATE%DAY ,s%TZTIME%TIME, &
95  zsdtjx )
96  !
97  CALL temporal_dists ( s%TTIME%TDATE%YEAR ,s%TTIME%TDATE%MONTH, &
98  s%TTIME%TDATE%DAY ,s%TTIME%TIME, &
99  s%TZTIME%TDATE%YEAR ,s%TZTIME%TDATE%MONTH, &
100  s%TZTIME%TDATE%DAY ,s%TZTIME%TIME, &
101  zdt )
102  !
103  zalpha = zdt / zsdtjx
104  !
105  zsst(:)= zsst0(:)+(dts%XDATA_SST(:,1)-zsst0(:))*zalpha
106  !
107 ELSE IF ( .NOT. temporal_lts( s%TTIME, dts%TDATA_SST(dts%NTIME) ) ) THEN
108  !
109  zsst(:) = dts%XDATA_SST(:,dts%NTIME)
110  !
111 ELSE
112  !
113  DO
114  jxp = s%JSX + 1
115  IF ( temporal_lts( s%TTIME, dts%TDATA_SST(jxp)) ) EXIT
116  s%JSX = s%JSX + 1
117  ENDDO
118  !
119  CALL temporal_dists ( dts%TDATA_SST(jxp)%TDATE%YEAR,dts%TDATA_SST(jxp)%TDATE%MONTH, &
120  dts%TDATA_SST(jxp)%TDATE%DAY ,dts%TDATA_SST(jxp)%TIME, &
121  dts%TDATA_SST(s%JSX)%TDATE%YEAR ,dts%TDATA_SST(s%JSX)%TDATE%MONTH, &
122  dts%TDATA_SST(s%JSX)%TDATE%DAY ,dts%TDATA_SST(s%JSX)%TIME, &
123  zsdtjx )
124  !
125  CALL temporal_dists ( s%TTIME%TDATE%YEAR ,s%TTIME%TDATE%MONTH, &
126  s%TTIME%TDATE%DAY ,s%TTIME%TIME, &
127  dts%TDATA_SST(s%JSX)%TDATE%YEAR,dts%TDATA_SST(s%JSX)%TDATE%MONTH, &
128  dts%TDATA_SST(s%JSX)%TDATE%DAY ,dts%TDATA_SST(s%JSX)%TIME, &
129  zdt )
130  !
131  zalpha = zdt / zsdtjx
132 
133  !
134  zsst(:)= dts%XDATA_SST(:,s%JSX)+(dts%XDATA_SST(:,jxp)-dts%XDATA_SST(:,s%JSX))*zalpha
135  !
136 END IF
137 !
138 psst(:) = zsst(:)
139 !
140 IF (lhook) CALL dr_hook('SST_UPDATE',1,zhook_handle)
141 !-----------------------------------------------------------------
142 !
143 END SUBROUTINE sst_update
logical function temporal_lts(TPT1, TPT2)
Definition: temporal_lts.F90:7
subroutine sst_update(DTS, S, PSST)
Definition: sst_update.F90:7
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine temporal_dists(KYEARF, KMONTHF, KDAYF, PSECF, KYEARI, KMONTHI, KDAYI, PSECI, PDIST)