New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
dtasst.F90 in trunk/NEMO/OPA_SRC/DTA – NEMO

source: trunk/NEMO/OPA_SRC/DTA/dtasst.F90 @ 3

Last change on this file since 3 was 3, checked in by opalod, 20 years ago

Initial revision

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.4 KB
Line 
1MODULE dtasst
2   !!======================================================================
3   !!                       ***  MODULE  dtasst  ***
4   !! Data : Sea Surface Temperature (SST)
5   
6   !!      BUG initialisation  nyearsst !!!!!!bug
7   
8   !!======================================================================
9   
10   !!----------------------------------------------------------------------
11   !!   dta_sst      : Reynolds sst data
12   !!----------------------------------------------------------------------
13   !! * Modules used
14   USE oce             ! ocean dynamics and tracers
15   USE dom_oce         ! ocean space and time domain
16   USE in_out_manager  ! I/O manager
17   USE ocfzpt          ! ???
18   USE daymod          ! calendar
19
20   IMPLICIT NONE
21   PRIVATE
22
23   !! * Shared routine
24   PUBLIC dta_sst
25
26   !! * Shared module variables
27#if defined key_dtasst
28   LOGICAL , PUBLIC, PARAMETER ::   lk_dtasst = .TRUE.   ! sst data flag
29#else
30   LOGICAL , PUBLIC, PARAMETER ::   lk_dtasst = .TRUE.   ! sst data flag
31#endif
32   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   &
33      sst             ! surface temperature
34   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,2) ::   &
35      rclice          ! climatological ice index (0/1) (2 months)
36   !!----------------------------------------------------------------------
37   !!   OPA 9.0 , IPSL-LODYC  (2003)
38   !!----------------------------------------------------------------------
39
40CONTAINS
41
42#if defined key_dtasst
43   !!----------------------------------------------------------------------
44   !!   'key_dtasst'                                               SST data
45   !!----------------------------------------------------------------------
46
47   SUBROUTINE dta_sst( kt )
48      !!---------------------------------------------------------------------
49      !!                  ***  ROUTINE dta_sst  ***
50      !!                   
51      !! ** Purpose :   Read Reynolds weekly mean sea surface temperature
52      !!      data and update it at each time step.
53      !!
54      !! ** Method  : - Read a specific REYNOLDS daily sst in Celcius.
55      !!              -  Compute a climatological ice cover rclice (0 or 1)
56      !!
57      !! ** Action  : - sst (Celcius)
58      !!              - rclice, ice/ocean mask (0 or 1)
59      !!
60      !! History :
61      !!        !  90-03  (O. Marti and Ph Dandin)  Original code
62      !!        !  92-07  (M. Imbard)
63      !!        !  96-11  (E. Guilyardi)  Daily AGCM input files
64      !!        !  00-04  (M. Imbard)  NetCDF FORMAT
65      !!        !  00-10  (J.-P. Boulanger)  passage ORCA a TDH
66      !!        !  01-10  (A. Lazar)  Reynolds default
67      !!   8.5  !  02-06  (G. Madec)  F90: Free form and module
68      !!        !  02-11  (C. Levy)  MPP/MPI NetCDF read
69      !!----------------------------------------------------------------------
70      !! * Modules used
71      USE ioipsl
72     
73      !! * Arguments
74      INTEGER ::   kt
75
76      !! * Local save
77      INTEGER, SAVE ::   &
78      ndaysst,        &  ! new day for Reynolds sst
79      nyearsst           ! new year for Reynolds sst
80
81      !! * Local declarations
82      INTEGER ::   ji, jj
83      INTEGER ::   iprint
84      INTEGER ::   iy, iday, idy
85      INTEGER ::   istep(366)
86      INTEGER ::   ipi, ipj, ipk
87
88      REAL(wp) ::   zdate0, zdt, ztgel
89      REAL(wp) ::   zlon(jpi,jpj), zlat(jpi,jpj), zlev(jpk)
90      CHARACTER (len=45) ::   &
91         clname = "sst_1d.nc"      ! filename for daily SST
92      !!----------------------------------------------------------------------
93
94      IF( kt == nit000 ) THEN
95         IF(lwp) WRITE(numout,*)
96         IF(lwp) WRITE(numout,*) 'dta_sst : DAILY sea surface temperature data'
97         IF(lwp) WRITE(numout,*) '~~~~~~~   read in file: ', clname
98      ENDIF
99
100
101      ! 0. initialization
102      ! -----------------
103
104      ipi = jpiglo
105      ipj = jpjglo
106      ipk = jpk
107
108      IF( nleapy == 0 ) THEN
109         idy=365
110      ELSEIF( nleapy == 1 ) THEN
111         IF( MOD( nyear, 4 ) == 0 ) THEN
112            idy=366
113         ELSE
114            idy=365
115         ENDIF
116      ELSEIF( nleapy == 30 ) THEN
117         IF(lwp) WRITE(numout,*) 'dtasst : nleapy = 30 is not compatible'
118         IF(lwp) WRITE(numout,*) '         with existing files'
119         IF(lwp) WRITE(numout,*) 'WE STOP'
120         STOP 1234
121      ENDIF
122     
123     
124      ! 2. Open files if nyearsst
125      ! -------------------------
126
127      IF( nyearsst /= nyear ) THEN
128         nyearsst = nyear
129         iprint   = 1
130         
131         !  2.1 Define file name and record
132         
133         !   Close/open file if new year
134         
135         IF( nyearsst /= 0 )   CALL flinclo(numsst)
136         iy = nyear
137         IF(lwp) WRITE (numout,*) iy
138         IF(lwp) WRITE (numout,*) 'open sst file = ', clname
139         CALL FLUSH(numout)
140         
141         CALL flinopen( clname, mig(1), nlci, mjg(1), nlcj, .FALSE., ipi, ipj   &
142            , ipk, zlon, zlat, zlev, idy, istep, zdate0, zdt, numsst )
143         
144         IF( ipi /= jpidta .OR. ipj /= jpjdta ) THEN
145            IF(lwp) WRITE(numout,*)
146            IF(lwp) WRITE(numout,*) 'problem with dimensions'
147            IF(lwp) WRITE(numout,*) ' ipi ', ipi, ' jpidta ', jpidta
148            IF(lwp) WRITE(numout,*) ' ipj ', ipj, ' jpjdta ', jpjdta
149            nstop = nstop + 1
150         ENDIF
151         IF(lwp) WRITE(numout,*) idy, istep, zdate0, zdt
152      ELSE
153         iprint = 0
154      ENDIF
155
156
157      ! 3. Read SST if new day
158      ! -------------------------
159
160      ! Read daily SST
161
162      IF( ndaysst /= nday ) THEN
163         ndaysst = nday
164         iday = nday_year
165         
166         CALL flinget( numsst, 'sst', jpidta, jpjdta, 1, idy, iday,   &
167            iday, mig(1), nlci, mjg(1), nlcj, sst(1:nlci,1:nlcj) )
168         
169         IF ( kt == nit000 .AND. lwp ) THEN
170            WRITE(numout,*) ' '
171            WRITE(numout,*) ' read daily sea surface temperature ok'
172            WRITE(numout,*) ' '
173            WRITE(numout,*) ' Surface temp day: ', ndastp
174            CALL prihre(sst(1,1),jpi,jpj,1,jpi,20,1,jpj,10,1.,numout)
175         ENDIF
176         
177      ENDIF
178     
179      ! 2. At every time step compute temperature data
180      ! ----------------------------------------------
181     
182      DO jj = 1, jpj
183         DO ji = 1, jpi
184            ztgel = fzptn(ji,jj)
185            rclice(ji,jj,1) = tmask(ji,jj,1)
186            IF( sst(ji,jj) >= ztgel )   rclice(ji,jj,1) = 0.e0
187            rclice(ji,jj,2) = rclice(ji,jj,1)
188         END DO
189      END DO
190      IF( kt == nit000 .AND. lwp ) THEN
191         WRITE(numout,*)
192         WRITE(numout,*) 'Computed Ice cover rclice'
193         WRITE(numout,*)
194         WRITE(numout,*) 'Ice cover : '
195         CALL prihre( rclice(1,1,1), jpi, jpj, 1, jpi, 20, 1, jpj, 10, 1., numout )
196      ENDIF
197     
198      ! Close the file
199      ! --------------
200     
201      IF( kt == nitend )   CALL flinclo(numsst)
202      CALL FLUSH(numout)
203     
204
205   END SUBROUTINE dta_sst
206
207#else
208   !!----------------------------------------------------------------------
209   !!   Default option :                                        NO SST data
210   !!----------------------------------------------------------------------
211
212   SUBROUTINE dta_sst( kt )
213      !!---------------------------------------------------------------------
214      !!                  ***  ROUTINE dta_sst  ***
215      !!                   
216      !! ** Purpose :   sea surface temperature data and update it
217      !!     at each time step.   ???
218      !!
219      !! ** Method  : - sst   = tn
220      !!              - rclice = 1. IF tn =< ztgel
221      !!
222      !! History :
223      !!        !  91-03  ()  Original code
224      !!   8.5  !  02-06  (G. Madec)  F90: Free form and module
225      !!----------------------------------------------------------------------
226      !! * Arguments
227      INTEGER, INTENT( in ) ::   kt      ! ocean timestep
228     
229      !! * Local declarations
230      INTEGER :: ji, jj
231      !!---------------------------------------------------------------------
232     
233      IF( kt == nit000 ) THEN
234         IF(lwp) WRITE(numout,*)
235         IF(lwp) WRITE(numout,*) 'dta_sst : No SST data'
236         IF(lwp) WRITE(numout,*) '~~~~~~~'
237      ENDIF
238     
239      ! 1. Update at each time step
240      ! ---------------------------
241
242      sst   (:,:)   = tn   (:,:,1)
243      rclice(:,:,1) = tmask(:,:,1)
244      DO jj = 1, jpj
245         DO ji = 1, jpi
246            IF( tn(ji,jj,1) >= fzptn(ji,jj) ) rclice(ji,jj,1) = 0.e0
247         END DO
248      END DO
249      rclice(:,:,2) = rclice(:,:,1)
250     
251   END SUBROUTINE dta_sst
252#endif
253
254   !!======================================================================
255END MODULE dtasst
Note: See TracBrowser for help on using the repository browser.